Битый GPT не вывести

Что: bacf08f6a5cdd17e07b5ad14070c61674ed7be20

Когда: 2023-08-21 09:38:30+03:00

Темы: bsd hate

Битый GPT не вывести

Нужно было ужать образ жёсткого диска. Сделал resize раздела, поменял
его размер. В конце остаётся много пустого места. Если скопировать такой
образ простой dd, то FreeBSD не хочет показывать и загружать таблицу
разделов, выводя в dmesg что GPT вообще плох плох и никакой recovery вам
не поможет.

Если переносить образ на диск большего размера -- то в dmesg будет
предупреждение что второй GPT не находится в конце диска, но это чинится
одной командой. А тут первый GPT указывает на LBA выходящего за пределы
диска. Всякие kern.geom.part.check_integrity не помогают. Хотя я ведь
точно знаю что первый GPT исправен и просто нужно сделать его копию и
поправить её адрес.

Имея на руках оригинальный диск, можно сделать gpart backup, который
выведет в простом текстовом формате разметку, а дальше gpart recover-ом
записать её на уменьшенный диск. Но вот backup берёт информацию из
GEOM-а, который на маленьком диске отказывается подгружать информацию о
разделах и поэтому backup не сработает.

И вот не нашёл вообще никаких средств в самой ОС чтобы заставить
показать хоть в каком-нибудь виде информацию о GPT разделах, чтобы хотя
бы вручную восстановить этот backup файлик и с него уже валидный GPT
записать. То есть мне просто нужно нечто, что могло бы прочитать 32
сектора диска в начале, интерпретировало

оставить комментарий

комментарий 0:

From: kmeaw
Date: 2023-08-21 07:47:10Z

А работает ли на FreeBSD gdisk (он же GPT fdisk,
https://www.rodsbooks.com/gdisk/)? Может быть им будет проще сделать
задуманное, чем gpart? Там есть --backup и --load-backup, которые читают
GPT сами, без использования информации от ядра.

комментарий 1:

From: Sergey Matveev
Date: 2023-08-21 07:51:51Z


>А работает ли на FreeBSD gdisk

Блин, забыл об этом дописать, поторопился. Да, именно его из портов
поставил и всё как и хотел: предупреждает о битом GPT, но позволяет
вывести разделы которые смог отпарсить, что достаточно для
восстановления.

комментарий 2:

From: kmeaw
Date: 2023-08-21 07:57:12Z

Ещё вижу в man 8 gpt:

gpt [-Hnqrv] [-m mediasize] [-s sectorsize] [-T timestamp] command
   [command_options] device

gpt resizedisk [-s size] [-q]
   The resizedisk command allows the user to resize a disk.
…
   If the backup copy no longer exists due
   to the medium shrinking, then a new backup copy will be created
   using the primary copy.

   The -s option allows the new size to be specified, otherwise the
   partition will be increased to the maximum available size.

Что будет, если попробовать gpt -m $SIZE resizedisk или
gpt resizedisk -s $SIZE ?

комментарий 3:

From: Sergey Matveev
Date: 2023-08-21 08:02:27Z


>Ещё вижу в man 8 gpt:

А у меня такого man/команды нет. Судя по всему, это какая-то очень
старая команда, которая в NetBSD ещё есть, а в FreeBSD была давным
давно, только когда начинали поддерживать GPT.

А gpart явно говорит что только destroy и recover может выполнить с битым GPT:

     When the kernel detects
     corrupt metadata, it marks this table as corrupt and reports the problem.
     destroy and recover are the only operations allowed on corrupt tables.

Сгенерирован: SGBlog 0.34.0