Date: Fri, 12 Aug 2022 20:14:35 +0900 From: freebsdusersjp@t11i.jp To: freebsd-users-jp@freebsd.org Subject: =?UTF-8?B?UmU6IOi1t+WLleaZguOBq+eJueWumuOBruODh+ODkOOCpOOCueOBjA==?= =?UTF-8?B?6KqN6K2Y44GV44KM44KL44G+44GnenBvb2zjga5pbXBvcnTjgpLlvoXjgaTmlrk=?= =?UTF-8?B?5rOV?= Message-ID: <c4021218-7388-5683-eeb1-0a49d5fc1f84@t11i.jp> In-Reply-To: <20220809.055920.888534649866018568.hrs@FreeBSD.org> References: <3ed6f837-258e-86a4-eb0d-34d2d453e49a@t11i.jp> <20220809.055920.888534649866018568.hrs@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
戸川です。
青木さん、佐藤さん、ありがとうございます。
コンピュータとHDDは以下のような環境でした。
・富士通 PRIMERGY TX1310 M3
・Seagate ST12000VN0008
佐藤さん:
> kern.cam.boot_delay="5000"
> kern.cam.scsi_delay="5000"
/dev/ada3が認識されるまでだいたい10秒ぐらいだったので、
kern.cam.boot_delay="10000"
とか
kern.cam.scsi_delay="15000"
とかやってみましたが、状況は変わりませんでした。
(/dev/ada? が認識される遙か前に、/etc/rc.d/zpool が
実行されているような状況は変わりませんでした)
青木さん:
> テストしてはいませんが思いつくのは、ダミーのスクリプトを
> /etc/rc.d/以下に置くことでしょうか。
> 具体的な書き方の例は`man rc`で見て頂くのと/etc/rc.d/に既にある
> スクリプトを見て頂くとして、
> # BEFORE: zpool
> を含むのがポイントで、実処理としては必要なデバイスが生えて
> いなければループして生えたら脱出、という処理ができる必要が
> あるでしょう。
このアドバイスを元に、rcとかrcorderとかの使い方を調べまして、
以下のような対処をしています。
ありがとうございます。
----
以下のスクリプトを /etc/rc.d/zpool_before として作成しました。
----
#!/bin/sh
# PROVIDE: disks
# KEYWORD: nojail
. /etc/rc.subr
name="zpool_disks"
desc="Wait disk for ZPOOLs"
rcvar="zfs_enable"
start_cmd="zpool_disk_start"
zpool_disk_start()
{
if [ "${zpool_waiting_device}" ] ; then
dev=${zpool_waiting_device}
echo "Find ${dev}"
i=0
while [ $i -lt 15 ] ; do
if [ -e ${dev} ] ; then
break
fi
echo "Could not find device ${dev}. Wait 1sec."
sleep 1
i=`expr $i + 1`
done
fi
}
load_rc_config $name
run_rc_command "$1"
----
# PROVIDE: disks
とすることで、/etc/rc.d/zpool より前にこのスクリプトを実行させています。
(/etc/rc.d/zpool は # REQUIRE: disks なので)
また、ZFSのファイルシステムは/etc/rc.d/zfsでmountされますが、
このスクリプトは/etc/rc.d/FILESYSTEMSの中でREQUIREされておらず、
このままではFILESYSTEMSがprovideされたときに
/usrや/varがmountされている保証がないので、
/etc/fstab に/usrや/varのエントリを入れて、
/etc/rc.d/mountcritlocal の中でmountされることを保証するようにしました。
重ねまして、お二方、ありがとうございました。
On 2022/08/09 5:59, Hiroki Sato wrote:
> 佐藤です。
>
> freebsdusersjp@t11i.jp wrote
> in <3ed6f837-258e-86a4-eb0d-34d2d453e49a@t11i.jp>:
>
> fr> 13.1-RELEASEにおいて、起動時に特定のディスクデバイスが認識されるまで
> fr> zpoolのimportを待つ方法を探しています。
> ...
> fr> 試しにこのスクリプトを編集し、/dev/ada3 が認識されるまで
> fr> sleepするようにしたところ、zpoolのimportに成功しました。
>
> /boot/loader.conf に
>
> kern.cam.boot_delay="5000"
>
> を書くと変わったりするでしょうか。
> これを設定すると、起動中にブロックデバイスを認識する段階で、
> 設定された数字だけ余計に待つようになります。単位は ms で、デフォルトは 0 です。
>
> また、SCSI バスリセットから機器が応答するまでの待ち時間は
> 別の設定になっていて、次の変数が対応します。
> こちらも単位は同じで、デフォルトは 5000 です。
>
> kern.cam.scsi_delay="5000"
>
> 認識に時間がかかる機器がある場合は、この 2 つを調整することが多いです。
>
> -- Hiroki
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?c4021218-7388-5683-eeb1-0a49d5fc1f84>
