背景:
- Ubuntu Xenial
- システムディスク用にインストールされたZFS(つまり、rpool / ROOT)
- システムは正常に動作しますが、カーネルが更新されると、
grub-probe
上記の樹皮エラー - 今は再起動したくない
ここにgrub-probe
についての議論があります そしてそれがどのように「ただ良くなる」べきか、しかしこれはそれが実現するまで助けになります。その議論からアイデアを得ました。
詳細:(私のシステムの)エラーの完全なインスタンスは次のようになります:
/usr/sbin/grub-probe: error: failed to get canonical path of `/dev/ata-ADATA_SP550_2G1520009135-part1'.
これは、グラフィックスドライバをインストールするためのaptコマンドから噴出される多くの詳細に埋もれています(ただし、これは重要ではありません)。
このディスクは、私のZILパーティションの1つに対応しています。インストールの完了後にZILとキャッシュを追加したので、以前は問題が発生していなかったのではないかと思います。まだ再起動していないので、問題が発生しています。はい、再起動してこれをすべて修正できますが、それを望まない場合は、以下をお読みください:
/ devを見ると、次のようなすべてのZFSディスクへのリンクが表示されます。
lrwxrwxrwx 1 root root 4 Sep 16 23:31 ata-WDC_WD10EARS-00Y5B1_WD-WMAV51436394-part1 -> sdc1
lrwxrwxrwx 1 root root 4 Sep 16 23:31 ata-WDC_WD20EZRX-00D8PB0_WD-WCC4MK86SWX7-part1 -> sdd1
lrwxrwxrwx 1 root root 4 Sep 16 23:31 ata-WDC_WD20EZRX-00D8PB0_WD-WCC4N1085683-part1 -> sde1
lrwxrwxrwx 1 root root 4 Sep 16 23:31 ata-WDC_WD2500JS-22MHB0_WD-WCANK4053187-part1 -> sda1
…ただし、ZILパーティションの場合は特にありません。
次を実行して状況をテストできます:
$ sudo grub-probe /
grub-probe: error: failed to get canonical path of `/dev/ata-ADATA_SP550_2G1520009135-part1'.
したがって、問題は、この問題をどのように修正するかということです。grub-probe
動作しますか?
承認された回答:
これを修正する環境変数があります。私が読んだ問題は、Grubがzfsを「サポート」するという考えは好きだが、Grubでzfsに関連する問題を修正するという考えは好きではないということのようです。具体的には、物事を見つけるという点でのエラー処理が不十分です。
たとえば、Ubuntu 16.xに同梱されているgrubツールは、ユーザーの介入なしにZFSボリュームで/ bootを見つけることができず、使用しているユーティリティから出力された必要なファイルの一部(すべてではない)を/bootフォルダが見つかりませんでした。
とにかく…
http://list.zfsonlinux.org/pipermail/zfs-discuss/2016-June/025765.html
To check if you have commit (should see full paths):
ZPOOL_VDEV_NAME_PATH=1 zpool status
If so you can do:
ZPOOL_VDEV_NAME_PATH=1 grub-whatevs ....
変数を必要なgrubユーティリティへの入力として渡すか、ルートの.bashrcや.profileなどでシェル変数として指定することができます…
export ZPOOL_VDEV_NAME_PATH=YES
この変数により、zpoolは、ディスクへの相対/ devパスではなく、フルパスを報告します。これは、zfsで正しく機能する場合と機能しない場合があります。 Grubユーティリティは、zfsプールのzpoolステータスをチェックして、それらを含むディスクを見つけます。したがって、zpoolステータスの出力を変更するとgrubが修正されます。
関連:GRUBから不要なEFIエントリを削除する方法は?femulatorのコメントを参照して、ユーザーがこれに対処する必要がないことに同意します。本当の解決策は?修正されないバグで苦しむ他のすべてのオープンソースプロジェクトと同じです。フォークして自分で修正し、ソースプロジェクト/ライブラリなどの使用を停止します。誰かを「発砲」するFOSSの方法、言い換えれば;)。どうやらDebianは7年前にこの特定のバグを知っていたようです。
これが、FreeBSDRaidZブートプールをUbuntuに正常に移行するのを妨げた唯一の理由でした。他の誰かが同様のことを試みた場合、Grubとzfsonlinuxのドキュメントの間違っている部分(ルートデータセットを自動マウントしないように設定するなど)を無視するのに十分なZFSを理解している限り、プロセスは比較的簡単です。正確に起動しますか?) UbuntuがドキュメントでブートローダーがLinuxの最も安全でない「機能」であると指摘しているのは少し皮肉なことですが、これは本当だと思いますが、この場合はUbuntuの明白な欠陥でもあります。実際に機能するSun/Solarisユーティリティを使用して移行できたとしたら、BSDZFSプールを別のOSに移行するのに1〜2時間かかりました。問題は、ある時点で機能しない(またはほとんど機能しない)Linuxユーティリティ(Grubなど)を使用しなければならなかったため、これを修正するために費やした残りの2日間に問題があります。起動するのにgrubが必要なければ、Ubuntuの方がはるかに優れています…