Linux partition table repair

Fixing corrupt backup GPT table?

After successfully installing a dual boot environment, adding Ubuntu 13.10 to a preinstalled Windows 8 configuration I decided to increase the unallocated SSD disk space after reading about the benefits of over-provisioning. So, using miniTools Partition Wizard in Windows, I shrunk the NTFS Windows partition somewhat. That seem to have completed successfully. However, when I boot up Linux and launch GParted, it gives the following error message at startup:

Everything seems fine and dandy with the system, but I am worried that I will have a problem should the main GPT table become corrupt for some reason. I have used gdisk to backup the GPT table to a file, but is there a way to create a new backup GPT table?

I would NOT recommend using the MiniTool software (used over the years mostly successfully). I recently attempted to partition an SD Card with the software and wound up with a real annoying GPT Partition Table that needed major fixing (or 5-10 mins of Googling but annoying all the same). Stick with Linux if you can and use either gdisk or fdisk to create your partition table.

I fixed my disk using these commands: 1) $ sudo gdisk /dev/sda 2) Command (? for help): x 3) Expert command (? for help): e 4) Expert command (? for help): m (To return to the main menu) 5) Command (? for help): r 6) Recovery/transformation command (? for help): d 7) Expert command (? for help): m (To return to the main menu) 8) Command (? for help): w 9) Finally, reboot

4 Answers 4

Best to backup partition table first, just in case changes are not correct. Then it is possible to restore old partition table. If drive is sda & save to another drive:

sudo sfdisk -d /dev/sda > PT_sda.txt 

Use gdisk and verify partitions are correct with p , and use w to write the partition table. If not correct just use q to quit. That should update primary, backup & protective MBR.

sudo gdisk /dev/sda Command (? for help): 

b back up GPT data to a file
c change a partition’s name
d delete a partition
i show detailed information on a partition
l list known partition types
n add a new partition
o create a new empty GUID partition table (GPT)
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s sort partitions
t change a partition’s type code
v verify disk
w write table to disk and exit
x extra functionality (experts only)
? print this menu

Be sure to see comment below by Rod Smith, he is author of gdisk at his rodbooks site.

Читайте также:  Native api для linux

Источник

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

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

Если у вас есть желание научиться администрировать системы на базе Linux, рекомендую познакомиться с онлайн-курсом «Linux для начинающих» в OTUS. Курс для новичков, для тех, кто с Linux не знаком. Подробная информация.

Введение

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

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

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

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

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

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

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

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

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

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

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

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

# mdadm --misc --examine /dev/sda2

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

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

# mdadm --assemble --scan mdadm: failed to add /dev/sda2 to /dev/md3: Invalid argument mdadm: failed to RUN_ARRAY /dev/md3: Invalid argument

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

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

# dmesg | grep sda2 md: sda2 does not have a valid v1.2 superblock, not importing!

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

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

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

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

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

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

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

# mount -t ext4 /dev/md2 /mnt mount: /mnt: wrong fs type, bad option, bad superblock on /dev/md2, missing codepage or helper program, or other error.

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

Читайте также:  Долгая загрузка линукс минт

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

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

# mount -t cifs //192.168.15.50/data /mnt/data -o user=admin,password=adminpass

Заключение

В итоге у меня все получилось, но считаю, что просто повезло, так как любое неверное действие в восстановлении таблицы разделов могло привести к фатальным последствиям. Если вы будете восстанавливать реально важные данные, то обязательно сделайте посекторную копию носителя и работайте с ней. И внимательно смотрите на восстановленные разделы перед их записью. Если что-то пойдет не так, то восстановить данные будет в разы сложнее. Наверняка таблицу разделов придется править уже вручную, а для этого нужны хорошие знания. У меня, к примеру, их нет.

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

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

Надеюсь, вам они не пригодятся.

Онлайн курс по Linux

  • Умение строить отказоустойчивые кластера виртуализации для запуска современных сервисов, рассчитанных под высокую нагрузку.
  • Будете разбираться в современных технологиях кластеризации, оркестрации и виртуализации.
  • Научитесь выбирать технологии для построения отказоустойчивых систем под высокую нагрузку.
  • Практические навыки внедрения виртуализации KVM, oVirt, Xen.
  • Кластеризация сервисов на базе pacemaker,k8s, nomad и построение дисковых кластеров на базе ceph, glaster, linstore.

Источник

Оцените статью
Adblock
detector