ssh tar копирование - отсутствующие файлы

При копировании каталога "home" (с удаленного компьютера) на локальный компьютер с помощью следующей команды:

ssh root@remote.machine 'tar -cz -C /home/*' | tar -zxv

Количество файлов после транзакции не совпадает. Некоторые файлы никогда не копировались.

Кто-нибудь испытывал подобные проблемы?

2 ответа

Решение

Одна проблема с использованием tar для копирования файлов является то, что старый формат POSIX tar ( ustar ) имеет ограниченную длину в 100 байт для хранения жестких ссылок. Он может справиться с более длинными именами, поэтому, если ваши файлы имеют одну ссылку, все в порядке. Но когда tar встречает inode во второй раз, он создает запись с жесткой ссылкой, имя которой содержит всего 100 байт. Если имя слишком длинное, вторая ссылка не сохраняется в архиве.

Я вспоминаю реализации tar, которые отбрасывали эти ссылки с диагностическими сообщениями, но по-прежнему выходили со статусом 0. Может быть, ваш tar еще хуже и молча отбрасывает их.

Новый формат POSIX tar ( pax ) не имеет этого ограничения. Попробуйте использовать pax вместо tar, или же tar с правильными вариантами. Текущие версии GNU tar по умолчанию используют формат pax, и они правильно жалуются, если им приказано создать ustar архив, где имена не подходят.

Вместо этого используйте rsync. Это быстрее и безопаснее.

rsync -avuz root@remote.machine:/home/ /srv/backups/home/

Затем вы можете сжать данные.

tar cvzf /srv/backups/home_`date +%F`.tgz -C /srv/backups home
Другие вопросы по тегам