既存のディレクトリから zfs を作成する適切な方法は何ですか?

既存のディレクトリから zfs を作成する適切な方法は何ですか?

たとえば、通常のディレクトリとして etc/ を含む rpool があり、元の /etc にあったすべてのデータを継承して、別の zfs rpool/etc を作成したいとします。

最も適切かつ安全な方法は何でしょうか?

答え1

/etc独自の zfs ファイル システムに変換することはサポートされていません。

その理由は、/etc(Open)Solaris が zfs ファイルシステムのマウントを開始する前の起動の初期段階で必要となるため、これを変更すると空になってしまうからです。

のスナップショットを作成したいと思われます/etcが、代わりにルート ファイル システムのスナップショットを作成することもできます。

zfs snapshot rpool/ROOT/opensolaris

opensolaris現在のブート環境の名前に置き換える必要がある場合があります(beadm listどのブート環境かを確認するには実行してください)

答え2

新しいデータセットを作成し、既存のデータを移行するための組み込みまたは自動化された方法はありません。これを実行するには、データセットを作成し、データを手動で (rsync など) 移行する必要があります。

tank\setという名前のデータセットがあり、その中に という名前のディレクトリがあるとしますfolder。このフォルダを という名前の子データセットに「昇格」させたいとしますtank\set\folder

mv /mnt/tank/set/folder /mnt/tank/set/folder-backup # move this out of the way so the new dataset doesn't mount on top of it
zfs create tank/set/folder
rsync -aAX /mnt/tank/set/folder-backup/ /mnt/tank/set/folder # bring over all the old data including acls and attributes

次に、データが適切であることを確認します。念のため、親データセットのスナップショットを作成し、folder-backupディレクトリを削除します。

答え3

かなり病的だが役に立つかもしれないアイデア:

既存のデータセットのクローンをtank\set次のように作成するとどうなるでしょうかtank\folder

tank\setそれはまさに私が欲しいもの、tank\folder\folderそして他にも大量のものが含まれているものになります。

そして、 から不要なものをtank\folderすべて削除できます。mv tank\folder\folder\* tank\folder\これはファイルシステム内の移動のみであり、数秒で完了するはずです。

1、2日後にテストしてみます


rm -rf は思ったよりも時間がかかるようです。

結局は使用するオプションです。

関連情報