Рейтинг@Mail.ru

Наши друзья и партнеры

UnixForum
Альтернативная энергия




Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

“Совершите вы массу открытий,
Иногда - не желая того!”

Заметки пользователя Linux

(C) В.А.Костромин, 2004.

Программа Partition Image - создание образа дискового раздела

1. В чем проблема?

Довелось мне недавно заняться экспериментами с таблицей разбиения диска на моем домашнем компьютере. А, как известно, операции с главным загрузочным сектором и другими метаданными файловой системы, всегда потенциально опасны, так что просто необходимо принять меры предосторожности, чтобы не потерять все накопленные на диске данные! Поэтому я решил создать резервную копию данных, которые у меня на этом диске хранятся (или лучше сказать, хранились). Под рукой у меня как раз был свободный диск Ziv - компактный жесткий диск, подключаемый через USB-порт. Объем его был 40 ГБайт, что как раз равнялось объему моего жесткого диска. Так что все казалось очень просто: скопируй данные на резервный носитель - и задача решена. Но оказалось, что на этом пути встречаются некоторые подводные камни.

Вначале я попробовал создать резервную копию данных со своего жесткого диска "штатными" средствами ОС, с помощью команд cp или dd. Для этого я создал простейшую локальную сеть из двух компьютеров с сетевыми платами, соединенных витой парой. Второй компьютер работал под ОС Windows 2000, поэтому я запустил на своем компьютере демон Samba, и подмонтировал открытый на удаленной компьютере ресурс в каталог /mnt/samba командой

[root]# smbmount //Compaq/usb2 /mnt/samba -o username=kos uid=kos gid=kos

(я был зарегистрирован на удаленном компьютере как пользователь kos).

Начал с того, что попробовал просто скопировать все содержимое раздела /dev/hda2 на сетевой ресурс прямо из оболочки Midnight Commander (по F5). Однако ничего хорошего из этого не вышло: на каждый файл требовалось вводить подтверждение, каталоги просто создавались, а их содержимое не копировалось и так далее. Тогда я попытался использовать команду cp непосредственно из командной строки в следующем формате

[root]# cp -R -f /mnt/hda2 /mnt/samba/hda2

Результат получился немного лучший, однако и тут не все было гладко. Во-первых, команда работает молча, никак не отображая ход выполнения. А поскольку объем копируемых данных велик, непонятно, то ли она зависла, то ли еще что-то делает. Во-вторых, символические ссылки не копируются. И, в-третьих, появились сообщения о том, что некоторые файлы (с длинными именами на русском) программа вообще не находит и поэтому не может скопировать. Хорошо хоть, что сообщила, что такой-то файл скопировать не может и даже полное имя этого файла вывела. А ведь раздел-то у меня с файловой системой FAT32, на нем установлена ОС Windows (на память даже не помню какая именно версия, года два не запускал), так что подобных файлов на нем много. Отказываться от создания резервных копий таких файлов не хочется.

Необходимо также отметить, что я намеревался после некоторой корректирровки таблицы разделов диска восстановить свою систему в ее первоначальном виде, то есть мне хотелось, чтобы сохранились все настройки, все связи, "жесткие" и "мягкие" ссылки и тому подобные "мелочи", на восстановление которых в случае их утери потребовалась бы масса времени и усилий. В общем, решил я от использования cp отказаться.

Второй вариант - применение утилиты dd. Эта утилита, как известно, позволяет посекторно скопировать носитель, в частности, раздел жесткого диска со всеми файлами и ссылками. Так что казалось бы чего проще - даем команду

[root]# dd if=/dev/hda2 of=/mnt/sda1/hda2.bz2

и все. Однако использование утилиты dd для создания резервных копий тоже не лишено недостатков. Если ее запустить напрямую, то объем архивной копии будет равен полному объему исходного раздела, так что надо иметь резервный диск, объем которого не меньше объема основного диска. Можно, правда воспользоваться следующим приемом:

[root]# dd if=/dev/hda2 | bzip > hda2.bz2

