Мини-HOWTO: Восстановление разделов

Аннотация

Ой! Мой диск пуст! Мой Linux исчез! Если вы боитесь однажды столкнуться с этой или подобной проблемой, то прочтите этот текст...


Содержание
Что описано здесь?
Что надо делать сразу?
Legal stuff
Авторские права
Что я должен знать прямо сейчас?
Диски
Разделы
И в чем здесь проблема?
Решение проблемы
Авторы
Наиболее новая версия

Что описано здесь?

Здесь приведено описание проблемы "потерянная таблица разделов", а также ее решение. Это может произойти по следующим причинам:

Если вы будете знать, что делать, то Linux должен выжить. Windows тоже может выжить, но здесь большую роль играет везение, нежели знание дела.

Сначала мы рассмотрим вопрос о том, что вы можете сделать до возникновения самой проблемы для облегчения последующих восстановлений, затем то, что вы должны выполнить после, для восстановления системы. А нужно очень немного, чтобы избежать полной очистки диска - это обычно делают автоматические установщики Windows, Linux или других ОС, а также ошибки в программах пользователей - этому нельзя помешать, кроме, как просто быть осторожным, но ведь вы и так осторожны, не так ли?

Диск может очистить и программа fdisk в MSDOS/Windows - избегайте ее использования, как огня, прибегайте к ней только в исключительных случаях!

Все нижеописанное я проделывал много раз на моем компьютере и на других, и практически всегда восстанавливал Linux, а иногда даже windows. Желаю вам удачи!


Что надо делать сразу?

Если вы сейчас читаете это из простого любопытства или ищете полезную информацию, работая в Linux, сделайте немедленно следующее:

и вы увидите список всех разделов на всех дисках, установленных на вашем компьютере.

Если вы не системный администратор - то вас не должна беспокоить эта проблема, и вы можете спокойно прекратить чтение.


Legal stuff

This mini-HOWTO is Copyright (c) 2000 by Jean-Daniel Dodin. All rights reserved. You may do (almost) whatever you want with it. I don't care. Just be sure to keep my name intact. I just hope it becomes useful for any person in the Linux community.

I am not responsible of any damage on any computer as a result of anyone reading this HOWTO. If you do any damage, _it is YOUR fault, NOT MINE !_ Be careful when partitioning disks, and don't make any mistakes, because it can be fatal ! Backup all your important data and check that everything you do is correct ! What is described here worked on my computer, but it may or may not work on your computer. Although it should work for everyone, I can't guarantee anything. This is the last warning you get : _BACKUP IMPORTANT DATA !_ Or, to put it short: Use at your own risk !


Авторские права

Авторские права на русский перевод этого текста принадлежат ╘ 2000 ASPLinux Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но так или иначе автор текста и автор перевода желали бы знать о таких дистрибутивах.

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

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: , или к координатору русского перевода Linux HOWTO компании ASPLinux по адресу


Что я должен знать прямо сейчас?

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

Если однажды, в очень несчастливое утро ваш компьютер скажет "can't load, no system installed" ("не могу загрузиться, нет операционной системы"), вы не должны начинать полную переустановку.

Если у вас был установлен Windows, то я не могу обещать, что вы все восстановите, но, скорее всего, все что относится к Linux вы все-таки восстановить сможете, если только данные не находились в начале диска. Просто некоторые вирусы в Windows стирают первый цилиндр диска, что бы на нем ни находилось. Вообще-то я не экспериментировал с подобными вирусами, поэтому точно утверждать ничего не буду. Но попытаться все-таки, наверное, стоит.

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


Диски

Жесткий диск разбивается на сектора, пронумерованные с 0 до некоторого максимума.

Команда dmesg выдает примерно следующее:

hdb: ST34321A, 4103MB w/128kB Cache, CHS=523/255/63

CHS означает Cylinders, Heads, Sectors (Цилиндры, Головки, Сектора).

523*255*63=8401995 секторов по 512 байт, то есть 4103 Мегабайт. Это логическое разбиение - то, что написано на самом диске, не так уж и важно (кроме общего объема винчестера).

Настоящее количество секторов на диске нам не интересно, так как мы не хотим ничего изменять, а просто хотим восстановить все, как было. Для нас стандартного количества, установленного fdisk, будет достаточно.

Размер диска, видимый системой, напрямую зависит от BIOS (Basic Input/Output System - ПЗУ вашего компьютера). Режим работы вашего жесткого диска, указанный в BIOS, очень важен. Для нового диска лучше всего использовать автоопределение BIOS. В любом случае, любые исправления на этом уровне могут уничтожить все данные на диске, поэтому не изменяйте эти значения без особой на то причины.

Но, скорее всего, диск использует именно эти параметры, поэтому особо не беспокойтесь.


Разделы

Диски сейчас стали достаточно большими, 13 Гб уже давно не редкость, поэтому не всегда удобно, чтобы вся информация была в одной куче. Так делает Windows, и, если у вас Linux, то, скорее всего, вы просто знаете, насколько Windows неэффективен.

