Наши партнеры

UnixForum






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

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

“И узнаешь ты много такого, о чем совсем не хотел знать”
Автор неизвестен

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

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

Восстанавливаем таблицу разбиения диска

Назад: 1.5. Как устроена и используется таблица разделов диска.

1.6. Создаем резервную копию данных

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

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

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

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

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

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

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

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

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

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

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

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

Программа partimage

Эта программа предназначена для создания точных образов разделов. Я пользовался версией 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 справка к программе сообщает, что эта файловая система никогда не будет поддерживаться.

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

Таблица 2. Размеры файлов-образов, создаваемых программой 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”. Во-вторых, на одном из последующих этапов программа требует, чтобы те разделы, образы которых вы хотите создать, были размонтированы. Когда эти два условия выполнены, работа с программой осуществляется следующим образом.

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


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

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


Рис. 4. Второй экран программы partimage

На втором экране вы задаете уровень сжатия образа, устанавливаете опции (“Проверять файловую систему перед созданием образа или нет?”, “Включить в файл образа его описание?”, “Что делать по завершению работы?”) и задаете объем отдельных кусков образа. Казалось бы, если места на диске, где создается образ, достаточно, можно просто выбрать “Automatic split” (“Разбивать автоматически”). Однако у меня такой ход не удался – после того, как объем файла-образа превысил 2,047 Гигабайта программа “вывалилась” с сообщением “Превышен допустимый объем файла”. Поскольку я создавал архив на NTFS-разделе в машине, работающей под Windows 2000, то есть в системе, где допускаются файлы значительно большего объема, то максимальный объем файла, видимо, установлен в самой программе. Поэтому мне пришлось согласиться с разбиением образа на отдельные части (значение выбрал по умолчанию). В результате получил для раздела hda8, например, файлы hda8.img.000 и hda8.img.001 объемом, соответственно, 2037 и 512 Мбайт, а образ раздела hda9 потребовал создания аж семи файлов (в таблице 2 указан суммарный объем полученных файлов-образов).

  • Примечание. Как написал мне А.Шумейко (Shumeyko Andrey):
    "Это ограничение не программы, а ограничение, к сожалению, ФС samba. Не более 2Ggb размер файла передаваемого по сети. В версии 3.0.7 ввели опцию lfs которая позволяет копировать большие файла. Сам скопировал 2.7 Gb

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


Рис. 5. Третий экран программы partimage

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


Рис. 6. Четвертый экран программы partimage

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


Рис. 7. Пятый экран программы partimage

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


Рис. 8. Шестой экран программы partimage

С созданием резервных копий разделов формата 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). Но все-же считаю, что читателям при случае следует учесть это замечание.

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

Продолжение: 1.7. Определяем “истинную” таблицу разделов. Программа gpart.