Как и у многих пользователей, на одном винчестере у меня содержится несколько различных ОС. В данном случае - 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: все лучшее - бесплатно!
Начну именно с той утилиты, которая мне помогла и вообще понравилась. Найдена она была по адресу. Я взял файл для Линукс - 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. Сразу скажу: работать с ним легко - весь процесс восстановления сопровождался короткими, но понятными подсказками. Если отбросить традиционные для коммерческих продуктов диалоги приветствия и поздравления с завершением, то работа программы состояла из трех частей: выбора винчестера, на котором нужно восстановить данные, анализа диска и самого восстановления.
В самом начале пользователю представляется выбор: контролировать весь процесс работы или понадеяться на интеллектуальные способности программы. Рекомендую выбрать ручной режим. Далее требуется более точно указать пространство диска, на котором следует искать утерянные данные. Если в следующем диалоговом окне вы выберете полный, а не быстрый анализ винчестера, то наверняка успеете попить пивка и даже выкурить трубочку. Ведь программа будет вынуждена сканировать каждый сектор на предмет наличия метки файловой системы - тогда как при быстром анализе предполагается, что раздел начинается с первого сектора цилиндра, а это дает значительный рост производительности.
Когда процесс сканирования подойдет к концу, укажите те разделы, которые, собственно, нуждаются в восстановлении. Как я говорил, на диске существовал расширенный раздел с логическим диском. В документации к gpart этот случай описывался как не вполне тривиальный. Интересно, что RecoveryExpert (эксперт?) отреагировал на данную ситуацию подобным же образом (забегая наперед, скажу, что раздел все же был восстановлен и данные не потерялись).
Следующим делом пользователю представляется случай полюбоваться на графическое представление структуры диска после его успешного восстановления. Потом - то же самое, но в текстовом виде.
Осталось нажать кнопку Приступить и пожелать себе удачи.
Как организован диск |
Почему вообще оказывается возможным спасти стертые программой типа fdisk разделы?
Современные винчестеры имеют объем 40:120 Гб. Все дисковое пространство одного физического устройства принято (и это разумно) делить на несколько частей, называемых разделами (партициями, partition). Зачем? Во-первых, некоторые операционные системы (UNIX-подобные) требуют этого сами по себе, в других случаях удобно "территориально" разделить программы и данные.
Подобно содержанию обычной книги, дающему информацию о размещении глав и разделов, на винчестере содержится специальный объект - MBR (Master Boot Record, основная загрузочная запись). Как раз там и описывается, как поделен диск,- точнее, какой номер первого сектора раздела, каково количество секторов, ему принадлежащих, предоставляется также некоторая другая информация. При включении компьютера BIOS считывает эту запись, загружает ее в память (а на самом деле это маленькая программка! вот поэтому и существуют загрузочные вирусы) и передает ей управление. В стандартном случае MBR просто загружает операционную систему, находящуюся в "активном" разделе. В другом случае - при использовании Linux и Windows 2000/XP - пользователю предлагается меню, позволяющее загружать ОС по выбору.
Кроме регистрации в MBR, первый блок (несколько секторов) каждого логического диска, имеет специальную метку. Эта метка не стирается, когда вы удаляете раздел, скажем, с помощью fdisk,- она будет затерта позднее, когда на данном логическом диске будет создана файловая система. Таким образом, просмотрев последовательно сектора на винчестере, с большой вероятностью можно найти все уделенные разделы. Это не очень сложно, тем более что для этих целей создано несколько программных решений. |