Поэтому жесткий диск обычно делится на несколько частей, называемых "разделы" (см. "Мини-HOWTO: Разделы", где есть подробное описание работы с разделами, а также файл /usr/doc/package/util/README.fdisk)

Давайте взглянем на результат работы команды fdisk -l на моем компьютере:

Disk /dev/hdb: 255 heads, 63 sectors, 523 cylinders Units = cylinders of
16065 * 512 bytes 

Device    Boot Start   End   Blocks  Id  System 
/dev/hdb1         1    153   1228941 83  Linux 
/dev/hdb2       154    166   104422+ 82  Linux swap 
/dev/hdb3  *    167    291  1004062+ 83  Linux 
/dev/hdb4       295    523  1839442+  5  Extended 
/dev/hdb5       295    422  1028128+ 83  Linux 
/dev/hdb6       423    523    811251  6  FAT16 

Это мой второй жесткий диск, предназначенный для экспериментов (на первом все просто, а поэтому неинтересно).

/dev/hdb - это мой второй IDE диск (зависимый диск на первичном интерфейсе),

/dev/hdb1 - это первый главный раздел, начинающийся с первой дорожки по 153-ю.

На диске может быть максимум 4 таких главных раздела. Если необходимо иметь больше 4, один из них должен быть, так называемым, "расширенным" (не обязательно четвертым), и все дополнительные разделы называются "логическими" и находятся внутри расширенного. Заметьте, что разделы 4 и 5 имеют одно и то же начало. 5-ый раздел - логический, а 4-ый - расширенный. Номера логических разделов всегда начинаются с 5, даже если главных разделов меньше 4.


И в чем здесь проблема?

Проблема состоит в том, что все установленные ОС должны совместно использовать диски, а в начале работы системы BIOS обращается только к первому диску, на котором в самом начале должна быть, так называемая, "таблица разделов". Эта таблица разделов находится в Главной Загрузочной Записи MBR (Master Boot Record) вместе с начальным загрузчиком (boot loader).

Некорректное использование MBR любой ОС может привести к проблемам. При попытке установить любую систему, ответ "да", на вопрос типа "Автоматически разбить диск на разделы?", скорее всего, приведет к трудностям... Это чаще всего происходит с Windows, особенно со специальными установщиками Windows, включаемыми в поставку новых компьютеров (без настоящего дистрибутивного диска с Windows). И, к сожалению, стали уже не редкостью проблемы с "умными" (а на самом деле не очень умными) установщиками Linux в новых дистрибутивах.


Решение проблемы

Будьте осторожны! Дальнейшие объяснения приведут к возврату к предыдущей ОС, с потерей, только что установленной, новой, если она есть! Выбирать вам...


Простое решение

Все очень просто, если у вас есть:

  • диск (флоппи или CD), с которого можно загрузить Linux с программой fdisk - многие загрузочные диски любого дистрибутива могут это сделать,

  • распечатанный или переписанный результат работы команды fdisk -l (ниже "список").

Надо:

  1. запустить Linux,

  2. запустить fdisk /dev/hda (или тот диск, который хотите восстановить),

  3. использовать команду удаления раздела fdisk (опция d) для всех существующих разделов поврежденного диска,

  4. использовать команду создания главного раздела fdisk (опции 1-4) для всех главных разделов из списка,

  5. проставить соответствующие типы разделов в соответствии со списком (опция t) : 82 - Linux swap, 83 - Linux main (опция L выдает список), 5 - расширенный, который надо создать до создания логических разделов.

  6. создать логические разделы.

fdisk - это очень маленькая и умная программа. Существует много других реализаций fdisk, но я лично предпочитаю стандартный (Я говорю только от лица пользователей Linux).

Заметьте, что fdisk не записывает ничего на диск, пока вы не выберете опцию w и не нажмете Enter. Если вы боитесь ошибиться, выберите опцию q (quit) или нажмите Ctrl-C для выхода без сохранения изменений.

После записи таблицы разделов запустите свой Linux. Возможно, вам это не удастся: lilo тоже может быть поврежден, и вам придется снова загружаться с флоппи или загрузочного CD (выберите опцию "загрузка с существующего раздела").

Если вы загружали свою систему при помощи lilo, то после входа в систему пользователем root, запустите команду lilo, для переустановки вашего загрузчика.

Ваш Linux должен быть восстановлен - проверьте его. Также попытайтесь запустить Windows, если он у вас был. Если ничего не получается, то существуют шансы (которые, к сожалению, очень малы), что вы сможете прочитать данные с вашего Linux, возможно, при помощи прямого чтения секторов с диска. Если вы можете определить номера секторов диска, в которых находятся ваши данные, то используйте команду dd для записи их в файл. Это просто только для текстов. Описание такой формы восстановления данных не входит в этот документ.


Не такое простое решение

Вручную

Такой способ обычно бывает необходим, если все вышеописанное неприменимо, например, если у вас нет распечатки результата fdisk, или она устарела

