Восстановление таблицы разделов жесткого диска linux

Обновлено: 06.07.2024

Окей, будем восстанавливать таблицу.
Если у Вас нет возможности запустить ОС на компьютере, с поврежденным винчестером, для начала, вам понадобится LiveCD (желательно с операционной системой Linux). Я делал это с помощью LiveCD Linux Ubuntu, поскольку под рукой не оказалось других LiveCD, но имея выбор, предпочел бы Linux Fedora Core.
Смысл LiveCD заключается в том, что на нем расположена операционная система, которой не требуется жестких дисков вообще, т.е. можно даже отключить винчестер и это не помешает загрузиться операционной системе, расположенной на LiveCD.
LiveCD доступны для бесплатного скачивания через интернет, их можно найти например так.

Окей, как бы там нибыло, ОС у нас загружена.
Теперь нам понадобится программа testdisk.
Эта программа умеет работать также под Windows, но все же надеюсь, что у вас загружена именно Linux и все дальнейшие рекомендации относятся именно к работе в Linux.
Для начала пробуем

В системах типа Debian, Ubuntu:

В системе Linux Gentoo:

Итак, программу установили.

Мучить многострадальный первый диск, восстановленный всего несколько часов назад, я не хочу. Поэтому, покажу на примере своего второго диска sdb, на котором находится (и всегда находился) лишь один раздел, что не очень подходит для нашего примера, к сожалению, но за неимением других вариантов подойдет и этот.
Запускаем:

Нам предлагают выбрать один из жестких дисков, для анализа. В моей системе их два, я выбираю sdb (второй), ну а если диск в системе один, то и выбирать не придется.
Выбирать можно стрелками вверх-вниз.
Стрелками влево-вправо, можно выбрать [ Proceed ] (продолжить), либо [ Quit ] (выход).
Выбираем [ Proceed ] , жмем Enter :

Теперь нам предлагают выбрать, одну из возможных опций. Прочитать подробнее, о данных опциях можно используя справочную информацию к команде, в стандартном же случае, нем вполне подойдет опция [ Analyse ], более того, очень не советую трогать другие опции, если вы не знаете точно, что делаете.
Выбираем [ Analyse ], жмем Enter :

Здесь команда снова предлагает опции на выбор, а также показывает текущие разделы винчестера. В текущий момент, как вы помните, на жестком диске существует только один раздел, о чем и сообщила программа.
Оставляем свой выбор на [ Proceed ] (для этого достаточно ничего не менять) и снова жмем Enter :

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

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

Итоги

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

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 — полный скан диска.

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

