すでにコピーされたファイルをフラグメントとして共有する方法(reflink)は何ですか?

すでにコピーされたファイルをフラグメントとして共有する方法(reflink)は何ですか?

私は次のように毎日別のXFSボリュームにファイルをコピーします。

# on monday
cp --sparse=always /mnt/disk1/huge.file /mnt/disk2/monday/huge.file
# on tuesday
cp --sparse=always /mnt/disk1/huge.file /mnt/disk2/tuesday/huge.file

これで、disk2にある2つのファイルの合計サイズを占めます。

私が主に使用するのと同じパーティションでは、コピーされたファイルはフラグメントを--reflink=auto共有し、変更されたブロックのみを占めます。ただし、ターゲットが別のボリュームにある場合は機能しないため、2つの既存のコピーを再接続するソリューションが必要です。

残念ながら、このように変更されたブロックだけをコピーするcpことはありませんrsync(参照接続サポートなし)。それ以外の場合は、次のようにします。

# on monday
cp --sparse=always /mnt/disk1/huge.file /mnt/disk2/huge.file
cp --reflink=always /mnt/disk2/huge.file /mnt/disk2/monday/huge.file
# on tuesday
cp --sparse=always /mnt/disk1/huge.file /mnt/disk2/huge.file
cp --reflink=always /mnt/disk2/huge.file /mnt/disk2/tuesday/huge.file

ベストアンサー1

xfsについてはわかりませんが、btrfsにはこれを行う重複排除コマンドがあります。バラよりhttps://btrfs.wiki.kernel.org/index.php/Deduplication

レプリカとは無関係に重複排除ステップを実行できます。

要求された操作を直接実行するには、プロセスを元に戻すことができます。

それは次のとおりです。

  1. 昨日のコピーから参照リンクを作成してベースラインを作成する

    cp --reflink=always/mnt/disk2/monday/huge.file /mnt/disk2/tuesday/huge.file

  2. 別の場所からソースファイルを読み、更新内容を直接作成します。例:

    rsync --inplace --no-whole-file /mnt/disk1/huge.file /mnt/disk2/tuesday/huge.file

月曜日と火曜日のバックアップの間に、必要に応じて変更されていないブロックのみが共有されることを願っています。

警告:私はこれを試していないし、それが実際にあなたが望むことをするかどうかわかりません。

バラよりhttps://superuser.com/questions/576035/does-rsync-inplace-write-to-the-entire-file-or-just-to-the-parts-that-need-to

これは関係ないかもしれませんが、rsyncに直接reflinkサポートを追加することについて議論されています。望むより:

何が問題なのかよく分からない。

おすすめ記事