Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 8 Aug 2022 23:01:32 +0900
From:      Tomoaki AOKI <junchoon@dec.sakura.ne.jp>
To:        freebsdusersjp@t11i.jp
Cc:        freebsd-users-jp@freebsd.org
Subject:   Re: =?UTF-8?B?6LW35YuV5pmC44Gr54m55a6a44Gu44OH44OQ44Kk44K544GM?= =?UTF-8?B?6KqN6K2Y44GV44KM44KL44G+44GnenBvb2zjga5pbXBvcnTjgpLlvoXjgaQ=?= =?UTF-8?B?5pa55rOV?=
Message-ID:  <20220808230132.ce496c102cdaedeffc5a8cf8@dec.sakura.ne.jp>
In-Reply-To: <3ed6f837-258e-86a4-eb0d-34d2d453e49a@t11i.jp>
References:  <3ed6f837-258e-86a4-eb0d-34d2d453e49a@t11i.jp>

next in thread | previous in thread | raw e-mail | index | archive | help

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>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20220808230132.ce496c102cdaedeffc5a8cf8>