たとえば、通常のディレクトリとして 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 は思ったよりも時間がかかるようです。
結局は使用するオプションです。