Во-первых, вам надо знать, что пока вы не пишете ничего на диск (кроме записи таблицы разделов при помощи fdisk), вы не можете испортить свои данные, поэтому можно пробовать устанавливать начало раздела последовательно цилиндр за цилиндром. Это надо делать потому, что для запуска системы с раздела, надо знать его начало. Например, если 153 не подошло, попробуйте 154, и так далее.

Это может утомить, но если вы помните примерные размеры разделов, то у вас есть шансы на успех.


gpart

Существует лучший путь, если у вас есть доступ к сети или есть под руками утилита gpart.

gpart - guess PC-type hard disk partitions (Восстановление таблицы разделов жесткого диска)" - это первая строка man-страницы для утилиты gpart (man gpart).

"gpart пытается восстановить таблицу разделов на жестком диске, если она была потеряна, перезаписана или разрушена, а разделы все еще присутствуют на диске". Это как раз то, что нам надо.

Утилита gpart все еще достаточно сыра, но уже довольно хороша для использования.

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

Вот результат работы gpart для ранее описанного диска hdb :

root@charles:/home/jdd > gpart /dev/hdb

Begin scan...

Possible partition(Linux ext2), size(1200Mb), offset(0Mb)

Possible partition(Windows NTFS), size(1200Mb), offset(1200Mb)

Possible partition(Linux ext2), size(1004Mb), offset(2402Mb)

Possible partition(Windows NTFS), size(1600Mb), offset(4102Mb)

End scan.

Checking partitions...

* Warning: partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX) ends beyond disk end .

Partition(Linux ext2 filesystem): primary

Partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX): primary

Partition(Linux ext2 filesystem): primary

Partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX): invalid primary

Ok.

Guessed primary partition table:

Primary partition(1)

type: 131(0x83)(Linux ext2 filesystem)

size: 1200mb #s(2457880) s(63-2457942)

chs: (0/1/1)-(152/254/61)d (0/1/1)-(152/254/61)r

Primary partition(2)

type: 007(0x07)(OS/2 HPFS, NTFS, QNX or Advanced UNIX)

size: 1200mb #s(2457880) s(2457944-4915823)

chs: (152/254/63)-(305/253/60)d (152/254/63)-(305/253/60)r

Primary partition(3)

type: 131(0x83)(Linux ext2 filesystem)

size: 1004mb #s(2056256) s(4919781-6976036)

chs: (306/61/49)-(434/60/47)d (306/61/49)-(434/60/47)r

Primary partition(4)

type: 000(0x00)(unused) size: 0mb #s(0) s(0-0) chs: (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r

Как видно из примера, главный раздел можно восстановить, но с расширенным придется еще поработать.

DOS-разделы названы "Windows NTFS" потому, что они были созданы при попытке установки Windows 2000 (очень опасный эксперимент!). А тот раздел, который назван "invalid" - это на самом деле расширенный раздел.

После запуска gpart можно запустить обычный fdisk и попытаться снова воссоздать таблицу разделов (помните, что это неопасно, так как исходная таблица разделов уже потеряна).


Вариант для богатых

Partition Magic - это коммерческий продукт, не из дешевых, с точки зрения частоты применения (его цена примерно 100 долларов во Франции), но о нем очень хорошо отзываются. Однако, я никогда его не использовал и не буду его оценивать. Говорят, что он может что угодно делать с разделами, в том числе, и восстанавливать их. Однако, это утилиты для windows, и я не знаю, есть ли в нем DOS-часть. Если необходимо устанавливать Windows для использования Partition magic, то это не очень интересно.

Старый "Мини-HOWTO: Восстановление разделов" (автор Ralf) был почти полностью основан на применении Partition Magic, поэтому я предполагаю, что это хорошее решение, если у вас есть важные данные на Linux-разделе, а возможности вашего Linux малы. Однако, недавно появились свежие версии Partition Magic, и, я думаю, вам необходимо будет прочитать инструкции.


Авторы

Автор этого документа - Jean-Daniel Dodin. Со мной можно связаться по следующим адресам: jdanield@free.fr или at jdanield@linux-france.org или jdanield@club-internet.fr.

Мой веб-сайт (по состоянию на 20 января 2000 года) находится по адресу http://www.dodin.net Страницы, посвященные Linux, можно найти по адресу www.linux-france.fr/article/jdanield.

Я хочу поблагодарить Rolf Klausen (E-mail: rolfk@romsdal.vgs.no http://www2.romsdal.vgs.no/~rolfk/) за то, что написал предыдущую версию "Мини-HOWTO: Восстановление разделов", несмотря на то, что я ее почти полностью переписал. Идея, в любом случае, принадлежала ему.

Большое спасибо всем тем, кто вообще занимается написанием программ и документации к Linux. Самое большое спасибо Linus B. Thorvalds - он СОЗДАТЕЛЬ всего этого !!!

Большое спасибо Michail Brzitwa <mb@ichabod.han.de> за написание gpart !


Наиболее новая версия

Самую новую версию этого минги-HOWTO можно найти на моем Linux веб-сайте по адресу http://www.linux-france/article/jdanield/