Перемещение файлов и каталогов между двумя компьютерами, через третий, с сохранением прав доступа и имен пользователей
Ситуация выглядит следующим образом:
- На компьютере 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