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 вместо a core.img
в фиксированном месте ? Это имело бы смысл, потому что есть /boot/grub/stage2
. Я почти уверен, что у меня никогда не было legacy_boot
раздела, потому что он должен был быть fat32, и я на 100% никогда не создавал такую файловую систему на этом диске.
AFAIK, самому Grub наплевать на флаги разделов. Я также не уверен, почему у них установлен msftdata
флаг, или почему установлен флаг boot
and 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 (старый HDD) в каждом отдельном байте в области сборки).
После этого я подключил его, и на этот раз BIOS просто войдет в цикл загрузки: звуковой сигнал, логотип производителя 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 я должен в конечном итоге с той же проблемой.)
источник
/boot
файловой системы. MBR слишком мала, чтобы содержать драйвер файловой системы, поэтому вам действительно нужно найти место для следующего этапа, создавая разрыв между заголовком GPT и таблицей разделов или между таблицей разделов и первым разделом. Или создайте загрузочный раздел BIOS (который должен быть необработанным разделом, не содержащим файловую системуgrub-install
?