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