web-dev-qa-db-ja.com

Rsync -avzHPはハードリンクとしてコピーするのではなく、ハードリンクに従います

私はrsnapshotを使用して、「作業」共有の毎時/毎日/毎週/毎月のバックアップを作成します。現在、rsyncを使用して、バックアップディレクトリ全体を外部ドライブにコピーしようとしています。

このコマンド/パラメータをスクリーンセッション内で使用しました(はい、rsync-exclude.txtはコマンドを実行したディレクトリにあります)

rsync -avzHP --exclude-from 'rsync-exclude.txt' /share/backup/ /share/eSATADisk1/backup/;

すべてはQNAP TS-439で実行されています。内部ドライブは単一ディスク(RAIDなし)でフォーマットされたEXT4で、外部ドライブはEXT3でフォーマットされています。

何が起こるか:Rsyncはすべてのハードリンクに従い、外部ドライブに更新されたハードリンクを再作成するのではなく実際のファイルをコピーします。私はこれをすぐに認識しなかったので、外部ドライブは同じファイルのxxxコピーでゴミ箱に捨てられました。

私が達成したいのは、rsnapshotで生成されたファイル構造全体を外部ドライブにコピーして、ハードリンクを維持してスペースを節約することです。注:これは、必ずしもrsyncを使用して行う必要はありません。

あなたのアイデアと時間をありがとう。どうぞよろしくお願いいたします。

pdate: rsnapshotはシンボリックリンクを使用していないことを学びました。ハードリンクを使用しているため、-Hオプションを使用して、複数の宛先へのハードリンク構造を保持します Rsnapshot to multiple destinations(or maintainハードリンク構造) しかし、それでも機能しません...ここで何が欠けていますか?

pdate 2:このトピックに関する別の意見/説明がここに見つかりました: rhardと--hard-linksがフリーズします スティーブンマンデーは、ハードリンクを含む大きなファイル構造をrsyncしようとしないことを提案しています。それは多くのメモリを吸収し、rsyncにとって難しいタスクです。したがって、おそらくより良い解決策は、バックアップしようとしているデータ構造の.imgを作成することです。 どう思いますか?

13
woerndl

rsync コマンドの-H(または--hard-links)オプションは、理論的には、達成しようとしていることを簡単に実行します。オリジナルのハードリンク構造を保持するファイルシステムのコピー。 別の同様の質問に対する私の回答 で述べたように、ソースファイルシステムがハードリンクの複雑さの特定のしきい値を超えた場合、このオプションは失敗する運命にあります。

そのしきい値の正確な場所は、あなたのRAMおよびハードリンクの総数(そしておそらく他の多くのもの)に依存するかもしれませんが、それを定義しようとしても意味がないことがわかりましたreallyが重要なのは、しきい値が実際の状況で通過するのが非常に簡単であり、あなたがhaversync -aHまたはcp -aを実行しようとして苦労して最終的に失敗する日が来るまで、それを超えました。

私がお勧めするのはこれです。強くリンクされたファイルシステムを、ファイルとしてではなく、1つの単位としてコピーします。つまり、ファイルシステムパーティション全体を1つの大きなblobとしてコピーします。これを行うためのツールはいくつかありますが、最も普及しているのはddです。

ストックファームウェアを使用する場合、QNAP NASにはddfdiskが組み込まれている必要があります。fdiskを使用して、パーティションにパーティションを作成します少なくともソースパーティションと同じ大きさの宛先ドライブ次に、ddを使用して、新しく作成された宛先パーティションにソースパーティションの正確なコピーを作成します。

ddコピーの進行中は、コピー先のコピーが破損しないように、コピー元のファイルシステムに変更がないことを確認する必要があります。これを行う1つの方法は、コピープロセスを開始する前にソースをumountすることです。別の方法は、ソースを読み取り専用モードでマウントすることです。

10
Steven Monday

-lはシンボリックリンク用ですが、ハードリンクに対して何をするのですか?

(申し訳ありませんが、これは回答ではなくコメントです。まだコメント権限がありません。この回答には応答が必要です)

コメントである別のメモ:これはすべてネイティブハードウェアですか、それともVM、ネットワークマウントですか?

編集する

ハードリンクを使用している理由に関する以前のコメントを無視して、rsnapshotコメントを逃しました。

最初に2つのローカルディレクトリローカルディスク間のrsyncをテストし、次にリモートディスクに対してテストを行うと便利です。この小さなテストは-Hオプションが期待どおりに動作します。 -ilsの_オプションはiノードを表示するため、リンクが保持されており、追加のコピーはありません。

$ rsync -avzHP src/ dest
sending incremental file list
created directory dest
./
file111_prime.txt
           9 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/3)
file111.txt => file111_prime.txt

sent 156 bytes  received 59 bytes  430.00 bytes/sec
total size is 18  speedup is 0.08

$ ls -liR
.:
total 8
414044 drwxrwxr-x. 2 nhed nhed 4096 Feb 25 09:58 dest
414031 drwxrwxr-x. 2 nhed nhed 4096 Feb 25 09:58 src

./dest:
total 8
414046 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111_prime.txt
414046 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111.txt

./src:
total 8
414032 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111_prime.txt
414032 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111.txt

その後のテストrsync -avzHP src/ Host:/tmpリモートホストへのハードリンクを維持

1
nhed

これはロングショットですが、別の解決策が見つからない場合は、USBドライブをEXT4としてフォーマットすることをお勧めします。多分これは問題かもしれません: https://bugzilla.samba.org/show_bug.cgi?id=767

ソースフォルダに十分なハードリンクがあり、宛先ボリュームが十分に小さい場合、rsync --hard-linksを使用したコピーは失敗する可能性があります。宛先のハードリンクの最大数を使い果たしてRsyncが失敗する<...>実際の問題はrsyncではなく、基礎となるファイルシステムです。

1
Motsel

-lオプションを追加してみましたか?

私はmanページを知っていますsays-aに含まれていますが、manページは必ずしも100%正確であるとは限りません。

0
Ladadadada