Как и у многих пользователей, на одном винчестере у меня содержится несколько различных ОС.
Автор:
Разместил: Amro   Дата: 2006-03-13 10:56
Комментарии: (0)   Рейтинг:

Как я оживлял 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: все лучшее - бесплатно!

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

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


Иcточник: Комиздат
Опубликована - 05.03.2005