5

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

Спасибо!

4 ответа4

6

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

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

  • n
  • p rimary/l ogical/e Xtended
  • номер раздела (кроме логических разделов: делайте их по порядку)
  • начальный сектор
  • + размер в секторах
5

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

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

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

1

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

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

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

Вы должны сделать cat для «start» и «size», которые представляют начальный сектор раздела, а «size» представляет, сколько это секторов.

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

fdisk /dev /sda

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

/sys/block/sda [root @ server1 sda] # cat sda1/start 2048 [root @ server1 sda] # cat sda1/size 1024000

[root @ server1 sda] # cat sda2/start 1026048 [root @ server1 sda] # cat sda2/size 1464121344

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

"Нажмите u" для переключения в секторный режим после запуска:

fdisk /dev /sda

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

Команда (m для справки): n Действие команды e расширенный p основной раздел (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

1

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

Компакт-диск Trinity Rescue Kit

TestDisk вики и скачать

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .