Во время поиска информации, как склонировать систему в образ для разворачивания на другой рабочей станции или в VMWare, я наткнулся на интересную статью "How to Create a Bootable Backup of Mac OS X (Cloning Mac OS X disks)", написанную разработчиком бесплатной утилиты "Carbon Copy Cloner". В PDF-документе "Introduction to Command-Line Administration" Apple рекомендует три командно-строковые утилиты для резервного копирования данных - ditto, rsync и asr. Тема мне показалась интересной, поэтому я решил испытать эти методы.

Перед клонированием очень желательно на исходном диске сделать repair permissions с помощью Disk Utility и удалить все данные на диске, куда будет производиться клонирование. Я переразбил внешний USB-диск, создав по одному разделу для каждого метода клонирования, но в реальной ситуации достаточно создать один раздел (не забывайте, что нужно использовать схему разделов GUID). Раздел, на который производится клонирование, называется Backup.

ditto - copy directory hierarchies, create and extract archives

При копировании ditto сохраняет resource forks, метаданные HFS, расширенные файловые атрибуты и ACL. Ключ "-X" говорит о том, что не нужно копировать другие разделы, смонтированные в указанную файловую систему.

$ sudo ditto -X / /Volumes/Backup

Желающие наблюдать за ходом копирования могут включить опцию "-v" (выводить название копируемого каталога), а самые жадные до деталей - "-V" (сообщать о копировании каждого файла, симлинка и файла устройства).

После клонирования перезагружаемся с нажатой клавишей "Option" и выбираем нужный раздел:

Название самого исходного раздела не скопировалось - вместо "Mac OS X 10.6 Server" раздел называется "EFI Boot". Операционная система загрузилась, но при старте выдалось сообщение о восстановлении шрифтов:

Ещё одна проблема - при старте, например, Terminal.app, стали выдаваться сообщения "dyld shared cache file was build against a different libSystem.dylib":

Это обозначает, что необходимо перестроить кеши:

$ sudo update_dyld_shared_cache

Также не помешает сделать "repair permissions":

$ diskutil repairPermissions /

После этого система работает нормально (глубоко функционирование я не тестировал, но основные сервисы работали).

Рекомендации по очистке файлов после клонирования

Перед перезагрузкой можно удалить вспомогательные файлы, swap и кеши (afp548), но не все из них есть в Snow Leopard, поэтому нужно этот вопрос ещё проработать (пока привожу "asis"):

sudo rm /Volumes/Backup/var/db/BootCache.playlist
sudo rm /Volumes/Backup/var/db/volinfo.database
sudo rm /Volumes/Backup/System/Library/Extensions.kextcache
sudo rm /Volumes/Backup/System/Library/Extensions.mkext
sudo rm -r /Volumes/Backup/var/vm/swap*

rsync

Отличная альтернатива - rsync. В последнее время я его очень активно использую для резервного копирования. Огромное преимущество метода в том, что rsync позволяет делать обновление только изменённых с прошлого сеанса клонирования данных. Это позволяет делать инкрементальное обновление данных и иметь актуальную копию систему.

$ sudo rsync -xrlptgoEv --progress --delete / /Volumes/Backup

Ключи:

  • -x. То же, что и -X у ditto - не копировать другие разделы. Или же не траверсировать на другие устройства. Или don't cross filesystem boundaries. Что кому понятнее.
  • -r. Рекурсивно копировать каталоги.
  • -l. Копировать симлинки как симлинки, а не как файлы и каталоги.
  • -p. Сохранять права.
  • -t. Сохранять время (создания, модификации, etc).
  • -g. Сохранять группы, файлы устройств и специальные файлы.
  • -o. Сохранять владельца.
  • -E. Копировать расширенные атрибуты и resource forks.
  • -v. Сообщать о процессе работы (файлы, каталоги, etc).
  • --progress. Сообщать о процессе копирования. -v можно отключить, но мне интересно наблюдать за процессом.
  • --delete. Удалять файлы, отсутствующие в исходном каталоге, из каталога, в который производится копирование.

После завершения клонирования перегружаемся. Точно та же картина - раздел называется "EFI Boot", фонты восстановлены и есть проблема с кешами. Выполняем команды обновление кеша и repair permissions.

asr - Apple Software Restore; copy volumes (e.g. from disk images)

Самый беспроблемный метод при использовании CLI - это ASR. При клонировании правильно был назван склонированный раздел, восстановления фонтов не было, кеши пересоздавать не пришлось. Ключи вполне понятны и без объяснения.

$ sudo asr -source / -target /Volumes/Backup -erase -noprompt

Можно также посмотреть статью на сайте afp548.com.

Carbon Copy Cloner

Это бесплатная утилита (принимаются пожертвования). Все функции можно посмотреть на сайте разработчика. Очень полезные возможности - инкрементальное клонирование (как в описанном выше rsync) и работа по расписанию.

Никогда с этой утилитой не работал. Мне выдалось сообщение "Backup is unsuitable given the source volume and options chosen", так как раздел, на который я хотел клонировать свой диск, был слишком мал и протестировать я не смог.

Под Snow Leopard нужно ставить последнюю версию (3.3 и выше).

SuperDuper!

Коммерческая программа ($27.95), активно обновляется, поддержка Snow Leopard появилась сразу же в районе 28 августа. Я ею активно пользуюсь для клонирования дисков со своими проектами. На загрузочных дисках не испытывал, но должна работать без проблем.

Другие методы

Можно клонировать диски через Disk Utility (я всегда так и делаю при апгрейде диска), но очень желательно это делать не на живой системе, а загрузиться с установочного DVD. Также я не рассматриваю dd - для клонирования живой системы я бы не рискнул их применять, нужно грузиться с DVD или в Single User Mode. И dump не подходит - "This copy of dump is supplied only for completeness and is expected to have deficiencies. It will likely disappear in the future".

Выводы

Все методы, описанные в обзоре, хороши. Я остановился на использовании asr для полного копирования, rsync для инкрементного из shell, и на SuperDuper! из GUI.