У меня есть ноутбук HP 4530s, и я сменил оригинальный жесткий диск на 180 ГБ твердотельный накопитель Intel 335. Проблема в том, что я не могу загрузиться с него.

Я перенес свой openSUSE 12.3 x86_64 с жесткого диска через cpio, как упоминалось здесь:http://www.linuxjournal.com/magazine/hack-and-migrate-new-hard-drive

Я также переустановил GRUB с чем-то вроде:

    mount /dev/sda1 /mnt/
    mount --bind /dev/ /mnt/dev
    mount --bind /proc/ /mnt/proc
    mount --bind /sys/ /mnt/sys
    chroot /mnt/
    grub2-mkconfig
    grub2-install /dev/sda

Некоторые из них, должно быть, принесли пользу, потому что теперь я могу загрузиться с моего openSUSE Rescue CD, перейти к "загрузке с жесткого диска", и это работает. Но если я попытаюсь загрузиться прямо с SSD, HP BIOS любезно сообщит мне, что сначала я должен установить ОС там.

Я пробовал варианты одного и того же метода, такие как включение UEFI из BIOS и установка grub2-efi, но я сталкиваюсь с той же проблемой.

У меня такое странное чувство, что мне не хватает чего-то простого. Есть идеи для более "системного" подхода?

Заранее спасибо!

1 ответ1

1

В статье Linux Journal, на которую вы ссылались, пропущен один шаг, который может быть важен для некоторых компьютеров - когда вы разбиваете новый диск, используя формат таблицы разделов MS-DOS, вы должны пометить ровно один основной раздел на диске как активный. Этот шаг часто забывают без видимых проблем; однако на некоторых компьютерах BIOS выполняет более строгие проверки и отказывается загружаться с диска без активного раздела.

Способ пометить раздел как активный в Linux fdisk является использование команды; он запрашивает номер раздела и переключает активный флаг для этого раздела. Если вы распечатываете таблицу разделов с помощью команды a , активные разделы отмечаются символом p в столбце * .

Если на диске установлен только Linux, а загрузчик установлен в MBR, не имеет значения, какой основной раздел помечен как активный, если существует только один такой раздел.

Более подробно ниже, если вы заинтересованы:

(Все это применимо только при использовании формата таблицы разделов MS-DOS; ситуация с таблицей разделов GPT существенно отличается, особенно при использовании вместе с UEFI.)

Когда была представлена таблица разделов MS-DOS, MBR должен был содержать небольшой фрагмент кода, который осуществляет поиск по основным разделам (их может быть до 4), и, если ровно один раздел имеет установленный активный флаг, загружает первый сектор из этого раздела (загрузочный сектор) и передает управление коду оттуда, который затем должен загрузить ОС из этого раздела. Если активных разделов либо нет, либо имеется более одного раздела с установленным активным флагом, код MBR печатает сообщение и вызывает int $0x18 чтобы сообщить о сбое загрузки в BIOS.

Однако многие загрузчики, используемые для загрузки Linux, обычно устанавливаются в MBR и заменяют стандартный код MBR кодом, который загружает оставшуюся часть загрузчика и, например, предлагает меню загрузки. Этот код не использует активный флаг в таблице разделов, поэтому, например, GRUB, установленный в MBR, может запускать и загружать ядро Linux, даже если на диске нет активного раздела; Linux также никак не использует флаг активного раздела.

Многие версии BIOS проверяют только магическое число 0xaa55 в конце MBR и начальный код команды jmp чтобы определить, является ли MBR допустимым, и с радостью передадут управление коду в MBR независимо от содержимого таблицы разделов MS-DOS. Тем не менее, в некоторых случаях разработчики BIOS решают быть «более полезными» и добавляют дополнительные проверки к загрузочному коду - например, BIOS может посмотреть на таблицу разделов MS-DOS в MBR и считать диск не загрузочным, если есть там нет активного раздела. Эта проверка дает неправильные результаты, если MBR не содержит обычный код, который загружает загрузочный сектор из активного раздела, но разработчики BIOS, вероятно, не считают это проблемой. Если ваш компьютер имеет такой BIOS, у вас должен быть активный раздел на загрузочном диске, даже если активный флаг фактически не используется кодом в MBR и остальной части загрузчика.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .