Резервное копирование FreeBSD при помощи DUMP и RESTORE
Старая грустная шутка делит пользователей на тех, кто резервные копии еще не делает и тех, кто уже делает. Даже если вы сам себе администратор, то цените свое время и деньги, делайте резервные копии! Это не так сложно, как многие думают. Ваша система FreeBSD уже готова делать резервные копии ваших данных. Я рассмотрю самый простой вариант, который позволит сберечь вам ваши данные, нервы и деньги (восстановление данных порой стоит очень дорого) в случае каких-либо сбоев в системе.
Моя дисковая система выглядит так
hotfreebsd# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/mirror/gm0s1a 1.9G 589M 1.2G 32% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/mirror/gm0s1d 19G 1.5G 16G 9% /cache
/dev/mirror/gm0s1h 26G 786M 23G 3% /home
/dev/mirror/gm0s1g 4.8G 20K 4.5G 0% /tmp
/dev/mirror/gm0s1e 29G 1.3G 25G 5% /usr
/dev/mirror/gm0s1f 58G 967M 53G 2% /var
devfs 1.0K 1.0K 0B 100% /var/named/dev
Собран RAID1 при помощи gmirror. У вас картина может быть другой, например что-то вроде
hotfreebsd# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/da0s1a 989M 183M 728M 20% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/da0s1d 12G 8.2G 2.5G 76% /cache
/dev/da0s1f 989M 26K 910M 0% /tmp
/dev/da0s1g 13G 4.5G 7.3G 38% /usr
/dev/da0s1e 4.8G 976M 3.5G 21% /var
devfs 1.0K 1.0K 0B 100% /var/named/dev
Это другая машина, где просто 1 SCSI HDD. Для SATA/PATA диск прсото будет не
/dev/da0s1a
а
/dev/ad0s1a
В создании резервных копий нам поможет старая, но вполне рабочая утилита dump.
Создадим папку для резервных копий. Вообще резервные копии необходимо хранить в идеале в другом физическом месте, или хотя бы на другом компьютере. Но например при возникновении пожара вы можете потерять оба компьютера и данные вам восстановить будет неоткуда.
Поэтому решайте сами насколько ценные данные у вас хранятся.
Для простоты я создал папку на этом же диске
mkdir /home/backup/
в неё и буду складывать резервные копии, там они всеравно не задержатся и будут перемещены. В общем не будем усложнять пример. С полученой резервной копией вы сможете сделать что хотите – утащить на другой комп, записать на внешний HDD или записать DVD диск.
По моему первому варианту (с массивом gmirror)
Я написал простенький скриптик
#!/bin/sh
# резервное копирование основных разделов за исключением home
echo 'Начал копирование корневого раздела'
DATE=`date +%Y.%m.%d`
echo 'Начато копирование корневого раздела'
dump -0 -L -f - / | gzip -9 > /home/backup/root.${DATE}.img.gz
echo 'Корневой раздел скопирован, жду 4 секунды'
sleep 4
dump -0 -L -f - /usr | gzip -9 > /home/backup/usr.${DATE}.img.gz
echo 'Раздел usr скопирован, жду 4 секунды'
sleep 4
dump -0 -L -f - /var | gzip -9 > /home/backup/var.${DATE}.img.gz
echo 'Раздел var скопирован. Все задачи резервного копирования выполнены.'
поместил это в отдельный файлик
/root/backup.sh
даю права на выполнение
chmod 700 /root/backup.sh
и просто его запускаю (в системе как root)
hotfreebsd# ~/backup.sh
и жду пока все скопируется.
Можно запустить и руками.
Например строка в скрипте
dump -0 -L -f - /usr | gzip -9 > /home/backup/usr.${DATE}.img.gz
Примечание: эта строка в shell не сработает, для запуска команды в консоли нужно набрать
dump -0 -L -f - /usr | gzip -9 > /home/backup/usr.`date +%Y.%m.%d`.img.gz
запускает утилиту dump для раздела /usr с полным копирование данных (-)
-L говорит о том, что это “живая файловая система” т.е. она смонтирована в режиме запись/чтение
-f запись копии в файл (по умолчанию dump пишет данные на стример – это такой накопитель внешний для резервных копий, нам нужно в файл, поэтому опцию нужно указать)
Затем мы передаем результат работы dump на вход утилите сжатия gzip с параметром сжатия -9 (максимальное сжатие) и потом идет сама запись в файл по пути /home/backup/usr.${DATE}.img.gz
Переменная ${DATE} превратится в текущую дату. Сжатие наверное у меня чрезмерное, но компьютер достаточно мощный, и я не спешу, если не хотите сжимать резервную копию, то можете сразу в файл писать или поставьте степень сжатия поменьше, например gzip -2.
Для второго варианта (без массива gmirror)
Подойдет что-то вроде
hotfreebsd# dump -0 -L -f - /dev/da0s1a > /home/backup/root.`date +%Y.%m.%d`.img
В этом примере я не сжимаю резервную копию, соответственно и расширение у конечного файла просто img
Восстановить данные можно при помощи другой программы – restore
В случае, если у вас применялось gzip сжатие образа при создании, то работает конструкция вроде
Внимание! Опасная команда!
hotfreebsd# gzip -d /home/backup/root.2009.05.06.img.gz | ( cd / ; restore -rf - )
Что происходит при запуске этой команды
— мы запускаем gzip с параметром -d (это значить распаковать архив)
— мы указываем файл, который содержит резервную копию
— переходим в раздел, в который нужно восстановить нашу копию (в этом примере восстанавливаем корневой раздел)
или вот так для восстановления /usr
gzip -d /home/backup/usr.2009.05.06.img.gz | ( cd /usr ; restore -rf - )
Если даные не сжаты, то делаем так (восстановление /usr)
cat /home/backup/usr.2009.05.06.img.gz | ( cd /usr ; restore -rf - )
Внимание! Существующие данные при восстановлении уничтожаются! Поэтому экспериментируйте осторожно. Важно освоить этот простой механизм резервного копирования и восстановления в спокойной, штатной обстановке, чтобы потом быть уверенным в том, что вы все делаете правильно, и ваши резервные копии действительно работают.