Сергей Яремчук
Хотя Linux – устойчивая система, но бывает всякое, особенно если к факторам,
ведущим к остановке сервера, добавить и аппаратные проблемы, еще действие
вирусов и самих пользователей. Поэтому необходимость в постоянном резервировании
данных понимают все системные администраторы, а кто еще не понял, то после
первого печального опыта обычно все встает на свои места. В отличие от Windows,
для которой написано множество в большей части коммерческих программ для
восстановления системы, под Linux обычно обходятся штатными средствами, т.е.
утилитами tar, gzip, dd и пр. Бывалые админы уже имеют пару-тройку скриптов,
позволяющих автоматизировать эту операцию, а для начинающих эта операция может
вызывать пока еще головную боль. Для тех, кто ищет себе удобный инструмент для
резервирования данных и восстановления системы, и предназначена эта статья.
В ней речь пойдет о пакетах Mindi Linux и Mondo Rescue,
написанных и поддерживаемых в основном одним человеком, Hugo Rabson, первая
версия которых увидела свет 18 февраля 2000 года, домашняя страница проекта http://www.mondorescue.org/index.html.
Проект уже получил поддержку множества пользователей и не в последнюю очередь
благодаря простоте, позволяющей разобраться и новичку, а также быстроте работы,
эффективности, устойчивости и дальнейшему активному развитию. Итак, по порядку.
Mindi Linux создает набор, который поможет вам в
обслуживании системы вашего дистрибутива в случае неприятностей. В этот набор
входят ядро той системы, в которой запущен Mindi, а также модули, файлы
библиотек и основные утилиты. В этом и основная суть, что используются для
восстановления именно родные составляющие.
В базовый набор программ входят утилиты вроде fdisk,
mkfs, fsck, cat, less, more, afio, gzip, bzip2 и пр., а также конфигурация
клавиатуры, библиотека glibs. При необходимости можно и изменить состав
пакетов, добавив и свои, в том числе и включая X-Window, для этого достаточно
занести необходимые в файл deplist.txt, который находится в зависимости от
того, в каком виде (из пакетов или исходников) устанавливался Mindi, либо в /etc/mindi/,
либо в /usr/local/mindi, причем в нем уже имеются готовые шаблоны, которые
достаточно просто раскомментировать. Установка самой программы особых
трудностей не должна вызвать, на сайте кроме архива с исходниками доступны и прекомпилированные
пакеты, собранные под большинство известных дистрибутивов Linux.
Для пакетов это выглядит так:
#tar -zxvf
mindi-0.95_cvs_20040110.tgz
# cd mindi-0.95_cvs_20040110
# ./install.sh
А при помощи rpm-пакетов:
# rpm -i
mindi-0.95-1.i386.rpm
Для своей работы Mindi требует наличия некоторых
установленных утилит, список которых вы найдете на сайте, но все они, как
правило, уже имеются в современных дистрибутивах. Среди рекомендаций следует
обратить внимание на наличие свободного места на жестком диске (~800 Мб),
которое может понадобиться для промежуточных файлов, и желательно ядро, выше
2.2.19 или 2.4.7 с поддержкой в первую очередь loopfs, а также Virtual memory file
system и initrd ramdisk support. Остальное обычно уже имеется. И теперь
программу можно запускать.
# /usr/local/bin/mindi
Mindi Linux mini-distro
generator v0.95 by Hugo Rabson
Далее система спрашивает, будем ли мы
использовать собственное ядро для построения загрузочного диска. В случае
положительного ответа будет использовано ядро, с которого система загружалась,
иначе можно ввести путь к другому ядру, например, взятому с сайта www.mondorescue.org, если собственное не
удовлетворяет по каким-либо причинам.
Do you want to use
your own kernel to build the boot disk (y/n) ?y
Your kernel is /boot/vmlinuz-2.4.21-99-default
(v2.4.21-99-default)
После определения ядра система спрашивает, хотим
ли мы использовать LILO для загрузки вместо syslinux. Что выбирать – дело
вкуса, но выбрав LILO, вы должны убедиться, что он установлен в системе.
Would you like to
use LILO (instead of syslinux)
for your boot CD/floppies
(y/n) ?n
Analyzing dependency
requirements Done.
Making complete dependency
list Done.
Далее система анализирует конфигурацию системы,
которую также заносит в создаваемый архив.
Analyzing your keyboard's
configuration.
Adding the following
keyboard mapping tables: ru1.map.gz Done.
Assembling dependency
files.....................................Done.
Your mountlist will
look like this:-7 directories.
DEVICE MOUNTPOINT FORMAT SIZE (MB)
/dev/hda1
/boot ext2 100
/dev/hda2
swap swap 239
/dev/hda3
/ reiserfs 1200
/dev/hda5
/usr reiserfs 4004
/dev/hda6
/home reiserfs 25000
Unable to open usbdevfs
Tarring and zipping
the groups........................ Done.
Creating data disk
#1...#2...#3...#4...#5...#6...#7... Done.
Making 1722KB boot
disk...........................Kernel size = 1165 K
Ramdisk free =
1103 K
Sorry, your kernel
is too big.
Either recompile it
to reduce its size, or use Mindi's failsafe kernel.
For instructions on
using Mindi's failsafe kernel, read the manual.
1722KB boot disk was
NOT created
PrepareBootDiskImage()
is returning nonzero
Как видите, в строке ниже система не смогла
создать (в моем случае по причине отсутствия устройства /dev/fd0H1722) 1.72 Мб
образ, но при использовании в дальнейшем для работы СD-ROM или NFS это не
смертельно.
Warning! Failed to
create 1.72MB boot image. Please reduce your kernel's size if you want to make a
1.72MB floppy floppy disk. This error is non-fatal if you are backing up to CD or
NFS.
2880KB boot disk was
created OK......................... Done.
In the directory
'/root/images/mindi' you will find the images:-
mindi-boot.2880.img
mindi-data-1.img mindi-data-2.img mindi-data-3.img mindi-data-4.img
mindi-data-5.img mindi-data-6.img mindi-data-7.img
Сейчас можно записать все созданные образы на
дискеты.
Would you like to
create boot+data floppy disks now (y/n) ?n
После утвердительного ответа на последующий
вопрос будет содан ISO-образ, содержащий все данные.
Shall I make a bootable
CD image? (y/n) y
NB: Mindi's bootable
CD always uses isolinux.
For a bootable CD
w/LILO, please use Mondo.
Finished.
Boot and data disk
images were created.
Если сейчас посмотреть в каталог /root/images/mindi,
в нем находится несколько файлов.
#ls /root/images/mindi/
1.tar.gz
5.tar.gz initrd.img mindi-data-3.img
2.tar.gz
6.tar.gz mindi-boot.2880.img mindi-data-4.img mindi.iso
3.tar.gz
7.tar.gz mindi-data-1.img mindi-data-5.img
4.tar.gz
all.tar.gz mindi-data-2.img mindi-data-6.img
mindi-data-7.img
В нем, как видите, собраны образы для записи на
дискеты, архивы с данными и ISO-образ, который нам и нужен.
Записываем его на болванку:
# cdrecord -blank fast
dev=0,0,0 speed=12 /root/images/mindi/mindi.iso
Все, теперь у нас в руках загрузочный СD-ROM, созданный
под конкретную задачу и требования. При необходимости загружаемся с него и
автоматически загружается программа Mondo Rescue, о которой пойдет речь чуть
ниже. Если же с созданием образа что-то не получилось, то исчерпывающий ответ о
причине можно получить в файле /var/log/mondo-archive.log, который разработчики
просят прислать в случае обращения за помощью. Также для тех, у кого ничего не
получилось, то можно найти уже готовые ISO-образы по ссылкам на сайте, с этих
же образов можно установить полностью весь комплект программ, просто сначала примонтировав
диск и затем зайдя на него, введя setup. Теперь можно, загрузившись с этого СD-ROM,
провести спасательные работы по восстановлению системы. Но это еще не все.
Mondo Rescue
Далее переходим к рассмотрению Mondo Rescue – набора утилит, который
предназначен для создания резервной копии выбранной области системы, и записи
их затем на CD-R/RW, NFS, стриммер или на жесткий диск. В случае краха систему
можно будет очень легко восстановить, и в том числе с нуля, что может
понадобиться не только в аварийных случаях, но и при переразбиении дискового
пространства или, например, при переходе на RAID. Также этот пакет придется по
вкусу тем, кому нужна просто возможность клонирования системы на несколько
компьютеров с одинаковой конфигурацией, т.к. вместе с выбранными каталогами для
сохранения на диск заносятся также и boot-секторы. Mondo Rescue поддерживает
почти все файловые системы, о которых знает ядро Linux: ext2, ext3, JFS, XFS, ReiserFS,
VFAT, а также LVM и RAID. Но его можно использовать и для резервирования не-Linux
файловых систем, например NTFS. Mondo используют такие «монстры», как Siemens,
HP (в США и Франции), IBM, NASA. Распространяется под лиценцией GPL как bridalware,
плата берется за техническую поддержку.
Установка обычная для Linux.
#tar -xzvf
mondo-1.75_cvs_20040110.tgz
# cd mondo-1.75_cvs_20040110
#./configure && make
#su
#make install
Для стабильной версии 1.67 этап конфигурирования
не требуется. Для своей работы Mondo требует уже установленого Mindi и утилиты afio,
которая создает файлы формата, подобного cpio, и может создавать многотомные
архивы и сжимать их, сейчас эта утилита имеется практически во всех
дистрибутивах, также для версии 1.75 потребуется утилита partimagehack, если
чего-то нет, ссылки имеются на сайте в конце страницы Download. После этого в
каталоге /usr/local/bin появятся файлы mondoarchive и mondorestore.
Mondo Rescue при архивировании данных имеет два
режима работы: интерактивный и командный.
Для работы первого запускаем утилиту mondoarchive
без параметров:
#usr/local/bin/mondoarchive
И далее начинаем отвечать на вопросы программы.
Выбираем устройство, на которое будем записывать
архивные данные (рис. 1).

