Перемещение файлов и каталогов между двумя компьютерами, через третий, с сохранением прав доступа и имен пользователей

Ситуация выглядит следующим образом:

  • На компьютере A есть хранилище файлов, доступное через rsync
  • Машине B нужны вышеупомянутые файлы со всеми разрешениями и правами владения (включая группы и т. Д.)
  • Машина C имеет доступ к A и B, но имеет совершенно другой набор пользователей.

Обычно, я просто перезаписываю все, прямо между A и B, но из-за сильно ограниченной пропускной способности в данный момент мне нужно что-то другое, так как время ожидания rsync после построения списка из 430 файлов (несжатый 49Mb... может быть сжаты до ~7Mb).

Что я пробовал до сих пор: rsync все от A до C, tar, скопировать tarball, а затем распаковать его, однако, это портит права собственности и / или разрешения.

Чтобы rsync от A до C, я запускаю эту команду:

rsync --numeric-ids --password-file=/root/rsync_pwd_file -oaPvu rsync://exsync@example.com/portal_2/ ./portal_2/

... и, судя по всему, они в конечном итоге оказались на C с правильными владельцами / разрешениями / флагами / всем (не уверен на 100%, хотя... есть ли еще какие-то переключатели, которые я мог бы добавить туда? Я что-то пропустил??)

скопировать архив довольно просто (медленно, как одноногая черепаха, из-за пропускной способности, но с контрольной суммой все в порядке)

В чем я не уверен, так это в флагах и переключателях для создания и извлечения архива, поэтому кто-то может предоставить полные команды для создания архива из /root/portal_2 на компьютере C (со всем без изменений) и извлечения архива в /var/ex/portal_2 на машине B??

Кроме того, есть ли другие подходы, которые стоит упомянуть, которые могли бы позволить мне выполнить это? У меня есть root-доступ к A и C, тогда как у меня есть только rsync-доступ к B.

PS: я использую rsync v2.6.9 на машине B, и, к сожалению, у меня нет возможности перейти на v3

2 ответа

Я не совсем уверен, правильно ли я прочитал ваш вопрос. Может ли А поговорить с Б напрямую? Если это так, просто используйте rsync -e 'ssh -oServerAliveInterval=30' чтобы избежать тайм-аута rsync/ssh.

Если A не может напрямую общаться с B, я бы попробовал следующее:

  • С СШ на А с обратным портом вперед на Б (ssh -R2222:B:22 A)
  • На rsync к localhost:2222 ака порт вперед
  • использование rsync -e 'ssh -oServerAliveInterval=30' чтобы избежать тайм-аута rsync/ssh.

Таким образом, вы обойдете проблему пользователей и обойдете время ожидания.

Итак, чтобы ответить на вопрос tar:

cd /root; tar -jcv --numeric-owner -f portal_2.tar.bz2 portal_2

А также

cd /var/ex; tar xf portal_2.tar.bz2
Другие вопросы по тегам