rsync とシンボリックリンク

rsync とシンボリックリンク

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は十分にスマートではなく、相対ディレクトリの変更に対してシンボリックリンクの内容を修正しようとしないと思います。これは正しいですか? これは問題ありません。バックアップ ディレクトリでリンクが壊れていても、復元が必要になったときに修正されて機能する限り、問題はありません。

答え1

  1. 「シンボリックリンクをシンボリックリンクとしてコピーする」とは、まさにその通りです。rsync がソース ディレクトリでシンボリックリンクを検出すると、宛先に同一のシンボリックリンクを作成します。これ以上何もない。

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

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

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

  2. それはあなたが望む動作ではありません。なぜなら、あなたが何--linksを期待するかを誤解し、間違った動作を求めているからです (回答 1 を参照)。

  3. デフォルトでは、宛先をコピーしますその通り。

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

    一方、リンクが相対パス(例../../projects:)を指していた場合は、また同じパスを指し続けますが、シンボリックリンクの場所を基準としているため、バックアップ内のシンボリックリンクもバックアップ内のファイルを指すことになります。

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

答え2

@grawityは素晴らしい答えを出していますが、ここに関連情報のスクリーンショットがあります。ドキュメントたとえば、最も関連性の高いと思われる-l(小文字の L、1 ではない) およびオプションの正確な文言は次のとおりです。-L

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

ソース:rsync は、以下の URL から実行できます。、またはman rsyncLinux のマニュアル ページ。

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

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

また、の意味は次-rlptgoDのとおりですman rsync

   --recursive, -r          recurse into directories
   --links, -l              copy symlinks as symlinks
   --perms, -p              preserve permissions
   --times, -t              preserve modification times
   --group, -g              preserve group
   --owner, -o              preserve owner (super-user only)
   -D                       same as --devices --specials
   --devices                preserve device files (super-user only)
   --specials               preserve special files ["such as named sockets and fifos"]

重要!:

rsync使用する場合エクセルまたは脂肪しかし、ファイルシステムはないシンボリックリンクやPOSIXの所有者、グループ、権限をサポートしていないため、を削除し-lpgo-rtDの代わりにを使用してください-a必要に応じて「verbose」を追加して-v-vrtD

詳細はこちらをご覧ください:

  1. [私の答え]FAT および exFAT ファイルシステムで rsync を使用するための最適な設定
  2. rsync は ExFat 上の既存のファイルを上書きするようです
  3. https://superuser.com/a/384849/425838
  4. https://learn.microsoft.com/en-us/windows/win32/fileio/ファイルシステムの機能比較

rsyncコピー、ミラーリング、全体の進行状況の表示など、私のお気に入りのコマンドと手順については、こちらを参照してください。

...ドライランの実行、stderrとstdoutを(別々の)ファイルに記録、統計の表示、インクルードパスファイルファイルを除外するなどについては、私の完全な回答を第2セクションの「2. rsync コマンドライン ツール (Linux、Cygwin を使用した Windows)「:」https://superuser.com/a/1464264/425838

関連情報