Во время поиска информации, как склонировать систему в образ для разворачивания на другой рабочей станции или в 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.