dnodesize = auto を設定した後に ZFS ルート ファイルシステムを起動する方法 (grub がディスクを読み取れないようにする)

dnodesize = auto を設定した後に ZFS ルート ファイルシステムを起動する方法 (grub がディスクを読み取れないようにする)

6 台のディスクを持つサーバーの ZFS 上に proxmox (バージョン 5.4 だと思います) をインストールしています。プールは 2 つあります。1 つは 2 つの SSD のミラーにある rpool で、proxmox ルート ファイルシステムといくつかのコンテナーおよび zvol があります。もう 4 つのディスクは raidz-1 の別のプール (HDD) にあります。

2 か月前、私は ZFS パラメータの最適化作業を行っていて、dnodesize = autorpool プールと子プールを含むすべてのプールをアクティブ化しました。今、サーバーを再起動すると、次のメッセージが表示されました。

error: no such device: 40d7d14f38cc...
error: unknown filesystem
Entering rescue mode...
grub rescue>

私が行った調査によると、これはパラメータdnodesize(チェックここここそしてここ)。最初のリンクから直接引用します。

何らかのファイルによってデータセット内の非レガシー (512 バイト) dnode サイズがトリガーされたため、GRUB はドライブを読み取れなくなりました。

今、どこから始めればよいかについてはいくつかアイデアがありますが、疑問もたくさんあります (私はあまり経験のある管理者ではありません)。そのため、行き詰まったり、何かを壊したりする前に、まずあなたに質問したいと思いました。

まず、ZFS 対応 OS を搭載したライブ USB を作成できます。おそらく、同じ 5.4 proxmox ISO を使用するのが最善の選択肢でしょう。そうすれば、ライブ USB から古い proxmox プールをロードして操作することは可能でしょうか? 方法は?

問題は、dnodesize = legacy変更が遡及的に適用されないため、設定するだけでは不十分であることです。そのため、ここでどのように進めればよいか正確にはわかりません。ただし、私が持っているオプションは次のとおりです。

  1. 512 バイトの標準 dnode 制限を超えているファイルを検出する方法があれば教えてください。次に、それらのファイルを別の場所に切り取って移動し、貼り付けて戻します。ここでの問題は、それらのファイルをどのように検出するかということです。
  2. すべての rpool コンテンツを外部ディスクに切り取り、再度 rpool に貼り付けます。ここでの問題は、proxmox ルート ファイルシステムを前後に移動しても再び機能するとは思えないことです。cp -a?
  3. grub が読み取り可能である必要がある唯一のコンテンツは、/boot 内のコンテンツであるようです。しかし、/boot フォルダーは rpool プール内にあり、zfs プールは縮小できません。そのため、現在のプールを縮小してブート用の新しいプールを作成することはできず、サーバーにディスクを追加することもできません。唯一のオプションは、/boot をペンドライブに移動し、grub にそこを検索するように指示することです。しかし、これはそれほど堅牢でも決定的な解決策でもないようです。

何かアドバイス?

編集: grub2 を、より ZFS に優しいブートローダーに置き換えるのはどうでしょうか? proxmox wiki より:

systemd-boot は軽量の EFI ブートローダです。これは、インストールされている EFI サービス パーティション (ESP) からカーネルと initrd イメージを直接読み取ります。カーネルを ESP から直接ロードする主な利点は、ストレージにアクセスするためのドライバーを再実装する必要がないことです。ZFS をルート ファイル システムとして使用する場合、これは、grub の ZFS 実装にも存在するサブセットの代わりに、または別の小さなブート プールを作成する代わりに、ルート プールですべてのオプション機能を使用できることを意味します。

実際のところ、次のようです。

Proxmox VE は現在、インストーラーで選択されたディスク設定に応じて 2 つのブートローダーのいずれかを使用します。ルート ファイルシステムとして ZFS がインストールされた EFI システムの場合、systemd-boot が使用されます。その他のすべてのデプロイメントでは、標準の grub ブートローダーが使用されます。

それで、なぜ systemd-boot ではなく grub でインストールされたのかわかりません。何も壊さずにブートローダーを置き換えることは可能ですか?

ご協力いただきありがとうございます。

関連情報