Sitrep:

Это ноутбук Asus Aspire V5 431. BIOS настроен на загрузку как устаревшая версия BIOS, а не UEFI. В нем есть (был) жесткий диск WD.

Я редко загружаю его (последний раз, как в августе, я думаю), но он всегда загружался нормально. Однако он решил собрать неделю назад (паника ядра), и мне пришлось его перезагрузить. Оказывается, все, что я получил, это пустой экран с курсором в верхнем левом углу. Я ожидал меню загрузки Grub. Жесткий диск имеет 1-й этап Grub 0,97 в MBR и GPT. Это макет раздела:

# fdisk -l /dev/sdb
Disk /dev/sdb: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 17E16B0D-9815-4A52-88A8-67DF03C9C6E0

Device        Start       End   Sectors   Size Type
/dev/sdb1      2048    526335    524288   256M Microsoft basic data
/dev/sdb2    526336  42469375  41943040    20G EFI System
/dev/sdb3  42469376  46663679   4194304     2G Linux swap
/dev/sdb4  46663680 976773119 930109440 443.5G Microsoft basic data

# parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p                                                                
Model: WDC WD50 00LPVT-22G33T0 (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  269MB   268MB   ext3               msftdata
 2      269MB   21.7GB  21.5GB  ext3               boot, esp
 3      21.7GB  23.9GB  2147MB  swsusp
 4      23.9GB  500GB   476GB   ext3               msftdata

Неважно, что это говорит, SDB вместо SDA, в настоящее время у меня это в док-станции USB на другом ноутбуке. Теперь sdb1 не использовался (должен был быть /boot, но никогда не монтировался), а sdb2 монтируется как / с каталогом /boot, содержащим Grub 0.97 (ОС - Fedora 14).

Согласно всем сайтам QA и учебным пособиям, эта настройка не должна была с самого начала работать, для загрузки BIOS в устаревшем режиме потребуется раздел с флагом legacy_boot . Тем не менее, я уверен, что ничего не изменилось в таблице разделов. Также я прочитал, что Grub может использовать неиспользуемые сектора между записями раздела GPT и первым разделом для core.img . Или Grub 0.97 фактически использует раздел для этапа 2 вместо core.img в фиксированном месте? Это имеет смысл, потому что есть /boot/grub/stage2 . Я почти уверен, что у меня никогда не было раздела legacy_boot , потому что он должен был быть fat32, и я на 100% никогда не создавал такую файловую систему на этом диске.

AFAIK, Grub сам по себе не заботится о флагах разделов. Я также не уверен, почему у них установлен флаг msftdata или почему установлены флаг boot и esp . Я на 100% уверен, что не установил их, когда разделил диск.

Итак, вопрос номер один: что мне не хватает здесь в этой настройке, чтобы он больше не загружался? Может ли старый BIOS загрузиться в GPT вообще? Я помню, что читал, что для некоторых глючных BIOS требуется активный раздел, т.е. в данном случае псевдораздел в MBR? Может ли это вызвать этот симптом пустого экрана? Я знаю, что в MBR-коде Grub существует бесконечный цикл. При каких обстоятельствах это то казнили?


Поскольку этот жесткий диск довольно старый, а твердотельные накопители дешевеют, я получил себе один. Я разбил его на ту же схему, что и выше (за исключением того, что последний раздел короче):

# fdisk -l /dev/sdc
Disk /dev/sdc: 223.6 GiB, 240057409536 bytes, 468862128 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 30BD5947-8BC3-4AFE-BC3C-14615E9AF60F

Device        Start       End   Sectors   Size Type
/dev/sdc1      2048    526335    524288   256M Linux filesystem
/dev/sdc2    526336  42469375  41943040    20G Linux filesystem
/dev/sdc3  42469376  46663679   4194304     2G Linux swap
/dev/sdc4  46663680 468862094 422198415 201.3G Linux filesystem
# parted /dev/sdc
GNU Parted 3.2
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p                                                                
Model: SanDisk SDSSDA240G (scsi)
Disk /dev/sdc: 240GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system     Name     Flags
 1      1049kB  269MB   268MB   ext3            primary
 2      269MB   21.7GB  21.5GB  ext3            primary
 3      21.7GB  23.9GB  2147MB  linux-swap(v1)  primary
 4      23.9GB  240GB   216GB   ext3            primary

(Опять же, sdc, потому что он сейчас находится в доке.)

Обратите внимание, что на этот раз у меня не установлены флаги (для Grub это не важно). Я скопировал все файлы, раздел за разделом, режимы сохранения, временные метки, владение и т.д. Я также создал одинаковые файловые системы, даже с теми же UUID. Затем я подключил sdc2 как /mnt /sdc2, подключил {dev, sys, proc} в /mnt /sdc2 /{dev, sys, proc}, сделал chroot в /mnt /sdb2 и выполнил

# /sbin/grub-install --root-directory=/ /dev/sdc
/dev/sdc does not have any corresponding BIOS drive.

(Обратите внимание, что он выполняет /sbin/grub-install на sdc2, а не на sda2, поскольку на хосте фактически установлен Grub 2.)

Поэтому я позволил Grub изменить device.map:

# /sbin/grub-install --recheck /dev/sdc
Probing devices to guess BIOS drives. This may take a long time.
The file /boot/grub/stage1 not read correctly.

Что означает это последнее предложение? /boot/grub/stage1 есть, но он не обновился (как и /boot/grub/stage2), но все файлы *stage1_5 сделали (хотя они имеют ту же md5sum, что и раньше). Я хотел бы предположить, что это либо копирует core.img , либо обновляет /boot/grub/stage2 , и записывает новый загрузочный сектор в MBR sdc (что я и сделал, я это подтвердил, хотя не совсем понятно, почему это должно быть отличается от одного в sdb (старый жесткий диск) в каждом отдельном байте в области сборки).

После этого я подключил его, и на этот раз BIOS просто войдет в цикл загрузки: Beep, логотип производителя BIOS с POST, подождите 2 секунды, перезагрузка, beeo, ... Сам BIOS все еще установлен в прежний режим загрузки BIOS, и он правильно идентифицирует SSD (SanDisk).

Вопрос номер два: что мне здесь не хватает? У меня сложилось впечатление, что grub-install будет достаточно, чтобы получить загрузочную MBR и правильно расположенный этап 2. Я ожидаю, что в случае проблем стадии 2 или любой проблемы в /boot, по крайней мере, появится сообщение об ошибке или что-то в этом роде. И если есть проблема в MBR, я вижу GRUB Geom Error или подобное.

(Побочный вопрос: я планирую, однако, использовать sdc1 (как sda1, как только он будет в своем положении) в качестве /boot, но core.img должен об этом не знать, верно? Т.е., если я делаю то же самое (grub-install и т.д. На sdc1, я должен столкнуться с той же проблемой).

0