Re: 起動時に特定のデバイスが 認識されるまでzpoolのimportを待つ 方法
- In reply to: freebsdusersjp_a_t11i.jp: "起動時に特定のデバイスが認識 されるまでzpoolのimportを待つ方法"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 08 Aug 2022 14:01:32 UTC
On Mon, 8 Aug 2022 22:02:39 +0900 freebsdusersjp@t11i.jp wrote: > 戸川と申します。 > > 13.1-RELEASEにおいて、起動時に特定のディスクデバイスが認識されるまで > zpoolのimportを待つ方法を探しています。 > > ---- > > 下記のようなディスク環境を使用しています。 > > ・FreeBSD 12.3-RELEASE → 13.1-RELEASEにupgrade > ・Root FS (/usr や /var を含まない): > NVMe SSD上のパーティション(UFS) > ・/usr, /var: > HDD 4台(/dev/ada0 - /dev/ada3)で構成されるRAIDZのpool上にあるZFS > > ---- > > 12.3-RELEASEを動作させている時点で、既に > 「起動時に /etc/rc.d/zfs を実行していると思しき時点で、 > まだ /dev/ada0 等のディスクデバイスが認識されておらず、 > /usr のマウントに失敗して起動が停止する」 > という現象が発生していました。 > (このRoot FSは、NVMe SSDの前はUSBメモリ上に構築しており、 > 速いNVMe SSDに移した際にこの現象が発生しました) > > この時は、下記のページを参考に、/etc/fstab に > /usr のマウント指定を書き足す、というworkaroundで解決しました。 > https://lists.freebsd.org/pipermail/freebsd-questions/2013-July/252121.html > > (このあたりの対処は以下のページに書きました。 > http://toga.vegalta.org/wordpress/2022/01/09/1097 ) > > ---- > > 13.1-RELEASEにupgradeしたところ、起動時のzpoolのimportが > /etc/rc.d/zpool から行われるようになったようで、 > このスクリプトが実行される時点で /dev/ada0 等が認識されていないと > importに失敗するようです。 > > 試しにこのスクリプトを編集し、/dev/ada3 が認識されるまで > sleepするようにしたところ、zpoolのimportに成功しました。 > > FreeBSD標準で同じような機能が無いかと思い、お伺いしました。 > > > よろしくお願いいたします。 テストしてはいませんが思いつくのは、ダミーのスクリプトを /etc/rc.d/以下に置くことでしょうか。 具体的な書き方の例は`man rc`で見て頂くのと/etc/rc.d/に既にある スクリプトを見て頂くとして、 # BEFORE: zpool を含むのがポイントで、実処理としては必要なデバイスが生えて いなければループして生えたら脱出、という処理ができる必要が あるでしょう。 とはいうものの、/usrや/varがroot partitionに無いのは 現実には破滅的な構成です。 /usr/以下については local,ports,src,obj(,home) /var/以下については cache,db,games,log,mail,tmp 以外はroot partitionに置くべきでしょう。 ※/var/以下は、できればtmp以外はroot on ZFSで データセットを分ける場合を除いて分けたくない ところです。 # 今のところ比較的遅いタイミングで呼ばれるものばかりの # ようですが、`grep -r "/usr/bin" /rtc/rc.d/`とか # `grep -r "/usr/sbin" /rtc/rc.d/`とか実行してみると # それなりの数ヒットしますので、誰かが何かの間違いで # ごく初期の段階で走るスクリプトで/usr/bin/や/usr/sbin/に # あるコマンドを呼び出す変更をコミットしてしまうと # 起動不能に陥る恐れがありますし。 -- 青木 知明 [Tomoaki AOKI] <junchoon@dec.sakura.ne.jp>