Рисунок 1
Если выбран CD-R[W], то следующим шагом будет
задан вопрос о поддержке устройством технологии BurnProof и чуть позже попросят
указать скорость привода и максимально возможный размер архивируемых данных (по
умолчанию предлагается 650 Мб), в этом случае будет создано несколько образов,
не превышающих указанный размер.
Далее выбираем степень сжатия данных. None
выбирается, если streamer поддерживает аппаратное сжатие и Maximum при мощном
процессоре. В остальных случаях достаточно средней степени сжатия (рис. 2).

Рисунок 2
Указываем на каталог, который собираемся
архивировать. В случае полной архивации (исключая /tmp и /proc) это /. И в
следующем окне перечисляем каталоги, которые необходимо исключить из списка
архивации.
Следующий шаг интересный. Вас спросят, нормальное
ли ядро в системе. В качестве подсказки написано, что пользователям Red Hat, Mandrake,
SuSE и Slackware можно давать утвердительный ответ, а вот Debian и Gentoo
используют нестандартные конфигурации ядра, и ответ – No. В этом случае
необходимо использовать ядро, взятое с сайта www.mondorescue.org.
И последним шагом будет задан вопрос о проверке
записанной информации.
И далее идет процесс создания образов, в ходе
которого будет создан список каталогов, который будет поделен на наборы, после
чего вызывается Mindi для создания загрузочного диска, описанного выше, после
чего начнется процесс архивирования данных.
В командном режиме необходимо сразу ввести все
необходимые опции в командной строке, все они хорошо описаны на соответствующей
man-странице. Две опции -О и -V являются определяющими. Первая говорит об
архивировании данных, вторая предназначена для проверки записанного.
Так, например, команда:
# mondoarchive -Oc 24 -g
запишет все данные на СD-R болванку со скоростью
(опция -с) 12 и в так называемом GUI mode (-g), когда программа общается с
пользователем в процессе работы. Если mondoarchive запускается при помощи cron,
то ее использовать не нужно. Теперь, пока идет создание первого образа,
вставляем пустой диск в привод и запускаем, когда потребуется следующий, то
программа сообщит об этом. Если программа не может найти привод, то
принудительно показываем на него, добавив строку -d 0,0,0 (свои цифры можно
узнать, запустив cdrecord -scanbus). Проверить можно, введя:
#mondoarchive -Vc 24
При использовании диска СD-RW вместо -с ставим -w
с указанием скорости, опция -r используется при работе с пишущим DVD-приводом,
но скорость при этом указывать не надо, программа сама выберет максимальную, а
если необходимо просто создать ISO-образы без записи на болванку, то ставим -i,
-t используется при работе со стриммером и -n mount_point при архивировании на
NFS (эта точка должна быть смонтирована до начала операции).
# mount 192.168.0.10:/home/nfs
-t nfs /mnt/nfs
# mondoarchive -OVn
192.168.1.3:/home/nfs -g -s 650m
# umount /mnt/nfs
Опция -s устанавливает максимальный размер
выходного файла. Если требуется исключить некоторые каталоги из списка
архивируемых, то указываем на них при помощи -Е, например:
#mondoarchive -E /mnt/dos /mnt/cdrom
-9 -Ow 12
Цифра -9 после каталогов означает степень
компрессии, по умолчанию используется -3, -0 означает без компрессии данных,
добавив опцию -L, можно использовать более быструю lzo-компрессию вместо bzip2.
Кроме командного режима можно сравнить записанное
и в интерактивном. Для этого загружаемся с первого диска и вводим:
# compare
После чего следуем за инструкциями на экране, все
изменившиеся файлы можно найти в /tmp/changed.txt.
Как видите, это инструмент, хотя и не для
каждодневного резервного сохранения данных, т.к. нет возможности выборки
изменившихся данных, но для полного восстановления системы или отдельных
каталогов после различных неприятностей это довольно удобная программа.
Восстановление системы после
сбоев
Mindi предлагает несколько режимов восстановления данных: Nuke, Interactive,
Expert и Advanced. Разберем по порядку. Nuke Restore предназначен для полного
восстановления системы или для клонирования системы. При этом все данные
сначала удаляются, а затем в автоматическом режиме восстанавливаются из
архивов. Для этого загружаемся с первого СD-ROM, при появлении приглашения
нажимаем Enter и по запросу вставляем последующие диски и следим за выводом
ошибок (/tmp/mondo-restore.log). Все остальное система сделает сама. Если
требуется перед этим переразбить жесткий диск или восстановить не всю систему,
то используется режим Interactive, позволяющий в удобном пошаговом режиме
проделать эти операции. Для перехода в этот режим после загрузки с первого СD-ROM
и появления приглашения набираем:
# interactive
После чего в окне «Editing mountlist screen»,
двигаясь при помощи клавиш курсора, возможно отредактировать текущую геометрию
диска. А так после загрузки, отвечая yes/no на следующие вопросы, можно
полностью восстановить все необходимое.
Do you want to partition
your devices? No
Т.е. хотим переразбить
диск?
Do you want to format
them? No
И форматировать
его затем?
Do you want to restore
everything? No
Надо ли
восстанавливать всю информацию?
Do you want to restore
something? Yes
Или хотим что-то
восстановить выборочно?
Which path do you
want to restore? /home/hugo [e.g.] /home
Какой именно
раздел?
Do you want to run
LILO to setup your boot sectors? No
Хотим ли
восстановить LILO?
Здесь хотелось бы отметить, что, введя:
# mondorestore –mbr
можно восстановить загрузочный сектор жесткого диска.
Введя при загрузке expert, попадаем в shell и
делаем все, что необходимо по восстановлению системы вручную, такая себе замена
спасательного диска, больше сказать здесь и нечего.
В режим Advanced можно перейти, например, после
режима Еxpert и произведения в нем всех необходимых работ.
Для этого ввводим в строке приглашения:
# mondorestore
После чего выбираем источник, с которого будет
происходить восстановление системы, указываем на файлы, которые хотим
восстановить (рис. 3), и точку монтирования, которая будет считаться корневой
при восстановлении данных. После чего выбранные файлы будут восстановлены.

Рисунок 3
Как видите, пакеты Mindi Linux и Mondo Rescue
представляют собой довольно удобный и простой в использовании инструмент,
который, несомненно, может существенно облегчить процесс восстановления данных
после системного сбоя или помочь в клонировании системы. На этом все. Успехов.