一連のサブボリュームを含むBTRFSファイルシステムがあります。ここまでは順調ですね。サブボリュームの名前を変更する必要があります。残念ながら、btrfs
プログラムではサブボリュームの名前を変更できません。 Googleで検索した結果、いくつかの結果が得られました。1つはmv
でいい、もう1つは新しい名前にsnapshot
して古いサブボリュームを削除できると言いました。パーティションをクラッシュさせてバックアップから再ロードする必要がある前に(それは非常に大きい)、私の質問は次のとおりです。
mv
だけでもいいですか、それともいくつかの内部構造を無効にしますか?私はすべてがまだ実験的であることを知っていますが、私の目的のためにそれは非常にうまく機能しています(これまでのところ、毎日の増分バックアップがあります)。
ただmv
です。 buntuコミュニティのドキュメント で推奨される方法です。
それが正しい方法である理由をさらに明確にするために、btrfs sysadminガイドからの引用を次に示します。
スナップショット
スナップショットは、btrfsのCOW機能を使用して、データ(およびメタデータ)を他のサブボリュームと共有するサブボリュームです。 [書き込み可能]スナップショットが作成されると、元のサブボリュームと新しいスナップショットサブボリュームのステータスに違いはありません。スナップショットにロールバックするには、変更された元のサブボリュームをアンマウントし、代わりにスナップショットをマウントします。この時点で、必要に応じて元のサブボリュームを削除できます。スナップショットはサブボリュームであるため、スナップショットのスナップショットも可能です。
注意すべき重要な点はほとんどありません。命名:
btrfsサブボリューム-独立したデータコンテナinside
ファイルシステム。これは、既存のFSのdirectoryとして表されます。新しいサブボリュームを作成すると、空になり、ファイルシステム内の論理データブロックを使用できるようになります。データを論理的に分離する必要がある場合に使用すると非常に便利です。異なるVMまたは異なるサブボリューム上の異なるクライアント。これにより、very fast
allの削除-=サブボリューム削除コマンドだけで論理データブロック。
btrfsスナップショット-osスナップショットが実行された瞬間のすべてのデータを含むexisting
サブボリュームのコピー。設定や変更を元に戻すための運用バックアップとして使用できます。サブボリュームのスナップショットを作成し、変更(VMまたはデータ)を行い、すべての問題がないかテストします。猶予期間の後、スナップショットを削除します。注意することが重要:スナップショットは読み取り専用(-r
スイッチ)なので、FS変更の増分ブロックとして使用でき、完全に別のBTRFSに転送される可能性があります!
現在(2016-12-30)BTRFSの制限:
サブボリューム間でのデータのコピーまたは移動(例: mv dir1/dataset1 dir_subvolume1/
は、データを別のサブボリュームにコピーするためのすべての実際のioを生成し、移動する場合は元のioから削除します。そしてvery参照を作成し、BTRFSのCOW機能を使用するだけで、大量のデータを効率的にコピーできます。
cp -a --reflink=always dir1/dataset1 dir_subvolume1/
必要に応じて:
rm -rf dir1/dataset1
読み取り専用のサブボリュームスナップショットは、既存のディレクトリレベルで名前を変更(mv
で移動)できますが、名前を変更したり、別のサブディレクトリレベルに移動したりすることはできません。例えばmv /btrfs/subvol_snap1 /btrfs/.snaphots
は不可能であり、あまり説明のないエラーを生成します:mv: cannot move 'subvol_snap1' to '.snapshots/subvol_snap1': Read-only file system
。このようなスナップショットを移動できるようにするには、既存の読み取り専用スナップショットの新しい読み取り専用スナップショットを新しい優先場所に作成してから、古いスナップショットを削除する必要があります。
btrfs sub snap -r /btrfs/subvol_snap1 /btrfs/.snaphots/subvol_snap1
btrfs sub del /btrfs/subvol_snap1
ライブをより簡単にするために:
btrfs sub list /btrfs
これがすべての新しいbtrfsファンに時間の節約になることを願っています:)
ルートボリュームの名前をネストされたサブボリュームに変更する場合は、スナップショットを作成してから、find $ROOT_VOL -xdev -delete
を実行して、ルートボリュームの以前の内容を削除する必要があります。逆の操作(サブボリュームの名前をルートボリュームに変更)は不可能のようです。