2つのLinux(NixOS)システムがあり、暗号化されたZFS形式のポータブルUSBハードドライブを共有したいと思います。 1台のコンピュータで正常に動作しましたが、2台目のコンピュータにインストールしようとすると、ドライブのZFSファイルシステムが破損している可能性があります。
USBドライブをあるシステムから別のシステムに移動する前にzpoolをエクスポートしてアンマウントしました。 2番目のシステムのドライブからzpoolをインポートできるようにしたいが、zpoolのZFSの概念を誤解している可能性があります。 、などのさまざまな組み合わせでは、2番目のシステムでZFSドライブを見ることはできませんzpool list
。ドライブは間違いなく登場しましたが、この2番目のシステムのZFSの自動検出は不明な理由でドライブを無視しました。zpool import -a
zpool import -D
/dev/sdb
sudo zpool create z /dev/sdb
私はzpoolがこのシステムでミラーリングする必要がある完全に仮想的なものだと思って簡単なことをしましたが、このコマンドは警告なしにそのドライブの元のZFSファイルシステムを上書きしたようです。ドライブは暗号化されていない空のファイルシステムになり、ここからデータを回復できるかどうかはわかりません。幸い、バックアップがあったため、完全な損失ではありませんでした。
2つの質問:
既存のvdevに新しいzpoolを作成すると、そのデバイスの古いZFSファイルシステムは永久に削除されますか?
既存の暗号化された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暗号化が簡単になります。