Но у такого подхода тоже есть свои недостатки [2]. Первый и главный -- при этом архивируются не только реальные данные, но и "мусор", содержащийся в незанятых секторах. Соответственно на выполнение данной операции потребуется больше времени, и результирующий файл также будет больше. Кроме того, если вы создаете образ раздела на сменных носителях относительно небольшого объема, необходимо самостоятельно позаботиться о разбиении образа на фрагменты допустимых размеров -- скажем, так:

[root]# dd if=/dev/hda1 | bzip | split --bytes=671088640

Поэтому я отказался от использования штатных средств ОС, тем более, что на самозагружаемом CD-диске с системой Knoppix нашелся более удобный инструмент, а именно, программа Partition Image.

2. Программа Partition Image

Эта программа предназначена для создания точных образов дисковых разделов. Я пользовался версией 0.6.2 этой программы из дистрибутива Knoppix RE 3.2. Как сообщает сама программа, найти ее можно на сайте http://www.partimage.org/, а авторами ее являются Francois Dupoux и Franck Ladurelle (поскольку французского не знаю, не берусь дать русскую транскрипцию этих имен).

Утилита partimage (так называется исполняемый файл программы) версии 0.6.2 "понимает" файловые системы ext2fs, FAT16, FAT32, NTFS, HPFS, ReiserFS. Файловые системы JFS, XFS, UFS распознаются, но пока еще не поддерживаются. Относительно FAT12 справка к программе сообщает, что эта файловая система никогда не будет поддерживаться.

В отличие от dd утилита partimage сохраняет и восстанавливает только блоки данных. Благодаря этому объем полученного образа существенно меньше объема архивируемого раздела. Кроме того, можно задать и сжатие образа с помощью утилит gzip или bzip2, что еще более уменьшает требования к объему свободного пространства для создания образа раздела. В следующей табличке показано, насколько сжимаются данные на примере моих разделов (я использовал сжатие утилитой gzip):

Таблица 1. Размеры файлов-образов, создаваемых программой partimage

раздел

Тип

(fdisk -l /dev/hda)

Исходный размер раздела

(блоков по 1K, как сообщает команда df)

Занято данными

(блоков по 1K как сообщает команда df)

Размер образа

(сообщаемый FAR)

/dev/hda2

FAT32 (LBA)

1 915 976

593 596

266 633 КБ

/dev/hda7

83 Linux (ext3)

8 185 736

6 412 912

3 526 772 КБ

/dev/hda8

83 Linux

4 838 576

4 496 012

2 661 040 КБ

/dev/hda9

FAT32 (LBA)

20 472 816

15 402 480

13 914 899 КБ

Для создания архивного образа программа partimage может подключаться к удаленному серверу, где работает демон partimaged, для централизованного хранения и развертывания образов. Но я в таком варианте с ней не работал, поэтому рассказывать об этом не буду. Расскажу о том, что делал сам.

Рассказ свой я начну с двух небольших предупреждений. Во-первых, программа отказывается запускаться от имени простого пользователя. Когда я попытался запустить ее из главного меню Knoppix, появилось следующее предупреждение: “You are not logged as root. You may have “access denied” errors when working”. Во-вторых, на одном из последующих этапов программа требует, чтобы те разделы, образы которых вы хотите создать, были размонтированы. Когда эти два условия выполнены, работа с программой осуществляется следующим образом.

3. Создание резевной копии данных

Когда запускаешь partimage из командной строки терминала (с правами суперпользователя), появляется следующее окно (рис.1):

Рис. 1. Первый экран программы partimage

Здесь нужно выбрать архивируемый раздел и задать имя файла, в котором будет храниться его образ. Переход от одной строки ввода к другой осуществляется клавишей табуляции (мышка не работает), а переход к следующему экрану – клавишей <F5> или переключением на экранную кнопку Next с последующим нажатием клавиши <Enter>.

Рис.2. Задание параметров образа

