Назад | Перейти на главную страницу

rsync --link-dest поведение при запуске от имени sudo

Для создания регулярных резервных копий я использую 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.