Rsync превышает ограничение глубины папки ssh?

Rsync превышает ограничение глубины папки ssh?

Я работаю над миграцией сервера и столкнулся со следующей проблемой:

Я запускаю rsync для переноса всех данных, но по какой-то причине существует ограничение на глубину папки... Это делается с помощью команды rsync через ssh:

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 есть пробелы или специальные символы, то приведенное выше необходимо будет заключить в кавычки более тщательно.

Связанный контент