rsyncおよびシンボリックリンク


69

cron実行するジョブを使用して、ホームディレクトリを外部ドライブに夜間バックアップしrsyncます。rsyncのシンボリックリンクフラグの正確な動作は不明です。

  1. rsync-aフラグにはフラグが含まれます-l(「シンボリックリンクをシンボリックリンクとしてコピーする」)。これは単にリンクコピーするということですか、それともリンクをたどってリンク先ディレクトリ内のすべてをコピーするということですか?バックアップを必要としない数百ギガバイトのコピーを伴うメディアファイルでいっぱいのディレクトリへのリンクがあるため、それを避けたいと思います。
  2. rsync -aそれらのすべてのメディアファイルをコピーすることを恐れる(ただし確実ではない)代わりに--no-linksフラグを追加しました。これは私が望む動作ではないようです。コピーしたいリンク(たとえば、異なるプロジェクトディレクトリからの一般的なヘッダーファイルへのリンク)があるため、問題のあるリンクのコピーを無視します。
  3. 上記の#1(--no-linksフラグなし)が本当に欲しいものであり、リンク先のファイルをコピーせずにリンクをコピーするだけで、リンクがバックアップされると壊れますか?たとえば、rsyncディレクトリ/home/me/projects/miscをにソースできます/media/extdrive/backup/home/me/projects/misc。この場合rsync、相対的なディレクトリ変更のためにシンボリックリンクの内容を修正しようとしても十分に賢くないと思います。これは正しいです?これは大丈夫です。リンクが修復される必要があるときに修正されて機能する限り、バックアップディレクトリでリンクが壊れていても問題ありません。

3
-Lフラグはおそらくあなたが望むものです。Centos Linuxのrsyncのmanページから: "-L、--copy-linksはsymlinkをリファレントファイル/ディレクトリに変換します。" これをいくつかのサンプルディレクトリとリンクでテストして、意図しないデータを上書きしないことを確認することをお勧めします。データ損失の可能性に関する警告が含まれるように編集されました。;)
ミックT

回答:


90
  1. 「シンボリックリンクをシンボリックリンクとしてコピーする」とは、正確に言うと、rsyncがソースディレクトリにシンボリックリンクを見つけた場合、宛先に同一のシンボリックリンクを作成します。これ以上何もない。

    (マニュアルページの数行下の別のオプション--copy-linksでは、反対の動作(常にデータをコピーする)について、望ましくないと説明しています。)

    「シンボリックリンク」セクションも参照してください。

    --linksが指定されている場合、宛先上の同じターゲットでシンボリックリンクが再作成されます。

  2. 何をすべきかを誤って解釈している--linksため、間違った動作を求めているので、それは望んでいる動作ではありません(回答#1を参照)。

  3. デフォルトでは、宛先を正確にコピーします

    つまり、リンクが絶対パス(例/home/me/projects:)を指していた場合、同じパスを指し続けます。壊れることはありません。バックアップ内のファイルではなく、ホームディレクトリ内のファイルを指し続けるだけです。

    リンクが相対パス(例えば指さ場合一方、../../projects)、それはよ同じパスを指し続けるが、それはシンボリックリンクの場所からの相対なので、バックアップ中にシンボリックリンクもバックアップ内のファイルを指します。

    残念ながら、新しいベースの絶対シンボリックリンクを変換するオプションはないようです(完全に破壊するオプションのみ)。問題を回避するには、既存のシンボリックリンクを相対シンボリックリンクに変更する必要があります(一般的に、$ HOME内のリンクの場合は良い考えです)。


2
うーんそう違いは何だ--copy-linksとは--links
アレクサンダーミルズ

--copy-links= -L、および--links= -l。私の答えのドキュメントの説明を参照してください:superuser.com/a/1388910/425838
Gabriel Staples

12

@grawityには素晴らしい答えがありますが、ここにドキュメントの関連情報のスクリーンショットがあります。たとえば、-lとの正確な表現は-L次のとおりです。これらは問題の最も関連性の高いものと思われます。

ここに画像の説明を入力してください

ソース:https : //linux.die.net/man/1/rsyncまたはman rsyncLinuxのマニュアルページ。

-a--archive)オプションにはオプションも含まれていることに注意してください-l。これは-l、ソースからのシンボリックリンクを宛先のシンボリックリンクとして保存するオプションを使用するのが本当に好きなので、素晴らしいです manページから:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

rsyncコピー、ミラーリング、進行状況の表示など、お気に入りのコマンドと手順については注意してください...

...ドライランの実行、stderrとstdoutの(個別の)ファイルへの記録、統計の表示、インクルードパスファイル除外ファイルの使用など。ツール(Linux、Cygwinを備えたWindows) ":https : //superuser.com/a/1464264/425838

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.