Для создания регулярных резервных копий я использую rsync
вместе с --link-dest
чтобы создать жесткие ссылки для неизмененных файлов. Например:
rsync -ax \
--partial --delete --delete-excluded --inplace \
--exclude-from=/tmp/temp_excludes \
--link-dest=/Volumes/Backup/current \
/Users /Volumes/Backup/2012-06-25
Это работает очень хорошо, если я запускаю процесс из своей обычной учетной записи. Хотя как только я начинаю процесс, используя sudo
он ведет себя неустойчиво, а это означает, что rsync
копии все неизмененные файлы вместо жесткое связывание их.
поскольку sudo
изменяет среду, я уже пробовал sudo -E
в сочетании с тем, чтобы убедиться, что мой sudoers
файл имеет соответствующий набор параметров. Что ж, это тоже не сработало.
Итак, вопрос в том, как мне запустить rsync
с помощью sudo
? В то время как в приведенном выше примере показана только резервная копия Users
каталог, мне также нужно сделать резервную копию некоторых системных файлов, к которым я могу получить доступ только как root.
Я предлагаю тебе начать rsync
с участием -i --dry-run
чтобы узнать, почему он хочет скопировать неизмененные файлы. В -i
опция распечатает все обновления вместе с кодом, который указывает, почему rsync
считает, что файлы изменились (контрольная сумма, отметка времени и т. д.). См. Справочную страницу для полного объяснения кода.
Вам, вероятно, также следует указать --numeric-ids
в случае, если идентификаторы пользователей в исходной и целевой системе различаются.
Если вы используете LBackup (оболочка rsync) для вашей резервной копии, одна из проверок, которые она выполняет при работе в системе OS X, заключается в том, что разрешения для образа / диска целевого диска включены.
Если разрешения не включены, резервное копирование не будет продолжено, будет выдано предупреждение о команде для включения разрешений.
Вы также можете найти эта страница документации из проекта LBackup, чтобы вас заинтересовали, если вы захотите продолжить использование собственного скрипта.
Хотя предложение Оливера действительно приветствуется, решение проблемы заключается в следующем:
Когда (внешние) устройства монтируются в OS X, у них есть соответствующие флаг "игнорировать право собственности" установлен по умолчанию. OS X поддерживает специальную базу данных для этого, доступную через vsdbutil
(устарело) и diskutil
.
Согласно некоторым поисковым запросам, причина этого заключается в том, что типичный пользователь OS X является пользователем потребительского продукта, который хочет получить доступ к своим данным, которые были сохранены, например. на внешний USB-диск с любого другого компьютера, не беспокоясь о владении, разрешениях и т. д.
Следовательно, для желаемого решения резервного копирования жизненно важно использовать rsync
и sudo
к выключи этот флаг:
# sudo diskutil enableOwnership <yourDeviceHere>
sudo diskutil enableOwnership /Volumes/Backup
Затем отключите и снова подключите это устройство, чтобы убедиться, что все работает нормально. Наконец, я обновил свой rsync
звоните в следующие:
rsync -aNHAXx -i --fileflags --force-change \
--partial --delete --delete-excluded --inplace \
--exclude-from=/tmp/temp_excludes \
--link-dest=/Volumes/Backup/current \
/Users /Volumes/Backup/2012-06-25
Теперь эта штука помещена в (слегка измененный) сценарий bash и позволяет добавочный ежедневное резервное копирование на внешний USB-диск под OS X.