rsyncを使用して既存の宛先シンボリックリンクを保持する


9

ローカルのdebianリポジトリを最新の状態に保つためにrsync(1)を使用しています。最近、保存に使用しているディスクの空き容量が少なくなってきたため、シンボリックリンクを使用して、一部のディレクトリを同じサイズの別のディスクに移動できるようにしました。

残念ながら、rsyncはシンボリックリンクを削除し、ほぼ完全なディスクを補充しています。いくつか検索したところ、--keep-dirlinksrsync のオプションが見つかりました。これは、私の問題を修正するためにカスタマイズされたようです。

それだけはしません。ターゲットのシンボリックリンクはまだ削除されています。
これが私のrsyncコマンドです:

rsync --recursive --keep-dirlinks --links --hard-links --times --verbose \
 --delete --delete-excluded $EXCLUDE $SOURCE_EXCLUDE \
 $RSYNC_HOST::$RSYNC_DIR/pool/ $TO/pool/

EXCLUDEは、私が興味を持たない多数のアーキテクチャーを排除するために拡張されてい--exclude binary-alpha/ --exclude disks-alpha ...ます。rsyncが起動する前のプールディレクトリは次のようになっています。

lrwxrwxrwx  1 root root   23 2014-09-22 13:58 contrib -> /u2/debian/pool/contrib
drwxrwxr-x 62 root root 4096 2012-04-09 03:02 main
lrwxrwxrwx  1 root root   24 2014-09-22 13:58 non-free -> /u2/debian/pool/non-free

rsyncが起動すると、次のようになります。

receiving incremental file list
deleting non-free
deleting contrib
./
contrib/
contrib/a/

など、シンボリックリンクはファイルでいっぱいのディレクトリに置き換えられます。

他のrsyncオプションのいくつかが邪魔してい--keep-dirlinksますか?どれを組み合わせることはできませんか?それとも、問題の原因となっているオプションの順序ですか?

回答:


7

--deleteそして--delete-excluded彼らはシンボリックリンクがソースに存在しないので、それを削除することに気づくようなオプションは、あなたの計画を妨害します。

これrsyncは、ディレクトリ全体をsource/ target表記(ソースの後に続くスラッシュ)でコピーするように指示した場合にのみ発生します。source/* target代わりに使用する場合、シェルはコピーするファイルとディレクトリのリストを展開しますが、これは起こりません(--dry-run最初に試してください)。

ただし、この脆弱なセットアップの代わりに、LVMの助けを借りて2つのディスクを組み合わせて、この種のトリックを必要としない1つの大きなボリュームを形成することをお勧めします。


ありがとう!スクリプトを変更しましたが、動作しているようです。これは少し時間を与えます-ディスクはまだいっぱいになる傾向がありますが、物事をシフトする時間があります。2つをLVMと組み合わせるのは正解です。私はすでにそれを検討していましたが、足を引っ張ると、物を動かしてから元に戻します。でも、遅くなった方が早いのではないでしょうか。
unkilbeeg 2014

私が使用していた-aオプションなしで--keep-dirlinksを使用することによって解決された同様の問題がありました。3番目の段落と同様に「マイナー」な煩わしさですが、私が使用しているファイルシステムは64 TバイトのSAN「ディスク」です。複数を組み合わせてさらに大きな、たとえば256テラバイトのドライブに組み合わせることができる可能性はありますが、管理者には私たちが持っているサイズの理由があると思います。時々「トリッキー」のように見えるのは、あなたが持っているものと一緒に暮らす方法を考えているだけです。
user1683793 2018年

私の最終的な解決策は新しいハードウェアでした。元のマシンはIDEドライブのみをサポートできるほど古く、当時入手できる最大のドライブは512Gでした。
unkilbeeg
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.