Btrfs は書き込み中のコピーをサポートします。この関数を使用してディレクトリを複製しようとしています。
cp -R --reflink=always foo_directory foo_directory.mirror
コマンドはほぼすぐに完了すると予想しましたが(例btrfs subvolume snapshot
:)、cp
コマンドが遅い標準コピーを実行しているようです。
--reflink=always
マニュアルページによると、Copy-On-Writeを適用したいと思います。
指定すると、
--reflink[=always]
データブロックが変更されたときにのみコピーされる軽量コピーが実行されます。これが可能でない場合、複製は失敗するか、指定された--reflink=auto
場合は標準コピーに置き換えられます。
質問:
--reflink=always
なぜ動作しないのかご存知ですか?- どのオプション(または他のコマンド)を使用する必要がありますか?
答え1
cp --reflink=always
ほぼ確実にうまく動作します。それ以外の場合はエラーが発生します。設計上、--reflink=always
これは--reflink=auto
。エラーは次のとおりです。
# Filesystem that does not support the feature at all
cp: failed to clone `xx' from `yy': Inappropriate ioctl for device
# Filesystem that does support it, but copy across filesystems
cp: failed to clone `xx' from `yy': Invalid cross-device link
小さなファイルがたくさん含まれているディレクトリ構造をコピーしていますか?この場合、cp
すべてのディレクトリを作成し、すべてのファイルを開いて閉じる必要があるため、まだ時間がかかります。これはbtrfs subvolume snapshot
おそらくそれにかかる時間を説明します。