Назад | Перейти на главную страницу

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

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

Я запускаю rsync для переноса всех данных, но по какой-то причине существует ограничение глубины папки ... Это делается с помощью команды rsync over 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

он начинает рекурсивно копировать оставшиеся папки ...

У кого-нибудь есть исправление для этого?

rsync не имеет ограничений на глубину прохода подкаталогов. В частности, он превышает предел файловой системы Linux. Я просто скопировал что-то глубиной около 500 уровней, и rsync отлично это скопировал.

Если вы столкнулись с этой проблемой, проверьте следующее:

  • неспособна ли файловая система назначения обрабатывать такое количество подкаталогов?
  • место назначения заполнено?
  • указывает ли файл --exclude-from что-то, что ограничивает файлы?
  • общая длина пути («d / d / d / d» составляет 4 уровня, но 7 символов) сверх того, что разрешает файловая система?
  • работает ли отключение инкрементной рекурсии? --no-inc-recursive (это более новый алгоритм, и вы могли обнаружить ошибку)
  • работает ли копия с использованием другой техники?
  • проблема уходит со сжатием (или без)? -z

Вот еще один способ попробовать. Если работает, но rsync нет, то, возможно, вы нашли ошибку в rsync:

Это будет tar файлы с одной стороны, отправьте tar-файл на стандартный вывод, 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 есть пробелы или специальные символы, необходимо более тщательно процитировать приведенное выше.