増分バックアップからシンボリックリンクをコピーすると、予期しない動作が発生する可能性があります。たとえば、
# mkdir 0 1 2
# touch 0/a
# ln 0/a 0/b
# touch 1/a
# ln 1/b 1/a
だからディレクトリは0
次のようになります
a
b->a
ディレクトリは1
次のとおりです
a->b
b
今私たちは走る
# cp -a 0/. 2
# cp -a 1/. 2
予想/予想される動作は、ディレクトリが2
同じ1
ですが、実際には2つのリンクが含まれているということです
a -> b
b -> a
これは、実際には/ usr /ディレクトリの一部のrsyncバックアップをコピーしたときに発生しました。昨年、/usr/share/zoneinfo ディレクトリにはさまざまなシンボリックリンクスイッチがありました。cp -a
SOURCEではシンボリックリンクに従わないが、DESTではシンボリックリンクに従うことができるようです。
ここで適切な結果を得る方法はありますか?
(ところで、rsync
正しく完了しましたが、フラグも使用したかったのですが--reflink=always
…)cp
答え1
これは最初に実行されますが、cp -a 1/. 2
すでに存在するので内容が記録されます。次に、シンボリックリンクを上書きすることを検討してください。再実行すると。b
b -> a
b
a
a->b
a
a->b
cp -a 1/. 2
"Too many levels of symbolic links"
はい、cp
ターゲットのシンボリックリンクに従ってください。--remove-destination
MWEの問題を解決してみてください。ただし、シンボリックリンクをターゲットのディレクトリコンポーネントとして含めることは含まれません--remove-destination
。
本当の質問は「なぜこんなことをしますか?」です。私はcp -a
空のディレクトリをターゲットとして使用します。さらに、サポートされているファイルシステムには、--reflink=always
ディレクトリツリーをバックアップに複製するよりエレガントな方法があります。