Как сделать установку нового диска в десктоп незабываемой от полного непонимания, что вообще творится и на каком свете находишься? Надо всего лишь просочетать несколько факторов:
1. Если диск не упомянут в пункте "Hard drive BBS priorities" в настройке BIOS, то та его не отдаёт в I/O через int 13h. В результате GRUB не может его увидеть.
1б. Первым в списке стоял тот диск, с которого не загружаются ;(
2. Простых надёжных способов собрать grub.cfg под новые условия (смена корневого раздела) нет, а замена UUID редактором не позволяет подсказать, что надо было ещё добавить "insmod part_gpt" (на старом такого не было).
3. На диске с GPT но без "BIOS boot partition" GRUB ставит свой core.img урезанным и неверно работающим. Но чтобы понять, что не так, его родной документации не хватает, там связь замолчана.
4. Если GRUB не нашёл по указанным UUID и пути типа (hd1,msdos5) раздела со своими модулями и конфигами, он хватает первый попавшийся, который нашёл.
4б. При этом он ещё перезаписывает UUID в параметрах загрузки, чтобы совсем уже никто не догадался.
5. Спросить, по какому пути GRUB прошёл и прочитал свои конфиги, откуда грузил модули - невозможно.
6. На то, загрузит ли BIOS внешнюю флэшку, если она была вставлена до перезагрузки, влияет погода на Марсе. Если нет - пункт в boot menu есть, но молча игнорируется.
Таки взлетел. Выдыхаю:)
1. Если диск не упомянут в пункте "Hard drive BBS priorities" в настройке BIOS, то та его не отдаёт в I/O через int 13h. В результате GRUB не может его увидеть.
1б. Первым в списке стоял тот диск, с которого не загружаются ;(
2. Простых надёжных способов собрать grub.cfg под новые условия (смена корневого раздела) нет, а замена UUID редактором не позволяет подсказать, что надо было ещё добавить "insmod part_gpt" (на старом такого не было).
3. На диске с GPT но без "BIOS boot partition" GRUB ставит свой core.img урезанным и неверно работающим. Но чтобы понять, что не так, его родной документации не хватает, там связь замолчана.
4. Если GRUB не нашёл по указанным UUID и пути типа (hd1,msdos5) раздела со своими модулями и конфигами, он хватает первый попавшийся, который нашёл.
4б. При этом он ещё перезаписывает UUID в параметрах загрузки, чтобы совсем уже никто не догадался.
5. Спросить, по какому пути GRUB прошёл и прочитал свои конфиги, откуда грузил модули - невозможно.
6. На то, загрузит ли BIOS внешнюю флэшку, если она была вставлена до перезагрузки, влияет погода на Марсе. Если нет - пункт в boot menu есть, но молча игнорируется.
Таки взлетел. Выдыхаю:)
no subject
Date: 2022-01-09 08:52 am (UTC)Продублирую: UEFI 2.0 Specification, страницы 90-91:
> Two GUID Partition Table Header structures are stored on the device: the primary and the backup. The primary GUID Partition Table Header must be located in LBA 1 (i.e., the second logical block), and the backup GUID Partition Table Header must be located in the last LBA of the logical device.
Так что тут однозначно.
Единственное, что тут не сказано - что собственно блок-заголовок и таблица разделов должны размещаться вплотную друг к другу. Есть более мягкое требование:
> The primary GUID Partition Entry array must be located after the primary GUID Partition Table Header and end before the FirstUsableLBA. The backup GUID Partition Entry array must be located after the LastUsableLBA and end before the backup GUID Partition Table Header.
На стандартном 512-байтном блоке при обычной разметке primary header в 1, primary table в 2-33, FirstUsableLBA==34. Но никто не мешает в принципе сделать, например, primary table в 1000-1031 и поставить FirstUsableLBA==1032. Это резерв как раз для возможности вписать какой-то спец. загрузчик без явного раздела. Аналогично для backup таблицы можно пропустить место между самой таблицей и блоком заголовка.
Но на твой прямой вопрос такой же ответ - искать backup header надо строго в последнем блоке диска (раздела, если какая-то субструктура), иначе что-то нарушено.
И, повторюсь-2, код для поддержки этого влезает пусть даже в самом толстом варианте с перезаписью в несколько килобайт. С чтением - ещё не меньше. Ну если не влезет в 512 - извините, не сильно и предполагалось...