ssh フォルダーの深さ制限を超えて rsync を実行しますか?

ssh フォルダーの深さ制限を超えて rsync を実行しますか?

私はサーバーの移行に取り組んでおり、次の問題に遭遇しています。

すべてのデータを移行するために rsync を実行していますが、何らかの理由でフォルダーの深さに制限があります... これは、ssh コマンド経由の rsync によって実行されます。

rsync -raz --verbose --update --delete --exclude-from 'rsync-exclude.txt' /home 192.168.70.50:/

70.50 は新しいサーバーで、古いサーバーでコマンドを実行しています。フォルダー構造は非常に深く、最大 20 フォルダーの深さになります。

そのため、ほとんどのファイルとフォルダはコピーされますが、フォルダの深さが10以上のものはすべてコピーされません。より深いフォルダを指定すると

rsync -raz --verbose --update --delete --exclude-from 'rsync-exclude.txt'/home/user/blablabla/domain/web to 192.168.70.50:/home/user/blablabla/domain

残りのフォルダーを再帰的にコピーし始めます...

これの修正方法を知っている人はいますか?

答え1

rsync は、トラバースするサブディレクトリの深さに制限がありません。具体的には、Linux ファイル システムの制限を超えています。約 500 レベルの深さのものをコピーしたところ、rsync は問題なくコピーしました。

この問題が発生している場合は、次の点を確認してください。

  • 宛先ファイルシステムは、それほど多くのサブディレクトリを処理できないのでしょうか?
  • 目的地は満員ですか?
  • --exclude-from ファイルではファイルを制限する何かが指定されていますか?
  • パスの合計長さ ("d/d/d/d" は 4 レベルですが 7 文字です) は、ファイルシステムが許可する長さを超えていますか?
  • 増分再帰をオフにすると動作しますか? --no-inc-recursive(これは新しいアルゴリズムであり、バグを発見した可能性があります)
  • コピーは他の技術を使用して機能しますか?
  • 圧縮すると(あるいは圧縮しなくても)問題は解消されますか?-z

試してみるべき別のテクニックがあります。それが機能するのに、rsync機能しない場合は、次のバグを見つけた可能性がありますrsync:

これにより、tarファイルが一方にコピーされ、tar ファイルが stdout に送信され、もう一方の側に ssh で接続され、そこでファイルが解凍されます。

SOURCEDIR=/path/to/source
DESTHOST=machinename
DESTDIR=/path/to/destination
cd "$SOURCEDIR" && tar -c -v -f - . | ssh "$DESTHOST" "cd $DESTDIR && tar -x -p -f -"

警告: $DESTDIR にスペースまたは特殊文字が含まれている場合、上記をより慎重に引用符で囲む必要があります。

関連情報