Восстановление убитых MBR и таблицы разделов

*nix*

0. Intro.


Ситуация следующая. Есть винт на 160Гб. На нем 2 раздела — 40Гб и 120Гб. С целью установки убунты как второй системы была произведена разбивка 120Гб -> 100+10+2+8.

Далее, с целью отката изменений, были объединены диски (10, 2 и 8) обратно в один 20Гб и отформатирован в NTFS. В нагрузку к этому, были проведены операции с MBR, результатом которой явилась ее смерть.

Итоги

1. При загрузке системы выводится сообщение MBR helper not found;
2. fdisk показывает один большой 160Гб диск.

Дураку понятно, что это начало веселой ночи.
Далее, под катом, решения вопроса.

1. Восстановление таблицы разделов


1.1. Parted magic

Данный LiveCD\USB дистрибутив, размером в 100Мб несет в себе огромную кучу софта, для работы с дисками. От разбивки, до восстановления.
Из них всех, нам нужны будут gpart, testdisk, fdisk и ms-sys.

1.2. Gpart

gpart — это утилита, сканирующая по-секторно диск на наличие разделов, которые присутствуют на носителе, но отсутствуют в таблице. В своей работе, она игнорирует уже существующую таблицу (если присутствует). Программа разаботана немецким программистом Michail Brzitwa и больше им не поддерживается. Вялотекущая разработка ведется командами Fedora и Debian. Текущая версия — 0.1h.

Утилита позволяет наиболее быстро и легко восстановить таблицу разделов, но она несет в себе несколько недостатков. Во-первых, разработка была давно заброшена, во-вторых, она иногда не совсем корректно определяет разделы.

gpart может работать в 2-х режимах. Это быстрый анализ и подробное сканирование. В некоторых случаях, первого режима достаточно. Мы же будем смотреть на второй.

gpart -if /dev/sda

-i — интерактивный режим. На каждую найденную партицию будет задан вопрос, сохранять ее, либо пропустить.
-f — полный скан диска.

После, довольно продолжительного времени, будет создан отчет с возможными разделами. Его-то и нужно обязательно максимально внимательно просмотреть перед записью.
Пример отчета (не мой):

Begin scan...
Possible partition(DOS FAT), size(1907mb), offset(0mb)
Possible partition(SGI XFS filesystem), size(5730mb), offset(1907mb)
End scan.
Checking partitions...
Partition(DOS or Windows 95 with 32 bit FAT, LBA): primary
Partition(Linux ext2 filesystem): primary
Ok.
Guessed primary partition table:
Primary partition(1)
type: 012(0x0C)(DOS or Windows 95 with 32 bit FAT, LBA)
size: 1907mb #s(3906544) s(16-3906559)
chs: (0/1/1)-(1023/19/16)d (0/1/1)-(12207/19/16)r
Primary partition(2)
type: 131(0x83)(Linux ext2 filesystem)
size: 5730mb #s(11736000) s(3906560-15642559)
chs: (1023/19/16)-(1023/19/16)d (12208/0/1)-(48882/19/16)r
Primary partition(3)
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
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


Если все ОК, то соглашаемся на запись в таблицу разделов, скрещиваем пальцы и перезагружаемся.
В моем случае, программа определила разделы, которые были до разбивки (40 и 120), что не подходило и заставило искать альтернативные способы восстановления.

1.3. testdisk

Note: подробнее эта утилита описана в этом посте, здесь не буду повторяться.

Эта утилита аналогична предыдущей, но имеет ряд плюсов:
1. более свежая и активно поддерживается;
2. субъективно, работает намного быстрее;
3. функциональнее;
4. есть простой консольный интерфейс на базе ncurses.

Поехали!
1. в первом окне выбираем Create a new log file;
2. выбираем нужный диск (/dev/sda) -> Proceed;
3. отмечаем тип разделов как Intel;
4. выбираем Analyse current partition structure and search for lost partitions;
5. если найденные разделы верны, жмем Backup и переходим к пункту 6, есть возможность быстро пересканировать диск, если где-то ошибка (Quick search);
6. здесь уже виден зеленый список с разделами. Если ок, то записываем, иначе запускаем Deep search.;

В моем случае, результат был аналогичен результату gpart, что есть некорректен.
Запустив Deep search, выждав около 40 минут я получил ответ, от которого на душе так нехило отлегло.
Было найдено несколько партиций, которые накладывались одна на другую (это были изначальная (до манипуляций) 120Гб и новая, на 100Гб). Отметив ненужную, как удаленную, я записал таблицу на диск и перезагрузился. К счастью, все обошлось и компьютер вернулся к состоянию, который был изначально, а я мог с чистой совестью лечь спать.

3. Восстановление MBR


Для этой задачи, у нас в арсенале есть тулза ms-sys.
Сперва узнаем, что с нашей MBR.

ms-sys /dev/sda
/dev/sda has an x86 boot sector
it is unknown boot sector

Теперь видно, что на данном диске нет загрузочного сектора.
Утилита может работать с MBR различных операционных систем. Список можно получить, запустив программу без агрументов. В моем случае, необходим был от Windows 7.
Записываем MBR на диск:

ms-sys -7 /dev/sda
Windows 7 master boot record successfully written to /dev/sda

Проверяем:

ms-sys /dev/sda
it is Microsof 7 master boot record, like the one this
program creates with the switch -7 on a hard disk device.

Вот и все, нужная MBR установлена и можно перезагружаться.

3. Outro


Этот пост пример того, как на пустом месте можно создать себе проблему и полночи заниматься не тем, чем надо. Но это дало неоценимый опыт, который я постарался изложить здесь.
Возможно, кому-нибудь он пригодится. Ведь в такую ситуацию попасть очень не сложно, а детального мануала особо-то и нет.
+65
17 апреля 2011, 18:39
184
mariner 38,9

