web-dev-qa-db-ja.com

Ubuntuブートでzpoolインポートする前に待機します

ZFSを使用してDell PowerEdge R720xdにUbuntu 18.04をインストールしました。 ZFS mirror構成には2つの1TBブートドライブがあります。 Linux Wiki上のZFS の指示に従いました。

(注:私のシステムでは、ZFSとこのRAIDカードが連携していないため、オンボードRAIDカードの代わりにLSI LSI00244(9201-16i)ホストバスアダプター(HBA)を使用しています。)

Ubuntuを起動するとき、システムがドライブを列挙するのに約10秒かかります(14のドライブがあります-2つはOS用で、12は後で他のzpoolsにセットアップされるデータストレージ用です)。ただし、ブートプロセスは、ドライブが列挙される前にブートプールをインポートしようとします。

BusyBoxのエラーメッセージが画面上で点滅し、基本的に次のように表示されます。

プールをインポートできませんでした。

このBusyBoxシェルにプールを手動でインポートしてから、exitと入力して、起動プロセスを続行します。

メッセージが表示されてから数秒待つと、14台のドライブが一覧表示されます。

動作するBusyBoxプロンプトでzpool import rpoolと入力し(zpool listで確認)、次にexitと入力してブートプロセスを続行します。 (これが私の次の問題であるカーネルのクラッシュにつながりますが、それは別の質問です。)

ブートオプションにrootdelay=15を追加してみましたが、ZFSプールのインポート後に遅延を実行したいため、動作しないようです。

起動プロセスがデバイスの表示を待ってからプールをインポートしようとするにはどうすればよいですか?

5
Moshe Katz

私はついにこれを/etc/default/zfsで見つけました:

# Wait for this many seconds in the initrd mountroot?
# This delays startup and should be '0' on most systems. This might help on
# systems which have their ZFS root on a USB disk that takes just a little
# longer to be available
# Only applicable for Debian GNU/Linux {dkms,initramfs}.
ZFS_INITRD_POST_MODPROBE_SLEEP='0'

設定方法は次のとおりです。

  1. Ubuntu Live CD(またはその他のリカバリメディア)から起動します。
  2. /mntを使用してプールをzpool import rpool -R /mntにインポートします
  3. 必要なファイルシステムをバインドしますmount --rbind /dev /mnt/dev; mount --rbind /proc /mnt/proc; mount --rbind /sys /mnt/sys
  4. /mntにchrootします:chroot /mnt /bin/bash --login
  5. /etc/default/zfsを編集して、上記の値を0から15に変更します
  6. update-initramfsおよびupdate-grubを実行します
  7. Chroot環境を終了して再起動します
6
Moshe Katz