Показаны сообщения с ярлыком backup. Показать все сообщения
Показаны сообщения с ярлыком backup. Показать все сообщения

понедельник, 22 ноября 2010 г.

Резервное копирование таблицы разделов при помощи gpart

Добавил в gpart(8) возможность выполнять резервное копирование и восстановление таблицы разделов. Уже давно что-то такое вертелось на уме и знакомые просили. Но вот, собрались трое, кому это нужно, в IRC и окончательно сформулировалась задача :)

Резервное копирование выполняется при помощи команды "gpart backup", которая в специальном текстовом формате выводит информацию о таблице разделов. Эту информацию можно перенаправить в файл, либо отдать на вход команде "gpart restore". Небольшой пример:

# gpart backup ada0
MBR 4
1 freebsd       63 20964762   [active]
2    ntfs 20964825 40965750
3 freebsd 61930575 18362295
# gpart backup ada1
GPT 128
1   freebsd-boot        34       512 boot
2   freebsd-swap       546   8388608 swap
3    freebsd-zfs   8389154 311783869 zfs
Как можно догадаться, первоя строка в выводе - это опции команды "gpart create", следующие - для "gpart add". У команды restore есть несколько ключей:

gpart restore [-lF] [-f flags] provider [...]
Ключ "-l" указывает gpart восстанавливать символические метки разделов, которые по-умолчанию не восстанавливаются. С ключем "-F" gpart перед восстановлением уничтожит таблицу разделов на носителе, куда будет восстанвливаться резервная копия. Иначе, если там будет обнаружена какая-либо таблица разделов, он просто завершится с ошибкой. Ну и ключ -f выполняет те же функции, что и у дргих подкоманд - откладывает запись всех изменений на носитель до вызова команды commit. Т.е. если вы не уверены в своих действиях - этот ключ ваш лучший товарищ.
Теперь немного примеров по использованию. Типичные действия для резервного копирования:

# gpart backup ada0 > ada0.backup
# cat ada0.backup
MBR 4
1 freebsd       63 20964762   [active]
2    ntfs 20964825 40965750
3 freebsd 61930575 18362295
Теперь этот ada0.backup на ответственное хранение в сейф. И вдруг, после очередной пьянкисмены паролей, утром вы обнаружили что таблица разделов уничтожена =)
Бежите к сейфу, загружаетесь с livefs и восстанавливаете таблицу разделов:

# gpart restore ada0 < /mnt/ada0.backup
Теперь более реальный пример. Вы захотели к уже установленной системе подключить ещё один диск и сделать зеракало на ZFS:

# gpart backup ada0 | gpart restore ada1


Нет, вы параноик и вы подключили 2 жестких диска и хотите сделать тройное зеркало, не проблема:

# gpart backup ada0 | gpart restore ada1 ada2 
Теперь пример для неопытных пользователей:

# gpart backup ada0 | gpart restore -F -f x ada1
# gpart show 
О, боже! Не тот диск, вы уничтожили диск с фотографиями вашей жены! =) Спокойно, -f вас спас:

# gpart undo ada1

Вот так вот, немного шутя можно работать с gpart. А ещё у меня новость, мои менторы освободили меня от "надзора" :) Теперь я стал самостоятельным коммитером.

 PS. Ещё раз хочу заметить, что gpart backup/restore выполняют копирование и восстановление ТОЛЬКО таблицы разделов. Данные, находящиеся на этих разделах, бэкапить и восстанавливать нужно отдельно. В том числе, и содержимое в разделы freebsd-boot нужно записывать повторно.