2つのLinuxコンピュータ間でポータブル暗号化ZFSフォーマットドライブを共有する問題

2つのLinuxコンピュータ間でポータブル暗号化ZFSフォーマットドライブを共有する問題

2つのLinux(NixOS)システムがあり、暗号化されたZFS形式のポータブルUSBハードドライブを共有したいと思います。 1台のコンピュータで正常に動作しましたが、2台目のコンピュータにインストールしようとすると、ドライブのZFSファイルシステムが破損している可能性があります。

USBドライブをあるシステムから別のシステムに移動する前にzpoolをエクスポートしてアンマウントしました。 2番目のシステムのドライブからzpoolをインポートできるようにしたいが、zpoolのZFSの概念を誤解している可能性があります。 、などのさまざまな組み合わせでは、2番目のシステムでZFSドライブを見ることはできませんzpool list。ドライブは間違いなく登場しましたが、この2番目のシステムのZFSの自動検出は不明な理由でドライブを無視しました。zpool import -azpool import -D/dev/sdb

sudo zpool create z /dev/sdb私はzpoolがこのシステムでミラーリングする必要がある完全に仮想的なものだと思って簡単なことをしましたが、このコマンドは警告なしにそのドライブの元のZFSファイルシステムを上書きしたようです。ドライブは暗号化されていない空のファイルシステムになり、ここからデータを回復できるかどうかはわかりません。幸い、バックアップがあったため、完全な損失ではありませんでした。

2つの質問:

  1. 既存のvdevに新しいzpoolを作成すると、そのデバイスの古いZFSファイルシステムは永久に削除されますか?

  2. 既存の暗号化されたZFSドライブzpoolをあるシステムから別のシステムにインポートし、元のzpool構成オプション(圧縮、暗号化、データセットなど)をすべてインポートするにはどうすればよいですか。そうでなければzpool import何ですか?

答え1

実験を通して最初の質問に答えたと思います。はい、zpool create影響を受けたvdevの既存のプールをすべて削除します。

このプールを共有するシステム間の互換性を確保したい場合は、zpool構造のメカニズムが正確でテストの成功を妨げる可能性がある潜在的なブロックがないと確信するまで暗号化を中止することをお勧めします。 。

ZFSプールをシステム間で移植するために必要な条件の1つは、プールを構成するブロックデバイス(およびプールメタデータにエンコードされたブロックデバイス)がプールを持つすべてのシステムで明示的でなければならないことです。輸入。これにより/dev/sdb。より良いアプローチは、使用する各ドライブにパーティションを作成し、使用する各パーティションに一意のラベルを割り当てることです。ドライブのシリアル番号は、フルメタデータで電子的に見ることができるだけでなく、出力でも見ることができ、物理ドライブシャーシをblkid検査するときに人が見ることができるため、使いやすい文字列であることがよくあります。

したがって、ハードドライブのシリアル番号がある場合は、6SL0CTDそのドライブにパーティションを作成してラベルを付ける必要がありますzfs-data-6SL0CTD。次に、潜在的に変更可能な物理デバイスではなく、対応する論理デバイスを参照するプールを作成します。

# zpool create tank /dev/disk/by-partlabel/zfs-data-6SL0CTCD

また、マニュアルページを読み、zpool import何をインポートするか(またはインポートしないでください)、わからない場合に使用できる非破壊ツールがたくさんあることに注意してください。

パラメータがない場合:

# zpool import

インポートできるプールを表示します。テストケースはありませんが、プールも見せてくれると思います。できない通常、機器の欠落や誤動作により輸入されます。デバイスが「欠落している」理由の1つは、プールメタデータに/ dev / sdbが使用されていることを示していますが、ホストにすでに/ dev / sdbがあり、デバイスにプールと一致するメタデータがないためです。繰り返しますが、パーティションラベルを割り当ててパーティションラベルのみに基づいてプールを作成することが重要な理由です。対応するパーティションラベルがあれば、プールを見つけることができ、何でも可能です。物理パーティションが表示されるデバイスです。

# zpool import -N tank

プールをインポートしますが、tankプールからファイルシステムをマウントしないでください。これは、プールの補助検査として使用できます。何も設置されていなくてもプールの統計を確認でき、プールにscrubベッドを敷くことができるなどの作業が可能です。

明確なデバイス名を使用するようにプールを正しく作成したら、後でこれがなぜ重要なのかを理解します。

zpool status -Pプール内のすべてのデバイスの完全な論理パスが表示されます。

# zpool status -P
  pool: tank
 state: ONLINE
  scan: scrub repaired 0B in 21h34m with 0 errors on Sun Oct 10 21:58:23 2021
config:

    NAME                                            STATE     READ WRITE CKSUM
    tank                                          ONLINE       0     0     0
      /dev/disk/by-partlabel/zfs-data-6SL0CTCD    ONLINE       0     0     0

errors: No known data errors

それ以外の場合はzpool status -L表示されます。物理プール内のすべてのデバイスのデバイス名:

# zpool status -L
  pool: tank
 state: ONLINE
  scan: scrub repaired 0B in 21h34m with 0 errors on Sun Oct 10 21:58:23 2021
config:

    NAME                                            STATE     READ WRITE CKSUM
    tank                       ONLINE       0     0     0
      sdb1                     ONLINE       0     0     0

errors: No known data errors

物理デバイスノードの代わりにパーティションラベルを使用する最終結果は、プールにインポートされたzpool status -Pすべてのシステムで出力が同じですが、出力がzpool status -L非常に異なる可能性があることです。これがzpool createプールにインポートする必要があるすべてのシステムで、これらのデバイスが明示的であることを保証するために、非変形論理デバイスの観点からコマンドを作成する必要がある理由です。

明示的なデバイス名に基づいてプールを構築した後、プールをインポートできる必要があるホストにかなり似たZFSスタックがあると仮定すると、zpool暗号化が簡単になります。

関連情報