私はrsyncとsshを使って自分のコンテンツをサーバーにバックアップする必要がある単純なバックアップスクリプトを設定しようとしています。
サーバードライブのスペースを節約するために、最新のバックアップに --link-dest オプションを使用して、冗長ファイルが古いファイルにハードリンクされるようにするため、実際の rsync コマンドは次のようになります。
rsync -av -e ssh --link-dest=user@server:/home/user/backups/previous /home/user/tobackup/ user@server:/home/user/backups/current
スクリプトはバックアップするファイルと「現在の」ディレクトリと「以前の」ディレクトリで実行する作業を担当します。これは単に「説明」です。
私の質問は、与えられたファイルをサーバーでサポートされているファイルと比較するので、rsyncが最初に実際にファイルを送信してから比較し、保存するか(新しいまたは変更された場合)削除する必要があると思います。変更されていない場合は、ハードリンクを保存しますか?それともファイルを送信せずに何とか比較が行われますか?
私が質問する理由は、バックアップが大きい場合は、変更されていない大きなファイルを送信する必要がなく、ファイルが変更されていないという事実だけを確認したいからです。 rsyncがこれを行う方法がわからず、その文書にはありません。したがって、これを行うかどうか、各バックアップ内のすべてのファイルがネットワーク経由で送信されると予想できるのか、rsyncのみが利用可能かを知っておくとよいでしょう。未変更の内容を送信します。
明らかに、何らかの理由で最初から私の元のアイデアに欠陥があった場合は、代替案を歓迎します。
答え1
タイトルの質問に対する答えは「はい」です。 rsyncはネットワークを介してドライブからドライブへ、フォルダからフォルダへの既存のファイルを確認し、変更されたファイルのみを更新します。
からman rsync
:
Rsyncは、サイズまたは最後の変更時間が変更されたファイルを検索する「クイックチェック」アルゴリズム(デフォルト)を使用して、転送する必要があるファイルを見つけます。クイックスキャン結果ファイルのデータを更新する必要がないことが表示された場合は、他の保持された属性(オプションで要求されているように)に対するすべての変更がターゲットファイルに直接適用されます。
rsyncはファイル内の違いを検出し、その違いを更新できるため、説明されたものよりはるかに強力です。この例については、テスト用に毎日.isoビルドをrsyncできるUbuntuテストページを参照してください。
軽い読書データ:
LinuxでRsyncを使用して新しいファイルまたは変更/変更されたファイルを同期する方法。
rsyncの仕組み
rsync マニュアル。
これらのページのいずれかを読むと、最後のページはおそらく最も重要です。このアプリが実際にどれほど多用途であるかを正確に表示します。
答え2
それともファイルを送信せずに何とか比較が行われますか?
rsync
〜するいいえ一度比較のためにファイルを送信しました。デフォルトのアルゴリズムは、サイズまたは最後の変更時間が変更されたことを確認して、ファイルを転送する必要があるかどうかを決定します。
-c
しかし、(選択できる多くのアルゴリズム)を使用してチェックサムチェックを実行するなど、より厳密にするか--size-only
。これはオプションの2つにすぎません。完全なリストについては、マニュアルページをご覧ください。