現在または外部ファイルシステムを破壊/変更せずに外部ZFSファイルシステムをマウントする方法

現在または外部ファイルシステムを破壊/変更せずに外部ZFSファイルシステムをマウントする方法

私はFreeBSD 10.2を使用しており、ZFSをルートのファイルシステムとして使用しています。(zroot01)。他のFreeBSD 10.2システムのZFSファイルシステムを含む外付けハードドライブがあります。(zroot02)一時的に読み取り専用でマウントしていくつかのファイルをインポートし、後で接続を切断したいと思います。私いいえ外部ZFSシステムは現在ファイルシステムを破壊または交換したいと考えており、外部のデータが破損/変更されたくありません。

私が達成したい目標を示すためにUFSを使用している場合は、次のようにします。

mount -t ufs -o ro /dev/ada0s2 /mnt/my-fun-mountpoint

...既存のオペレーティングシステムディレクトリの/dev/ada0s2外部ドライブのパーティションはどこにありますか?/mnt/my-fun-mountpoint/mnt

すべての検索とマニュアルページを読むと、これを行う明確な方法は提供されません。私は何と答えるべきですか?したfindは最終的に私の現在のファイルシステムを引き継ぎ、回復できないほど破損しました。明らかに私が探していた結果ではありませんでした。しばらく前にこれを試してみましたが、残念ながらどのコマンドを試したか覚えていません。

これを行う方法について明確なガイドラインを提供できますか?助けてくれてありがとう。

ベストアンサー1

まあ、状況によって異なりますどのようにプールを読み取り専用にしたいです。いいえ、冗談ではありません。

まず、いくつかの用語:ZFSでは輸入プール、オプション(すべての)ファイルシステム。-Nに渡したzpool import後に必要なファイルシステムをマウントするには、ファイルシステムをマウントしなくてもプールをインポートできますzfs mount。 (たとえば、複数のファイルシステムの1つだけにアクセスしたい場合、またはプールのオフラインクリーンアップなどの操作を実行したい場合は、これは完全に有効なシナリオです。)

ZFSは真の読み取り専用アクセスには興味がありません。たとえば、ZFSが修正可能なエラーを検出した場合は、エラーを修正して回復したデータをディスクに書き込むと思います。プールを読み取り専用にインポートする場合も同様です。私が理解しているように、ZFSでは「読み取り専用」が次にのみ適用されます。ユーザーに表示されるステータスプールとそのデータセット。一方、ディスクのバイナリコピーをファイル(またはファイルセット)にコピーし、そのファイルを実際に読み取り専用にし、そこからプールをインポートしようとすると、ZFSはプールをインポートできません。 。どんなに努力してもプールは機能しません。ファイルを書き込み可能に設定すると正常に動作します。 (実際にzvolとZFSを使用しましたが、数週間前にこれを試しました。拒否するプールのインポート。読み取り専用ではなく読み取り/書き込みでzvolを設定すると、プールが正しくインポートされます。 )(Linuxの場合)ext4や他のファイルシステムはこの状況をある程度エレガントに扱うことができますが、ZFSは躊躇します。

運が悪いとECC RAMなしプールをインポートするシステムにインストールし、ZFSで発生したエラーを修正しようとすると、実際には状況を悪化させる、しかし他の考えこれが実際に実際に危険かどうかについて。私は個人的に私が重要と思っているすべてのデータがZFSとスナップショット、ストレージレベルの冗長性によって保護されると信じています。サポートなど当然ECC RAMも保護を提供しますが、多くのPCにはECC RAMはありません。

したがって、読み取り専用モードでプールをインポートし、特定の代替ルートを使用してプールが他のものを踏むのを防ぐことができますが、これが必ずしもそうではないことに注意してください。本当に法医学的な意味では読み取り専用です。 (ただし、誤ってプールの内容を変更することがないことを保証します。)読み取り専用インポートを実行するには、プール名が指定されており、デバイスノードがでtank利用可能であるとし、/dev次のコマンドを使用します。

# zpool import tank -d /dev -o readonly=on -R /mnt/someplace

/devこれは、名前付きZFSプールを含むすべてのエントリを見つけてインポートし、プール属性をtank一時的に設定しreadonlyonユーザーが開始したすべての書き込みが拒否されることを意味します)、altrootその属性を一時的に設定します/mnt/someplace。 (これらの属性値は現在の属性値としてディスクに保持されていないという点で「一時」なので、その属性値なしでプールをエクスポートして再インポートすると、値は正常に戻りますが、そうである可能性がありますzpool history tank。をインポートすると、表示されます。プールをインポートすると、/ mnt / someplaceの下にファイルが表示され、そのファイルへの一般的な読み取り専用アクセス権が得られます。

あなたの例を考えると、次のものを使用すると考えられます。

# zpool import zroot02 -d /dev -o readonly=on -R /mnt/my-fun-mountpoint

完了したら、プールをきれいにエクスポートすることを忘れないでください。

# zpool export tank

おそらく

# zpool export zroot02

これにより、プール内のすべてのファイルシステムと他のデータセットがマウント解除され、すべてのバッファ(最初にフラッシュする必要がある範囲)がフラッシュされ、プールが次のように表示されます。インポートしないすべての構成デバイスで、プールを別のシステムに安全に移動し、後でインポートできるように必要なその他の管理タスクを実行します。

おすすめ記事