На втором экране вы задаете уровень сжатия образа, устанавливаете опции (“Проверять файловую систему перед созданием образа или нет?”, “Включить в файл образа его описание?”, “Что делать по завершению работы?”) и задаете объем отдельных кусков образа. Казалось бы, если места на диске, где создается образ, достаточно, можно просто выбрать “Automatic split” (“Разбивать автоматически”). Однако у меня такой ход не удался – после того, как объем файла-образа превысил 2,047 Гигабайта программа “вывалилась” с сообщением “Превышен допустимый объем файла”. Поскольку я создавал архив на NTFS-разделе в машине, работающей под Windows 2000, то есть в системе, где допускаются файлы значительно большего объема, то я вначале подумал, что максимальный объем файла установлен в самой программе.
  • Примечание. Как позже написал мне А.Шумейко (Shumeyko Andrey):
    "Это ограничение не программы, а ограничение, к сожалению, ФС samba. Не более 2Ggb размер файла передаваемого по сети. В версии 3.0.7 ввели опцию lfs которая позволяет копировать большие файла. Сам скопировал 2.7 Gb

Поскольку я этого тогда не знал, мне пришлось согласиться с разбиением образа на отдельные части (значение выбрал по умолчанию). В результате получил для раздела hda8, например, файлы hda8.img.000 и hda8.img.001 объемом, соответственно, 2037 и 512 Мбайт, а образ раздела hda9 потребовал создания аж семи файлов (в таблице 1 указан суммарный объем полученных файлов-образов).

Если вы указали, что надо присоединить к файлу образа его описание, появится строка ввода этого описания.

Рис. 3. Строка описания к образу раздела

После нажатия клавиши <F5> (переход к следующему этапу) появляется следующая информация (рис.4, обратите внимание на наличие полосы прокрутки):

Рис. 4. Результирующие параметры создаваемого образа

и после подтверждения того, что вы это видели (нажать клавишу <Enter>) начинается собственно процесс архивирования, ход которого отображается на экране (рис.5):

Рис. 5. Отображение процесса создания образа на экране

По завершении процесса программа выдает итоговое сообщение (рис.6) и завершает работу. Конечно, если вы сказали ей на втором этапе, что ждать вашей реакции не надо, она может и просто завершиться и перезагрузить компьютер (см. рис. 4).

Рис. 6. Сообщение о завершении создания образа

С созданием резервных копий разделов формата ext3fs возникают некоторые проблемы (вспомним, что в руководстве к программе поддержка этой файловой системы не указана). Когда я начал создавать образ раздела /dev/hda8, где у меня была создана файловая система ext3fs, появилось сообщение “e2fsck found errors on the file system” и программа спросила “Продолжать?”. Я решился продолжать, поскольку к этому времени у меня уже был создан полный (насколько это возможно при копировании командой cp) образ раздела, так что терять мне было нечего. При создании образов следующих разделов (/dev/hda7, /dev/hda9) я уже снял флажок в строке “Check partition before saving”.

Конечно, для создания образа большого раздела требуется довольно много времени. Например, у меня создание образа FAT32-раздела объемом 20 гигабайт, на котором было занято 14,7 гигабайт данных заняло 5 часов 34 минуты.

  • Примечание. После первой публикации этой части заметок я получил письмо следующего содержания:
    "Насколько я знаю в Knoppix для HDD не устанавливается режим DMA. Видимо, именно с этим связано большое время копирования разделов. Включите DMA с помощью hdparm, будете приятно удивлены. Я сохранял на локальный диск, и скорость с принудительно включенным DMA была огромна.
    С уважением, Владислав Федорчук"

    Справедливость этого утверждения я не проверял, но думаю, что причина задержек может быть и в сети, и в том, что копии я создавал на диске, подключенном по USB (правда, версии 2). Но все-же считаю, что читателям при случае следует учесть это замечание.

О том, как восстанавливать информацию, сохраненную в образах разделов, я расскажу во второй части этой заметки.

Продолжение: 4. Восстановление раздела из резервной копии.

Поделиться: