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, я должен столкнуться с той же проблемой).