Восстановление убитых MBR и таблицы разделов
Ситуация следующая. Есть винт на 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
Этот пост пример того, как на пустом месте можно создать себе проблему и полночи заниматься не тем, чем надо. Но это дало неоценимый опыт, который я постарался изложить здесь.
Возможно, кому-нибудь он пригодится. Ведь в такую ситуацию попасть очень не сложно, а детального мануала особо-то и нет.
How to recover lost partition in Linux
Partition tables define how your disks are divided into distinct partitions. Each partition must be formatted with a filesystem (e.g., ext4, exFAT, NTFS) before usage.
When a partition is deleted, only its entry in the partition table is removed, leaving the filesystem itself intact. By scanning the disk for existing filesystems and rebuilding the partition table based on the found filesystems, you can recover deleted or lost partitions.
In Linux, one such partition recovery application is TestDisk. To ensure successful partition recovery, use unmounted filesystems and a live Linux distribution or installer disk (e.g., Ubuntu).
Steps to recover lost or deleted partition for free using Linux:
For Ubuntu installer, click on the Try Ubuntu button.
If no Live CD mode available, press + + keys to get to the terminal.
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 1.9G 1 loop /rofs loop1 7:1 0 89.3M 1 loop /snap/core/6673 loop2 7:2 0 53.7M 1 loop /snap/core18/941 loop3 7:3 0 151M 1 loop /snap/gnome-3-28-1804/31 loop4 7:4 0 4M 1 loop /snap/gnome-calculator/406 loop5 7:5 0 14.8M 1 loop /snap/gnome-characters/254 loop6 7:6 0 1008K 1 loop /snap/gnome-logs/61 loop7 7:7 0 3.7M 1 loop /snap/gnome-system-monitor/77 loop8 7:8 0 35.3M 1 loop /snap/gtk-common-themes/1198 sda 8:0 0 20G 0 disk sr0 11:0 1 2G 0 rom /cdrom
$ sudo add-apt-repository universe 'universe' distribution component enabled for all sources. ##### snipped
$ sudo apt install --assume-yes testdisk Reading package lists. Done Building dependency tree Reading state information. Done The following NEW packages will be installed: testdisk 0 upgraded, 1 newly installed, 0 to remove and 316 not upgraded. Need to get 345 kB of archives. ##### snipped
Select No Log with the arrow keys and press [ENTER].
Choose the disk with the lost or deleted partition and press [ENTER] to proceed.
Select the disk’s partition table type and press [ENTER].
Press [ENTER] to start analysing the disk.
Press [ENTER] again to search for potential partitions on the chosen disk.
Select the found partition and press [ENTER] to continue.
Choose Write and press [ENTER] to update the partition table.
Press Y to confirm the partition table update.
Press [ENTER] on Ok to continue.
Select Quit and press [ENTER] to return to disk selection menu.
Select Quit and press [ENTER] to exit the program.
Verify that the partition table has been recovered.