Если все ОК, то соглашаемся на запись в таблицу разделов, скрещиваем пальцы и перезагружаемся.
В моем случае, программа определила разделы, которые были до разбивки (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 установлена и можно перезагружаться.

В моем домашнем NAS внезапно отказал один из дисков. Это был единственный диск не в raid, данные на котором вроде как не важные (торренты, софт и т.д., все, что можно заново выкачать из инетрнета), поэтому диск не дублировался. Ничего критичного не произошло, но мне все равно стало жалко данные, поэтому я заменил диск, а этот отложил в сторонку, чтобы попытаться восстановить информацию. У меня это получилось, поэтому решил задокументировать результат, чтобы самому не забыть и с вами поделиться.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на . Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Введение

Симптомы поломки были следующие. Заметил, что пропал сетевой диск. Зашел на сервер и увидел, что диск не инициализирован. Таблица разделов пустая. При этом, диск работал нормально и SMART ошибок не показывал. Я сразу заподозрил, что проблема именно с таблицей разделов. Данные должны быть на месте.

Дополнительная важная информация - диск был в составе mdadm массива, состоящим из одного диска. LVM не использовался.

Я подключил сбойный диск в обычный системник. Сделал загрузочную флешку с Ubuntu Live CD и загрузился с нее. Настроил там сеть, стандартные репозитории.

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

Я давно знаю утилиту testdisk. С ее помощью мне уже удавалось восстанавливать данные в linux. Она есть в репозиториях ubuntu, так что я ее установил. Далее все было просто. К сожалению, скриншотов нет, так как делал все на отдельном системнике. Расскажу на словах, что сделал:

  1. Запустил утилиту. Она вывела список всех подключенных дисков. В моем случае диск был /dev/sda.
  2. Выбрал нужный диск, указал в выборе partition table types первый вариант - Intel.
  3. Запустил сканирование. Утилита нашла разделы, которые там были ранее. Я прикинул, вроде бы то, что и должно быть.
  4. Записал таблицу разделов на диск.

Далее через fdisk я увидел разделы диска sda, в том числе тот, что меня интересовал - Linux raid autodetect.

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

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

Восстановление mdadm массива

Установил в live систему mdadm:

Первым делом проверил суперблоки на восстановленном разделе:

Информация о mdadm массиве

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

mdadm: failed to add /dev/sda2 to /dev/md3: Invalid argument

Тут я приуныл, потому что не мог понять, в чем проблема. Пробовал разные команды для запуска массива, но он упорно не стартовал. При этом на вид все было в порядке. Потом в какой-то момент я додумался посмотреть dmesg.

md: sda2 does not have a valid v1.2 superblock, not importing!

Решение этой ошибки достаточно быстро нагуглилось.

mdadm --assemble --verbose /dev/md2 /dev/sda2 --update=devicesize

После этого массив нормально стартовал и cat /proc/mdstat показывал его состояние. Тут я думал, что мои мучения окончены и я сейчас получу свои данные. Но это тоже было еще не все.

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

Просто подмонтировать запущенный mdadm массив к системе не получилось.

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

К счастью, она нашла единственный раздел на диске и восстановила его. Таким образом у меня получилось устройство /dev/md2p1. Дальше я успешно смонтировал этот раздел в /mnt и получил доступ к данным. Они все были на месте.

В заключении я к этой же системе подмонтировал сетевой диск через cifs и начал копировать данные.

Заключение

Непонятной осталась причина сбоя, и это хуже всего. На вид все в порядке, но я теряю доступ к данным. Любой другой пользователь, не разбирающийся в linux, просто потерял бы данные, либо пришлось обращаться в специализированные фирмы по восстановлению информации, а это стоит дорого. И еще, как я понял, я точно так же мог потерять доступ и к массиву из нескольких дисков. К слову, потерпевший NAS это Synology, где под капотом обычный linux и mdadm, поэтому я понимал, как надо действовать. На этом же устройстве есть несколько массивов на много Tb и если бы кто-то из них сглючил, то было бы плохо.

Несколько моих статей по восстановлению загрузки linux после различных сбоев:

В некоторых случаях можно восстановить стандартными утилитами типа Easy recovery. Но практически ни одна из программ не поможет вам восстановить раздел linux.

Мы рассмотрим одну из самых мощнейших программ по восстановлению потерянных разделов- testdisk.

Testdisk – сканирует весь НЖМД, после чего выдаёт информацию о всех найденных разделах, после чего вы уже сможете сами определить какой раздел вам необходим для восстановления информации с жёсткого диска.

Главное правило – как только вы заметили что с разделом беда, не записывайте не форматируйте и не переустанавливайте систему, пока вы не начали делать каких-либо манипуляций с диском – вероятность восстановления очень высока. Удалена лишь некоторая информация из таблицы разделов диска, отвечающая за разделы.

Самый простой способ использования testdisk, это создание LIVE CD или загрузочной флешки.

Качаем образ SYSTEMRESCUECD, который уже содержит все необходимые утилиты для реанимации HDD.

После создания загрузочной флешки, перезагружаемся и грузимся с флешки.

Загрузочное меню SYSTEMRESCUECD

Загрузочное меню SYSTEMRESCUECD

Теперь нам понадобится программа testdisk. В командной строке выполним. Читаем справку по этой программе.

Если вы используете какой либой другой дистрибутив Linux, и у вас нет етой программы, необходимо установить TestDisk.

В системах Red Hat, CentOS, Fedora Core

В системах Debian, Ubuntu:

Запустим программу TestDisk, из командной строки:

Log файл TestDisk

Log файл TestDisk

Выбираем Create и жмём клавишу Enter:

выбор физического жёсткого диска

выбор физического жёсткого диска

  • Выбираем физический жёсткий диск, в нашем случае это /dev/sdb

Выбираем пункт Proceed, жмем клавишу Enter:

Выбор платформы

  • Выбираем платформу на которой стояла фаловая система.

Выбираем Intel жмем клавишу Enter:

Выбор опций программы TestDisk

Выбор опций программы TestDisk

  • Выбор опций программы TestDisk, используем крайне аккуратно, иначе останемся вообще с голым винтом.

Выбираем Analyse , жмем клавишу Enter:

TestDisk, выбор типа файловой системы.

TestDisk, выбор типа файловой системы.

  • TestDisk спрашивает у нас, какой тип файловой системы будем восстанавливать.

Оставляем выбор по умолчанию.

Выбираем Proceed, жмем клавишу Enter:

 раздел был создан в ОС Vista ?

раздел был создан в ОС Vista ?

список найденных разделов TestDisk.

список найденных разделов TestDisk.

  • После долгого анализа, Мы видим список найденных разделов.

Выбираем раздел (стрелками вверх/вниз) и жмём клавишу P, мы сможем посмотреть список файлов на найденом разделе.

Если нажать на клавишу Enter, вы начнёте процедуру сохранения новой таблицы разделов, после подтверждения, будет записана новая таблица разделов, и ранее удаленные или поврежденные разделы будут восстановлены.

Программа особо будет полезна тем кто убил свои разделы программой Partition Magick для Windows.

Читайте также: