четверг, 1 сентября 2011 г.

dump restore

Необходимость дампить систему рано или поздно появляется у Всех. Я не исключение...
Преимущестов утилит dump/restore в том, что они есть на любой юникс системе.
На основе этих утилит постоено достаточно много различных систем бекапирования, которые по сути являются просто надстройками над ними.
Я рассмотрю, как сделать дамп с какого либо раздела на FreeBSD.
Учитывая, что в большинстве случаев нет возможности остановить сервер, либо перевести разделы на время давмпа в read only, то необходимо дампить раздел "на живую".

dump -0aLuf /usr/dump/root_ad4s1a / 

где 0 — максимальный уровень сохранения информации при дампе, он гарантирует, что вся информация о системе будет сохранена
a – авторазмер (пропуск всех проверок длины лент, пишет пока хватает места)
L – ключ, используемый при снятии дампа с «живой» файловой системы.
u – обновление файла dumpdates (фиксирует, когда был последний раз задамплен слайс)
f – сохраняет дамп в файл
/usr/dump/root_ad4s1a – путь к файлу с дампом и, собственно, сам файл с дампом
/ - файловая система для дампа (можно заменить на /dev/ad0s1a)
Более подробно описаны ключи  man dump (RU).
Казалось бы все, дамп есть. Что может быть проще?
Вот здесь и появляются нюансы.
По идее dump с ключем  -L, позволяет дампить "на живую".
Создает сначала snapshot раздела, дампит его и удалает этот снапшот.
Но у меня такой дамп восстановить не получилось.
Выдавались ошибки:

unknown tape header type 16777216
abort[yn]n
Checksum error 65411300137, inode 0 file 
resync restore, skipped 69168 blocks
expected next file 70660, got 0
...
partial block read: 20253 should be 32764
End-of-tape encpuntered
Mount tape volume 2
Enter "none" if there are no more tapes
otherwise enter tape name (default: /mnt/tmp/back/dump_root.img)
...
ругань на cannot create hard link
...
bad entry: incomplete operation
name: /sbin/adjkerntz
parent name ./sbin
sibling name: ./sbin/zpool
entry type: LEAF
inode number: 70660
flags: NEW
abort?[yn]
Данную проблему можно обойти если делать snapshot самому, а затем дампить с него. Работа со снапшотами в UFS2 боле подробно  описана в snapshot UFS2 во FreeBSD. Делаем snapshot корня в файл /.snap/2011090100

mount -u -o snapshot /.snap/2011090100 /
Привязываем созданный снапшот к устройству /dev/md1 (номер зависит от праметра -u)

mdconfig -a -t vnode -f /.snap/2011090100 -u 1
Делаем простой дамп

dump -0 -a -f root_ad4s1a.img /dev/md1
Если нужен запакованный дамп

dump -0 -a -f - /dev/md1 | gzip -9 > root_ad4s1a.img.gz 
Если нужен запакованный дамп со сбросом на ftp

dump -0 -a -f - /dev/md1 | gzip -9  - | ftp -u ftp://epbackup:pamelafktyf@192.168.0.2/root.dump.gz - 
Т.е. получается, что делается дамп со снапшота, затем переадется через пайп (|)на архивацию gzip, после чего отправляем по ftp. Синтаксис отправки по ftp [протокол]://[логин]:[пароль]@[сервер]/[путь/][файл_дампа]. Отключаем снапшот

mdconfig -d -u 1

Мы не блокировали никаких операций на HDD, не перемонтировали в RO и получили рабочий дамп, в чем сейчас и убедимся.

Восстановление из дампа:
Восстановление происходит при помощи утилиты restore.
Основные ключи:
-i  восстановление в интерактивном режиме
-f  file  восстановление из файла
-r  Восстановление (создание заново файловой системы). Целевая файловая система, должна быть сделана ранее с newfs(8), смотнтирована, и пользователь должен перейти в подготовленную ранее файловую систему прежде чем начнется восстановление нулевого уровня из резервной копии. Если уровень 0 восстановлен удачно, флаг -r может использоватся для восстановления всех необходимых инкрементальных бекапов выше уровня 0. Флаг -r устраняет интерактивное извлечение файлов и может являтся вредным , если он не будет применятся аккуратно.
Более подробно описаны ключи  man restore (RU) 
-v   заставляет выводить имя каждого файла (обычно restore работает тихо)
-y   При ошибках и бедблоках игнорирует их и продолжает восстановление
-N  фейковое восстановление, т.е. читается дамп и имитируется восстановление, без реального извлечения файлов. Полезно для тестирования дампа.
-x  извлечение всех файлов

Выборочное восстановление файлов из дампа (без сжатия)

