Как я оживлял Linux - Житейский случай восстановления случайно стертых
разделов жесткого диска
Как и у многих пользователей, на одном винчестере у меня содержится
несколько различных ОС. В данном случае - ASP Linux 9.2 и Windows XP
(да, вы правильно догадались: "пингвин" для работы, а "окошки" для
экспериментов).
И вот в один прекрасный день возникло у меня желание познакомиться с
wine - утилитой, которая способна запускать программы win32 из-под
Linux. Пришла мысль подключить еще один винчестер и - для чистоты
эксперимента - поставить туда "винду". Вот тут-то все и началось...
Я отвлекся и при инсталляции W2K, конечно же, поубивал все разделы не
на том диске. А разделы были такие:
* hdb1(ext3) под корневой раздел "/", размер 5 Гб;
* hdb2 своп (512 Мб);
* hdb3(ext3) для пользовательских данных; его величина составляла 9
Гб, и он существовал уже несколько лет - "бэкапы" с него хоть и
делались, но не ежедневно. А ведь жаль было расставаться с
наработками за последние несколько дней!
* hdb4(NTFS) с Windows XP - в этом разделе было много ерунды. И я
был бы, в общем-то, рад переустановить эту ОС начисто, да вот
только это означало потерять базу программы 1C.
Один знакомый посоветовал воспользоваться замечательной утилитой
EasyRecovery: "Я сам ею пользовался при нужде. И мне он помог спасти
файлы!". Ну, взял я эту программку, установил (под Windows 98),
запустил. Да - красиво! Я так понимаю, она предназначена для
комплексного обслуживания HDD-носителя. Но вот разочарование: среди
упомянутых типов файловых систем, которые понимает EasyRecovery, ни
слова о ext2-3. "Хорошо,- думаю,- хоть NTFS спасу. А потом что-то
придумаем...". Каким же было мое разочарование, когда эта утилита с
проработанным до мелочей GUI не смогла найти ни малейших следов
удаленного раздела!
Пришлось запасаться терпением и более детально изучать способы решения
проблемы.
GPART: все лучшее - бесплатно!
Начну именно с той утилиты, которая мне помогла и вообще понравилась.
Найдена она была по адресу (http://www.stud.uni-hannover.de/user/76201/gpart/).
Я взял файл для Линукс - gpart.linux. Переименовал в gpart и записал на дискету
(размер файла - 265 364 байт). После чего загрузился с ASP Linux CD-ROM в
режиме консоли восстановления. Выполнил dmesg, чтобы еще раз убедиться, что
винчестер у меня это устройство hdb:
hdb: MAXTOR 6L040J2, ATA DISK drive
hdb: 66055248 sectors (33820 MB) w/1819KiB Cache, CHS=65531/16/63, UDMA (100)
Теперь нужно смонтировать дискету и запустить утилиту:
/mnt/floppy/gpart /dev/hdb
После краткого "раздумья" на экран буде выведена информация о
возможном размещении стертых разделов. Вот в таком виде:
Primary partition (1)
type: 131(0x83)(Linux ext2 filesystem)
size: 5004mb #s (10249400) s (63-10249462)
chs: (0/1/1)-(1023/15/63) d (0/1/1)-(10168/1/56) r
......
Primary partition (4)
type: 007(0x07)(OS/2 HPFS, NTFS, QNX or Advanced UNIX)
size: 16731mb #s (34266640) s (31760505-66027144)
chs: (1023/15/63)-(1023/15/63) d (31508/7/1)-(65503/1/58) r
Несколько слов о полученной информации. В строку, помеченной type,
указан тип файловой системы, в коде и символическом представлении.
Вообще, эта утилита "понимает" следующие системы:
* DOS/Windows FAT (FAT 12/16/32) Linux ext2;
* Linux swap, версии 0 and 1 (Linux >= v2.2.X);
* OS/2 HPFS;
* Windows NT/2000 FS;
* BSD метки дисков;
* Solaris/x86 метки дисков;
* Minix FS;
* Reiser FS;
* Linux LVM дисковый массив;
* SGI XFS on Linux;
* BeOS filesystem;
* QNX 4.x filesystem.
В строке size находится информация, касающаяся "секторной приписки"
раздела и количества секторов, занимаемых им. То есть строка:
size: 16731mb #s (34266640) s (31760505-66027144)
означает, что размер диска - 16731 Мб, занимает он 34 266 640
секторов, с 31 760 505 по 66 027 144.
Последняя строка - chs - предоставляет нам данные о топологическом
размещении разделов, в координатах "цилиндр/головка/сектор" (в нашем
случае это не так важно).
И что теперь? Теперь мы можем просто восстановить таблицу размещения
разделов при помощи команды:
gpart -W /dev/hdb /dev/hdb
Такой синтаксис предписывает утилите "вычислить" таблицу разделов на
устройстве hdb и вписать его туда же (то есть восстановить). Но, в
принципе, нам предоставляются и другие возможности: сохранить эти
данные про запас (gpart -W /dev/fd0 /dev/hdb, на дискету. На тот
случай если придется ее восстанавливать) или разбить другой диск по
образу и подобию текущего (gpart -W /dev/hda /dev/hdb). Если вы любите
делать все своими руками - из осторожности, например (все-таки
восстанавливать партиции - дело не тривиальное) - можно
воспользоваться традиционным fdisk. Не забудьте только добавить ключ
-u - тогда при построении таблицы разделов можно оперировать номерами
секторов.
Восстанавливаем загрузчик Линукс
Разработчики дистрибутива ASP Linux предлагают вместо традиционного
LILO использовать для загрузки ОС их детище - ASP Loader. Суть в том,
что все загрузчики ОС прописывают себя в MBR.
После того как были воссозданы, как описано выше, потерянные разделы,
компьютер все-таки отказался грузиться. Ну, не получилось у gpart в
первозданной целостности реанимировать такую тонкую вещь, как первый
сектор диска.
Не беда, снова загружаемся с компакт-диска в режиме восстановления.
Что нужно сделать, так это подмонтировать раздел диска, являющийся
корневым при нормальной работе ОС в "/". Для этого и предусмотрена
специальная утилита pivot_root.
Хорошо. Монтируем /dev/hdb1 куда-нибудь:
mount -t ext3 /dev/hdb1 /tmp/hdb1
Создаем вспомогательную папку tmp/old-root. И теперь:
cd /tmp/hdb1
/tmp/hdb1/sbin/pivot_root. tmp/old-root
Все, мы воссоздали ту файловую структуру, которая соответствует
обычной загрузке ОС. Осталось выполнить команду aspldr (или lilo, если
использовался этот загрузчик). Осталось перегрузить систему.
Ключи утилиты gpart
При работе с описанной утилитой, полезными могут оказаться и другие
опции ее работы:
-b backupfile: позволяет перед тем, как переписывать MBR, сохранить
его в определенном файле.
-C c, h, s: можно вручную указать геометрию винчестера, если ее не
удается корректно определить через ОС.
-f: без этого ключа gpart находит раздел, а потом продолжает
сканирование от его конца. В этом-же случае производится полное,
посекторное сканирование, что может кстати, занять продолжительное
время.
-L: вывести список поддерживаемых типов файловых систем.
Красота требует... денег
Наверное, вы удивитесь, но средства восстановления утерянных разделов
существуют не только для Линукс но и для Windows всех модификаций:-).
Одним из лучших считается Acronis RecoveryExpert (стоимость - около
$15).
Эта программа испытывалась в следующих условиях. Было создано три
раздела: Linux ext3, Windows Extended и NTFS. Они были отформатированы
соответствующим образом и на них были скопированы файлы. Поле этого
из-под Windows 98 утилитой fdisk эти разделы были удалены. Дальше за
дело взялся RecoveryExpert. Сразу скажу: работать с ним легко - весь
процесс восстановления сопровождался короткими, но понятными
подсказками. Если отбросить традиционные для коммерческих продуктов
диалоги приветствия и поздравления с завершением, то работа программы
состояла из трех частей: выбора винчестера, на котором нужно
восстановить данные, анализа диска и самого восстановления.
Ищем удаленные разделы на не размеченной области диска
В самом начале пользователю представляется выбор: контролировать весь
процесс работы или понадеяться на интеллектуальные способности
программы. Рекомендую выбрать ручной режим. Далее требуется более
точно указать пространство диска (рис. 1), на котором следует искать
утерянные данные. Если в следующем диалоговом окне вы выберете полный,
а не быстрый анализ винчестера, то наверняка успеете попить пивка и
даже выкурить трубочку. Ведь программа будет вынуждена сканировать
каждый сектор на предмет наличия метки файловой системы - тогда как
при быстром анализе предполагается, что раздел начинается с первого
сектора цилиндра, а это дает значительный рост производительности.
Выбрать для восстановления расширенный раздел MS-DOS не
получается<nobr>:-(</nobr>
Когда процесс сканирования подойдет к концу, укажите те разделы,
которые, собственно, нуждаются в восстановлении (рис. 2). Как я
говорил, на диске существовал расширенный раздел с логическим диском.
В документации к gpart этот случай описывался как не вполне
тривиальный. Интересно, что RecoveryExpert (эксперт?) отреагировал на
данную ситуацию подобным же образом (забегая наперед, скажу, что
раздел все же был восстановлен и данные не потерялись).
Лучше потратьте несколько секунд на изучение информации. Параметры
всех разделов верны?
Следующим делом пользователю представляется случай полюбоваться на
графическое представление структуры диска после его успешного
восстановления. Потом - то же самое, но в текстовом виде (рис. 3).
Осталось нажать кнопку Приступить и пожелать себе удачи.
Как организован диск
Почему вообще оказывается возможным спасти стертые программой типа
fdisk разделы?
Современные винчестеры имеют объем 40...120 Гб. Все дисковое
пространство одного физического устройства принято (и это разумно)
делить на несколько частей, называемых разделами (партициями,
partition). Зачем? Во-первых, некоторые операционные системы
(UNIX-подобные) требуют этого сами по себе, в других случаях удобно
"территориально" разделить программы и данные.
Подобно содержанию обычной книги, дающему информацию о размещении глав
и разделов, на винчестере содержится специальный объект - MBR (Master
Boot Record, основная загрузочная запись). Как раз там и описывается,
как поделен диск,- точнее, какой номер первого сектора раздела, каково
количество секторов, ему принадлежащих, предоставляется также
некоторая другая информация. При включении компьютера BIOS считывает
эту запись, загружает ее в память (а на самом деле это маленькая
программка! вот поэтому и существуют загрузочные вирусы) и передает ей
управление. В стандартном случае MBR просто загружает операционную
систему, находящуюся в "активном" разделе. В другом случае - при
использовании Linux и Windows 2000/XP - пользователю предлагается
меню, позволяющее загружать ОС по выбору.
Кроме регистрации в MBR, первый блок (несколько секторов) каждого
логического диска, имеет специальную метку. Эта метка не стирается,
когда вы удаляете раздел, скажем, с помощью fdisk,- она будет затерта
позднее, когда на данном логическом диске будет создана файловая
система. Таким образом, просмотрев последовательно сектора на
винчестере, с большой вероятностью можно найти все уделенные разделы.
Это не очень сложно, тем более что для этих целей создано несколько
программных решений.