комментарии (35)

+5
BOOTor #
Это все, конечно, хорошо и полезно, но напрашивается очевидный вопрос: какого черта в 3 часа ночи проводить непонятные манипуляции с MBR? Все ж можно делать просто и безопасно соответствующими утилитами. И, кстати, неплохо было бы вначале статьи указать, что именно производилось с MBR…
–2
tehdeel #
а загрузиться с диска win7 и из консоли
bootrec.exe /fixmbr
не пробовал?
+6
Obramko #
У человека разделы потеряны, зачем ему бут возвращать?
0
Lico #
Это решение третьего пункта
+3
Iliander #
Но использованы все утилиты с одного диска и это сработало. К чему ещё эти диджейские манипуляции с болванками?
0
nqhost #
Дело было вечером, делать было нечего? :-)
+17
Tqb #
Знакомо-знакомо!
Мысли наивного гика в вакууме: «Ща вот ещё чуть повожусь, всю настрою и пойду спать! %-)»
Через 15 минут всё падает, нихрена не работает и гик эти сутки уже не спит.
0
Dare #
Немного оффтоп, но все же:
А есть ли в Parted magic утилита аналогичная виндовой chkdsk. Или вообще в линукс дистрах аналогичное приложение.

Не первый раз случается когда под рукой была лишь флешка с записанным livecd линуксом, а проблема упавших окон решается chkdsk (приходилось бегать искать диск м$)
+1
sht0rm #
пакет ntfsprogs. Утилита ntfsfix
0
Tqb #
Винда же сама умеет запускать чекдиск при загрузке… Или тут какой-то экзотический случай?
0
sht0rm #
Не очень то и экзотический.
Обычно BSOD с надписью
Not mountable boot volume.
0
tmp0000 #
Умеет, но далеко не всегда ей это удается.
0
NickLion #
Как-то винде не понравились разделы. И при изменении размера одного из разделов, она решила, что остальные (линуксовые) не стоят её внимания и… объединила их в один. Данные были важны, очень. gpart не помог, к сожалению. Спасло то, что тома имели метки. Так что dd, hexdump и grep спасли. Определил начала томов, а затем было чисто дело техники и fdisk. Но с тех пор перед серьёзными делами с разделами сохраняю вывод fdisk куда-нибудь на флешку.
0
diamant #
Бэкапить, бэкапить и ещё раз бэкапить! (с) Кто-то из умных.
0
Zevaka #
Бэкапить, бэкапить и ещё раз бэкапить! (с) Любой из умных
+2
NickLion #
Люди делятся на 2 типа: тех, кто не бэкапят, и тех, кто уже бэкапят © кто-то
0
HomoErectus #
Именно поэтому предпочитаю раздельные физические диски для ОС и своих файлов. На крайний случай внешний клон данных.
0
WiseLord #
На всякий пожарный полезно иметь где-нибудь на флешке файл с бэкапом mbr: всего 512 байт, и проблема бы решилась гораздо быстрее.
А так да, testdisk в таких вещах незаменим. Помнится, у товарища на 1Тб винчестере по ошибке была снесена таблица разделов (несколько linux-партиций, основная в ext4) и создан и отформатирован в FAT32 один раздел на весь винчестер (тупо на автомате были перепутаны /dev/sdb винчестер и /dev/sdс — флешка, которую и собирались форматировать). И ничего, testdisk нашёл разделы, как они были до этого катаклизма, он же нашёл резервные суперблоки на затёртом FAT-ом ext4-разделе, и fsck.ext4 по адресу одного из суперблоков восстановил все данные на, казалось бы, чистом ext4 разделе — ничего не потерялось.
+1
Garrett #
Для себя правило выработал, никаких операций с системой и железом после 8 вечера.
По крайнеq мере с воскресенья по четверг.
0
DimonCJ #
Господа не подскажите ли аналог утилиты scandisk/chkdisk под Linux для NTFS? А то виндовая виснет на определенном месте и дальше не идет
0
WiseLord #
ntfsfix же из sys-fs/ntfsprogs. Хотя в тяжёлых случаях оно пасует, и предлагает попробовать использовать виндовый chkdisk.
0
bigbes #
в тяжелых? да почти во всех.
+1
Obramko #
Кстати, если хочется чего-нибудь поломать, могу порекомендовать сделать гибридный MBR. Нужен, например, чтобы установить Windows на GPT-диск в BIOS-системе.
Несколько часов экстрима обеспечено :).
0
YaakovTooth #
Пост можно было закончить на пункте 1.1. :)))
0
mariner #
главное не иметь инструмент, а уметь им пользоваться ;)
0
YaakovTooth #
Я неправильно написал. Я не к тому, что все знают что делать дальше, но мне стало уже очень хорошо от такой сборки. :))
0
mariner #
да, сборка что надо! прям швейцарский нож ;)
0
YaakovTooth #
Джентельменский набор просто.

FFS умеет? Как раз сейчас привезли на восстановление терабайтник.
0
mariner #
смотря что есть FFS.
0
YaakovTooth #
Фря-фря. Восьмая.
0
mariner #
думаю да. софт тот же. тока напильк, скорее всего понадобится.
–1
ctrlok #
загрузить винду в рекавери и написать fixmbr вроде проще было бы.
0
bigiggy #
Проще, но бывает так, что диска с Windows 7 нет.
0
hx0 #
Фигня это всё. Вот если что-то действительно слетит, тогда это не поможет и придётся mbr вручную править.
А ещё подарком будет то, что gpart и другие утилиты пятилетней давности с удивлением смотрят на ext4 и подобные новшества.
0
mariner #
testdisk, например, с умилением и радостью смотрит на ext4 ;)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.