
私はサーバーの移行に取り組んでおり、次の問題に遭遇しています。
すべてのデータを移行するために 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 にスペースまたは特殊文字が含まれている場合、上記をより慎重に引用符で囲む必要があります。