# restore -if root_ad4s1a.img
restore > ls
.:
.cshrc                 dev/                   new/
.profile               dist/                  proc/
.snap/                 entropy                rescue/
etc/                   root/
COPYRIGHT              home@                  sbin/
bin/                   lib/                   sys@
boot/                  libexec/               tmp/
cdrom/                 media/                 usr/
compat@                mnt/                   var/

restore > cd /etc
restore > add rc.conf
restore > add /boot/*
restore > extract
You have not read any tapes yet.
If you are extracting just a few files, start with the last volume
and work towards the first; restore can quickly skip tapes that
have no further files to extract. Otherwise, begin with volume 1.
Specify next volume #: 1
set owner/mode for '.'? [yn] y
restore > q

В результате в текущей папке будет восстановлены /boot/* и /etc/rc.conf со всеми правами, которые были ранее.


Можно также восстанавлить и в автоматическом режиме. 
Предварительно переходим в нужную папку и делаем

# restore -xf root_ad4s1a.img
Если дамп был сжат, то можно его восстановить например в папку /usr/restore следующим образом:

# gzip -d  root_ad4s1a.img.gz  | ( cd /usr/restore ; restore -xf - )

Полного восстановления раздела из дампа: 
Для начала нужно подготовить раздел жесткого диска Форматируем его (Указать свой!!!)

newfs /dev/ad0s1a
Монтируем и идём туда:

# mount /dev/ad0s1a /mnt/ad0s1a.ufs
# cd /mnt/ad0s1a.ufs
Восстановление дампа

restore -rf /путь/к_фалу/root_ad4s1a.img
Примечание: если восстановление будет вестись с загрузочной флешки c FreeBSD или liveCD, то необходимо дополнительно указать темповую папку (указать свою)

export TMPDIR=/tmp/root

Сслылки:
dump/restore
Процедуры резервного копирования и восстановления
FreeBSD – работа с dump и restore
Системный дамп FreeBSD.
Резервное копирование FreeBSD при помощи DUMP и RESTORE
dump (rdump) - создаёт дамп ФС
man restore (RU) 
man dump (RU)

clonehdd
Клонирование дисков во FreeBSD   - описание утилиты clonehdd.
clonehdd - копирование разделов жесткого диска на другой. 

9 комментариев:

  1. Пожалейте мои и чужие глаза ... честно слово ... тяжело читать с таким фоном страниц. Хорошую информацию, полезную пишете,но как же тяжело, лично мне,читать черным по белому.

    ОтветитьУдалить
  2. Странно, я старался подобрать, так, чтоб было относительно комфортно, в том числе и в темноте...
    Единственное, что я обычно увеличиваю размер (Ctrl+Scroll).
    Если есть какие либо предложения по комфортным цветам, то я всегда рад предложениям.
    Лично для Вас какое сочетание цветов (текст, фон) наиболее приятно для глаз?

    ОтветитьУдалить
  3. то что доктор прописал, всё что нужно нашёл в одном месте, спасибо огромное

    ОтветитьУдалить
  4. Неактуально
    Дамп не пашет в 9 ветке на живой машине, та и рестор уже не особо то и нужен.

    Не слушай этих кретинов которые с детства привыкли к винде и консоль в глаза не видели.

    ОтветитьУдалить
  5. Не соглашусь с Вами
    1. На живой машине дамп можно сделать, если использовать снапшоты (у меня этот момент и описан, читаем внимательней!). Возможно в 9-й версии есть какие-то отличия, ничего сказать не могу т.к. не работал с ней
    2. Далеко не у всех стоит уже 9-я версия, поэтому для определенного круга людей инфа остается все еще актуальной, даже если и есть какие-то моменты в 9-й версии
    3. Множество утилит работают аналогично dump/restore либо их используют, т.к. являются надстройками над ними, поэтому знания об их использовании лишними не будут.
    P.S. Конструктивной критике рад, т.к. она позволят совершенствовать свои знания и навыки, а ругаться не хорошо :)

    ОтветитьУдалить
  6. В 9.0 не работает из-за журналирования. Если отключить то всё ок. Обещают исправить. Я временно перешел на DD.

    ОтветитьУдалить
    Ответы
    1. Я вообще отключил журнал (tunefs -J disable). Польза от использования dump (для создания бэкапов системы) больше, чем от журнала, imho.

      Удалить
  7. Все емко, в одном месте, и разжевано как раз для новичков - типа меня, спасибо.

    ОтветитьУдалить
  8. не понял насчет: Привязываем созданный снапшот к устройству /dev/md1 (номер зависит от праметра -u)
    это значит mdconfig сам создает какое-то виртуальное устройство md1 чтоли?
    и что делать если mdconfig -a -t vnode -f /.snap/2011090100 -u 1 выдает
    mdconfig: WARNING: opening backing store: /.snap/201109010 readonly

    ОтветитьУдалить