Резервное копирование FreeBSD при помощи DUMP и RESTORE
Рубрика: Обслуживание FreeBSD | Дата: 06 мая 2009
Старая грустная шутка делит пользователей на тех, кто резервные копии еще не делает и тех, кто уже делает. Даже если вы сам себе администратор, то цените свое время и деньги, делайте резервные копии! Это не так сложно, как многие думают. Ваша система 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 - )
Внимание! Существующие данные при восстановлении уничтожаются! Поэтому экспериментируйте осторожно. Важно освоить этот простой механизм резервного копирования и восстановления в спокойной, штатной обстановке, чтобы потом быть уверенным в том, что вы все делаете правильно, и ваши резервные копии действительно работают.
16 марта 2010 в 17:05
Спасибо, полезная информация. Хотел бы добавить:
gzip -d /home/backup/usr.2009.05.06.img.gz | ( cd /usr ; restore -rf – )
В даном случае надо для gzip применить ключик -с чтобы был вывод на stdout. То есть:
gzip -сd /home/backup/usr.2009.05.06.img.gz | ( cd /usr ; restore -rf – ).
И в последней команде:
cat /home/backup/usr.2009.05.06.img.gz | ( cd /usr ; restore -rf – )
Файл должен быть без разширения .gz:
cat /home/backup/usr.2009.05.06.img | ( cd /usr ; restore -rf – )
21 мая 2010 в 23:09
Тоже хочется немножко добавить:
можно выбрать неоходимые файлы для восстановления
( restore -i -f -)
Пример:
Делаем бэкап:
dump -0 -L -f – /dev/ad8s1a > /home/backup/root.`date +%Y.%m.%d`.img
Восстанавливаем :
cat /home/backup/root.2010.05.21.img | ( cd / ; restore -i -f – )
restore > ls смотрим файлы ( ls, cd, pwd )
… …
… …
restore > add var добавляем
restore > add media
restore > extract восстанавливаем
restore > quit выходим
26 мая 2010 в 14:31
Благодарю. Все просто и понятно.
17 сентября 2010 в 17:47
сдампить /var с ключом -L у меня не получилось – система через непродолжительное время отваливается усиленно не переставая молотить диском
1 декабря 2010 в 9:14
Кто-то пробовал на деле? Данная команда: gzip -d /home/backup/usr.2009.05.06.img.gz | ( cd /usr ; restore -rf – ) выбивает ошибку :Что-то вроде, что обрабатываемый файл не является правильным образом :
1 декабря 2010 в 9:25
Можно полный текст ошибки? А вообще пишу заметки по работе в живой системе, так что все проверено.
5 января 2011 в 16:10
Извените за маленькое отступление. Нужна помощь. Такая вот задача: нужно сделать резервное копирование не целиком полного маил сервера, а по отдельности для каждого взятого ящика. Возможно ли такое? И если да, то как?
11 января 2011 в 4:42
Нужно знать, что за почтовый сервер, можете создать тему на нашем форуме.
31 января 2011 в 12:37
А у меня ругается чего-то…:
Tape block size (512) is not a multiple of dump block size (1024)
Переносил с virtualboxa на реальное машину.
31 января 2011 в 18:14
Размер блока на ленте не кратен размеру блока при дампе. Как-то так. Размер блока для команды dump попробуйте изменить.
1 февраля 2011 в 8:07
Добавил параметр(правильно, нет?) -B 512
dump -0 -L -B 512 -f – / | gzip -9 > /home/backup/root.${DATE}.img.gz
Теперь пишет:
Tape is not a dump tape
1 февраля 2011 в 13:00
-b 512 в нижнем регистре попробуйте. И для отладки пропустите сжатие, попробуйте просто в файл сделать. На виртуальной машине кстати намного проще снапшоты виртуальной машины делать для резервного копирования. Возможно там реализация драйвера для hdd своеобразная. Путь для файла копии надеюсь существует?
1 февраля 2011 в 14:40
путь существует.
Попробовал без сжатия,при восстановлении выводится список всех файлов и директорий с подписью что файлы существуют. Может нужно в single mode?
9 февраля 2011 в 9:12
Что-то вы с конвейерами злоупотребляете
dump -a -L -P ‘bzip2 -z > /tmp/root-ad0s1a-${DATE}.dump.bz2′ /
restore -rP ‘bzip2 -d /backup/root-ad0s1a-${DATE}.dump.bz2′
11 марта 2011 в 21:36
cat /home/backup/usr.2009.05.06.img | ( cd /usr ; restore -rf – )
Попробовал без сжатия,при восстановлении выводится
warning: ./usr……: File exists
1 апреля 2011 в 13:49
а что такое
tar: Removing leading ‘/’ from member names
выводится сразу после запуска скрипта? или только у меня?
2 апреля 2011 в 4:16
Можно чуть подробнее что делаете и как вызываете tar?
5 июня 2011 в 15:17
>Подойдет что-то вроде
>
>hotfreebsd# dump -0 -L -f – /dev/da0s1a > /home/backup/root.`date +%Y.%m.%d`.img
Так скопируется только раздел “a” диска “/dev/da0s1″, а как же остальные разделы?
Dump не сделает полную копию диска, для этого надо использовать “dd” из другой OS.
Если полетит файловая система, или кто-то потрет её специально, то из “dd образа”, можно будет всё восстановить, а из “dump образов”, ещё придется размечать диск.