[О блоге] [наверх] [пред] [2023-08-21 09:38:30+03:00] [bacf08f6a5cdd17e07b5ad14070c61674ed7be20]
Темы: [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
    
    *** kmeaw [2023-08-21 08:42]:
    >А работает ли на 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
    
    *** kmeaw [2023-08-21 08:52]:
    >Ещё вижу в 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.