Восстановление таблицы разделов, все еще присутствующей в запущенной системе

Hy, Я случайно переписал первый 1M моего жесткого диска на linux (используя dd). Итак, таблица разделов исчезла. Я все еще могу получить доступ ко всем разделам (кроме первого) с помощью /dev/sda2 (и так далее), поэтому данные все еще там. Мне нужны только границы раздела для восстановления таблицы. Как я могу это сделать? Ядро Linux должно все еще знать их, потому что все точки монтирования все еще работают. fdisk -l /dev/sda не работает, потому что он acctualy читает таблицу разделов.

спасибо!

4 ответа:

экстенты разделов можно прочитать из /sys/block/sda/sda1/start,/sys/block/sda/sda1/size и так далее. Значения находятся в секторах. запишите эти значения, прежде чем делать что-либо еще, особенно перезагрузки.

если у вас есть значения, вы можете воссоздать разделы fdisk. Используйте u команда для переключения устройства на секторы, а затем создать разделы вход

  • n
  • pпервобытные/logical/extended
  • номер раздела (кроме логических разделов: делайте их по порядку)
  • начальный участок
  • + размер в секторах

прошло почти два года с тех пор, как был задан этот вопрос. Вчера мы были в точно такой же ситуации: у нас есть Linux Software RAID Level 1 с 2 дисками. Один из дисков сломался и его пришлось заменить. Мы обменялись диском, а затем хотели скопировать таблицу разделов с оставшегося (рабочего) диска на новый диск. К сожалению, мы скопировали пустую таблицу разделов с нового диска на старый. К счастью, мы сразу обнаружили это перед перезагрузкой машина, поэтому правильная таблица разделов все еще была активна в ядре. Вот что мы сделали, чтобы решить эту проблему:

  • мы извлекли данные раздела из /sys/block/ файловая система, как описано в ответе Жиля.
  • наша система использует таблица разделов GUID, поэтому мы не могли использовать fdisk но пришлось использовать gdisk вместо.
  • gdisk работает почти так же, как fdisk кроме нет необходимости указывать u для сектора.
  • мы создали разделы с точно данные, извлеченные из /sys/block/. Есть и другие ответы на подобные вопросы, которые говорят, чтобы уменьшить размер раздела на один, но это не было необходимо для нас.
  • с таблицей разделов guid больше нет различия между основными и расширенными разделами.
  • на sys/block файловая система не содержит информации о типах файловых систем, поэтому мы добывали их с mount.
  • в таблице разделов guid больше нет загрузочного флага. Если таблица разделов для восстановления с загрузочного диска, там должен быть раздел типа BIOS boot partition (обычно первый раздел).

после записи таблицы разделов с gdisk, мы смогли перезагрузить систему, и все работало просто отлично.

лично я бы использовал testdisk, работающий с компакт-диска Trinity Rescue Kit. Это хорошо задокументировано. Однако я не знаю, как восстановить перезаписанную область этого первого раздела.

Trinity Rescue Kit CD

testdisk wiki и скачать

другие ответы, которые я чувствую, недостаточно всеобъемлющи и оставляют место для ошибки. Вот реальный рабочий пример восстановления с небольшой оговоркой, которую я нигде не видел. При взятии сектора start и size из /sys/block/ sda / * вы должны помнить, чтобы вычесть 1 из размера или вы будете 1 сектор выключен.

также помните, что в fdisk нажмите " u " для режима сектора.

вот пример, которому я успешно следовал: Шаг 1-найдите каталог устройств в /sys/block/sda /sda1 (измените /sda и / sda1 в соответствии с именем дискового устройства и номером раздела).

вы должны сделать кошку на "старт" и "размер", который представляет собой начальный сектор раздела и "размер" представляет, сколько секторов это.

возьмите значение размера и вычесть 1 из него или вы не получите оригинальный или правильный результат

fdisk/dev / sda

нажмите u, чтобы перейти к секторам, который является то, что /sys/block/sda идет на

/ sys / block/sda [[email protected] sda]# cat sda1 / start Две тысячи сорок восемь [[email protected] sda]# cat sda1 / size 1024000

[[email protected] sda]# cat sda2 / start Один миллион двадцать шесть тысяч сорок восемь [[email protected] sda]# cat sda2 / size 1464121344

Шаг 2-Используйте fdisk, чтобы взять вышеуказанную информацию сектора и ввести его (не забывая вычесть 1 из размера при сообщении fdisk конечного сектора)

"нажмите u", чтобы переключиться в режим сектора после запуска:

fdisk / dev / sda

команда (m для справки): n Командное действие e расширенный п первичный раздел (1-4) p Номер раздела (1-4): 1 Первый сектор (63-1465149167, по умолчанию 63): 2048 Последний сектор, + сектора или +размер{K,M,G} (2048-1465149167, по умолчанию 1465149167): + 1023999

команда (m для справки): n Командное действие e расширенный п первичный раздел (1-4) p Номер раздела (1-4): 2 Первый сектор (63-1465149167, по умолчанию 63): 1026048 Последний сектор, + сектора или + размер{K,M, G} (1026048-1465149167, по умолчанию 1465149167): + 1464121343

#

http://realtechtalk.com/Linux_How_To_Recover_Partition_Table_from_Kernel_and_Restore_CentosDebian_etc-1772-articles