Старый HDD больше не загружается, новый SSD заставляет BIOS зацикливаться на загрузке

0

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флаг, или почему установлен флаг bootand 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 я должен в конечном итоге с той же проблемой.)

Доктор Зойдберг
источник
Я не знаю, сможет ли GRUB 0.97 использовать раздел для этапа после MBR, но он должен, потому что обычно используемое пространство недоступно, потому что GPT занял его.
Йохан Мирен
Продолжая мой первый комментарий: GPT состоит из MBR (1 сектор), заголовка GPT (1 сектор), таблицы разделов (n секторов) и разделов. Обычно нет пропусков, поэтому следующий этап обычно записывается в выделенный раздел. Однако есть возможность создать пробел после заголовка GPT с помощью gdisk.
Йохан Мирен
Итак, на практике, что может пойти не так на этапе загрузки? Кажется, BIOS даже не выполняет MBR. Который я думал, будет прямо в режиме Legacy.
Доктор Зойдберг
Насколько я понимаю, вам действительно нужно место на диске, которое не используется файловой системой для хранения кода, который Grub 2 вызывает на этапе 1.5. Этот код понимает структуру файловых систем, что позволяет ему загружать этап 2 из /bootфайловой системы. MBR слишком мала, чтобы содержать драйвер файловой системы, поэтому вам действительно нужно найти место для следующего этапа, создавая разрыв между заголовком GPT и таблицей разделов или между таблицей разделов и первым разделом. Или создайте загрузочный раздел BIOS (который должен быть необработанным разделом, не содержащим файловую систему
FAT32
Благодарю. Как я могу сказать Grub, какое пространство использовать для этапа 1.5? Или, если найти это автоматически при звонке grub-install?
Доктор Зойдберг