Sony VAIO с BIOS Insyde H2O EFI не загружается в GRUB EFI

12

Я купил новый ноутбук серии Sony Vaio S. Он использует Insyde H2O BIOS EFI, и попытки установить на него Linux сводят меня с ума.

root@kubuntu:~# parted /dev/sda print
Model: ATA Hitachi HTS72756 (scsi)
Disk /dev/sda: 640GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End    Size    File system  Name                          Flags
 1      1049kB  274MB  273MB  fat32        EFI system partition          hidden
 2      274MB  20.8GB  20.6GB  ntfs        Basic data partition          hidden, diag
 3      20.8GB  21.1GB  273MB  fat32        EFI system partition          boot
 4      21.1GB  21.3GB  134MB                Microsoft reserved partition  msftres
 5      21.3GB  342GB  320GB  ntfs        Basic data partition
 6      342GB  358GB  16.1GB  ext4        Basic data partition
 7      358GB  374GB  16.1GB  ntfs        Basic data partition
 8      374GB  640GB  266GB  ntfs        Basic data partition

Что удивительно, так это то, что на диске 2 системных раздела EFI. Раздел sda2 - это раздел восстановления 20 ГБ, который загружает окна с базовым интерфейсом восстановления. Это доступно нажатием кнопки «ASSIST», в отличие от обычной кнопки питания. Я предполагаю, что системный раздел EFI (ESP) sda1 загружается в это восстановление.

В sda3 ESP есть более понятные записи для Microsoft Windows, которая фактически входит в Windows 7 (что подтверждается bcdedit.exe в Windows). Ubuntu установлен на sda6, и во время установки я выбрал sda3 в качестве загрузочного раздела. Установщик правильно создал приложение sda3 / EFI / ubuntu / grubx64.efi.

Настоящая проблема: для жизни я не могу установить его по умолчанию! Я попытался создать sda3 / startup.nsh, который называется grubx64.efi, но это не помогло - при перезагрузке система по-прежнему загружается в Windows. Я попытался использовать efibootmgr, и это показывает, как это работает:

root@kubuntu:~# efibootmgr 
BootCurrent: 0000
BootOrder: 0000,0001
Boot0000* EFI USB Device
Boot0001* Windows Boot Manager
root@kubuntu:~# efibootmgr --create --gpt --disk /dev/sda --part 3 --write-signature --label "GRUB2" --loader "\\EFI\\ubuntu\\grubx64.efi" 
BootCurrent: 0000
BootOrder: 0002,0000,0001
Boot0000* EFI USB Device
Boot0001* Windows Boot Manager
Boot0002* GRUB2
root@kubuntu:~# efibootmgr
BootCurrent: 0000
BootOrder: 0002,0000,0001
Boot0000* EFI USB Device
Boot0001* Windows Boot Manager
Boot0002* GRUB2

Однако при перезагрузке, как вы уже догадались, машина перезагрузилась обратно в Windows.

Единственное, о чем я могу думать:

  1. Раздел sda1 как-то используется
  2. Перезаписать /EFI/Boot/bootx64.efi и /EFI/Microsoft/Boot/bootmgfw.efi с помощью grubx64.efi [но это кажется действительно радикальным].

Может кто-нибудь, пожалуйста, помогите мне? Спасибо - любая помощь очень ценится, так как эта проблема сводит меня с ума!

Рохан Дхрува
источник
Я применил тот же подход к Sony Vaio S - заменив файл MS .efi на файл GRUB, сохранив копию MS .efi в другом каталоге, а затем загрузив его по цепочке для загрузки Windows. Как правило, это работает, но неприятным побочным эффектом является то, что я не могу вывести Windows из спящего режима - из-за ошибок загрузчика и требует чистой перезагрузки.

Ответы:

11

В конце концов я смог решить это. Я заменил EFI / Microsoft / boot / bootmgfw.efi на grub64.efi. Я переименовал первый в bootmgfw.efi.old и использовал grub, чтобы добавить опцию меню для цепной загрузки в него.

Это означает, что микропрограмма жестко запрограммирована для поиска загрузчика Microsoft Windows и не учитывает настройки efibootmgr или startup.nsh. Это действительно ужасно.

Я узнал, как работает процесс загрузки Sony EFI:

  1. Посмотрите в /EFI/Microsoft/Boot/fwbootmgr.efi; если есть, загрузите его.
  2. Посмотрите во всех подкаталогах / EFI / grubx64.efi. Если есть, загрузите его.
  3. Загрузка /EFI/Boot/bootx64.efi
  4. Отобразить сообщение об ошибке, например «Операционная система не найдена».

Под Linux инструмент efibootmgr работает, но он отображает много автоматически сгенерированной ерунды, включая последний использованный USB-накопитель.

Вот как я все это узнал:

  1. Я открыл свою новую машину и свернул раздел Windows, чтобы установить Linux и Mac рядом.
  2. Я установил Ubuntu 12.10 и установщик перезаписал fwbootmgr.efi, создав резервную копию старого загрузчика Windows.
  3. Я восстановил старый загрузчик Windows, но не смог загрузить ничего, кроме Windows.
  4. Я переименовал загрузчик Windows в нечто фальшивое, а затем Grub BL вступил во владение.
  5. Я переименовал каталог ubuntu во что-то другое, и Grub все еще загружался, хотя у меня была установка rEFInd.
  6. Единственный способ заставить меня сделать то, что я хотел, это:

  7. Переместите fwbootmgr.efi в родительский каталог; rEFInd все равно найдет его, и Windows не будет жаловаться, что вы переименовали его.

  8. Переименуйте grubx64.efi в rfgrubx64.efi или что-то еще узнаваемое.
  9. Скопируйте rEFInd из / EFI / refind в / EFI / boot, переименуйте /EFI/refind_x64.efi в * .bak и, наконец, переименуйте /Boot/refind_x64.efi в bootx64.efi. Теперь вы сможете загрузить Windows BL или GRUB из rEFInd. Я планирую обновить установку MacOS до Clover, а также загрузить Clover из rEFInd.

(Возможно, можно использовать Windows Boot Manager, чтобы сделать все это, но поддержка EFI в EeasyBCD по-прежнему мешает. Я отказываюсь снова к нему прикасаться.)

Рохан Дхрува
источник
Обратите внимание, что я также пытался изменить настройки BCD [с помощью bcdedit.exe] из Windows, чтобы в диспетчере загрузки Windows было установлено значение grub, но это все равно не сработало - мне пришлось фактически заменить файл .efi на файл .efi в grub. ,
Рохан Дхрува
5

Во-первых, у вас нет двух ESP. ESP - это раздел с кодом типа раздела C12A7328-F81F-11D2-BA4B-00A0C93EC93B, который parted идентифицирует как раздел с его установленным «флагом загрузки». Ваш вывод показывает, что только / dev / sda3 имеет свой «флаг загрузки», поэтому у вас есть только один ESP - / dev / sda3. В GPT разделы могут иметь имена, и у вас есть два раздела с именем «системный раздел EFI», но эти имена используются только для идентификации человека. Таким образом, я предполагаю, что вы (или какая-то автоматическая утилита) создали / dev / sda1 с намерением сделать его ESP, но либо произошла ошибка при установке кода типа его раздела, либо какая-то другая утилита неправильно изменила его код типа с C12A7328-F81F-11D2-BA4B-00A0C93EC93B на что-то другое.

Есть несколько способов исправить это. Самое простое - просто изменить имя / dev / sda1, чтобы избежать путаницы. Если вы считаете, что / dev / sda1 не имеет смысла, вы можете создать резервную копию и удалить ее. Это поможет избежать путаницы, но, конечно, у вас будет 273 МБ неиспользуемого дискового пространства. В качестве альтернативы вы можете выделить место для какой-либо другой цели, при необходимости изменив имя и код типа, чтобы избежать путаницы. EFI явно разрешает несколько ESP, так что вы можете изменить код типа (например, установив «флаг загрузки» с помощью parted) и использовать оба ESP; но это может сбить с толку.

Скорее всего, эта проблема не связана с вашей неспособностью загрузить Linux, поскольку похоже, что все соответствующие файлы находятся в / dev / sda3. Несколько возможных причин этой проблемы происходят со мной:

  • Возможно, вы что-то опечатали в команде efibootmgr. Я не вижу очевидных опечаток, но если двоичный файл GRUB не находится там, где вы указали, команда не будет работать. Опции «--gpt» и «--write-signature» почти наверняка не нужны, и, вероятно, могут вызывать проблемы, но, скорее всего, нет.
  • В вашей прошивке может быть ошибка, из-за которой эффекты команды efibootmgr будут временными. Попробуйте перезагрузиться, а затем введите «sudo efibootmgr -v», чтобы увидеть, сохранилась ли созданная вами запись после перезагрузки.
  • В вашей прошивке может быть ошибка, из-за которой переменная порядка загрузки игнорируется. У меня есть такая материнская плата; он загружается в порядке, в котором создаются загрузочные записи, а не в порядке, в котором они указаны в переменной BootOrder. Чтобы обойти эту ошибку, вам нужно будет удалить все записи и воссоздать их в порядке загрузки, который вы хотите использовать.
  • Ваш двоичный файл grubx64.efi может быть поврежден таким образом, что прошивка отказывается его запускать, и поэтому он переходит к следующему пункту в порядке загрузки.

Вы можете попробовать настроить команду efibootmgr, найти новый двоичный файл или еще что-нибудь, чтобы проверить эти возможности. Если ничего не помогает, я рекомендую вам сделать следующее:

  1. Удалите все загрузочные записи, используя efibootmgr или вашу прошивку (если она предоставляет интерфейс для этого).
  2. Скопируйте grubx64.efi в EFI / Boot / bootx64.efi на ESP.
  3. Если при перезагрузке вы все равно получаете Windows, переименуйте EFI / Microsoft / Boot / bootmgfw.efi в EFI / Microsoft / bootmgfw.efi.

Это должно привести к загрузке GRUB с использованием имени по умолчанию для загрузчика (EFI / Boot / bootx64.efi). Одна из проблем заключается в том, что GRUB может не иметь рабочей записи для Windows. Вы можете создать его вручную; такая запись должна работать:

menuentry "Windows 7" {
    set root='(hd0,gpt3)'
    chainloader /EFI/Microsoft/bootmgfw.efi
}

В качестве альтернативы вы можете установить rEFIt или rEFInd как EFI / Boot / bootx64.efi. Обратите внимание, что двоичные файлы rEFIt, доступные на его сайте, не будут работать на ПК на основе UEFI; вам нужно будет использовать версию в репозиториях Ubuntu. rEFInd - это ветка rEFIt с многочисленными исправлениями ошибок и обновлениями, включая лучшую поддержку UEFI. (REFIt, похоже, был заброшен около двух лет назад.) Таким образом, я рекомендую использовать REFInd, а не REFIt - но я поддерживаю REFInd, поэтому я не независимый наблюдатель на этот счет. К сожалению, AFAIK rEFInd (пока) не включен в репозитории Ubuntu, поэтому вам придется загрузить и установить его вручную.

Род Смит
источник
Большое спасибо, Род! Однако sda1 сам по себе является ESP [возможно, не загружаемым по умолчанию], который используется для загрузки в раздел восстановления (20 Гбит SONSYS). Я знаю, что это странная установка, но Sony почему-то решила сделать это таким образом. Нажатие кнопки «ASSIST», в отличие от кнопки питания, вызывает этот загрузчик.
Рохан Дхрува
Спасибо за информацию, Род, у меня была та же проблема, и после твоих шагов ее частично исправили. GRUB работал нормально, а затем я попытался добавить запись для Win7, и теперь GRUB не отображается, просто загружается прямо в Ubuntu. Есть идеи почему и как исправить? Также мой раздел EFI - sda1, а Win - sda3, если X в этой строке "set root = '(hd0, gptX)'" равен 1 или 3? Я пробовал оба!
barro32
@Rod, куда мне добавить пункт меню (Windows 7)? в \ etc \ default \ grub?
alekhine
4

Та же самая стартовая позиция здесь на новой серии Sony vaio e. Спасибо, Род, за твой ответ.

На случай, если кому-то понадобится прохождение, вот что сработало для меня:

Установил Ubuntu 12.04 с USB вместе с win7.

монтирование / dev / sda3 из live-сессии

  • скопируйте EFI / ubuntu / grubx64.efi в EFI / Boot /
  • переименуйте EFI / Boot / bootx64.efi в bootx64.efi.old
  • переименуйте EFI / Boot / grubx64.efi в bootx64.efi

теперь он загружается прямо в grub2, но без входа в win7

после загрузки убунту я отредактировал

/etc/grub.d/40_custom

добавление

menuentry "Windows 7" {
    set root='(hd0,gpt3)'
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

и после

sudo update-grub

все отлично работает

michote
источник
1

Я предлагаю две разные альтернативы:

  1. Не перезаписывайте windows mbr, а используйте его для запуска grub

  2. измените настройки BIOS ( f2или f3при запуске) в параметрах загрузки с UEFI на LEGACY, после чего обычно будет запускаться последняя установленная система, как всегда

Cardu
источник
MBR не применяется к компьютерам EFI
Бен Фойгт,
0
  1. Запустите Boot-Repair с liveCD / liveUSB
  2. Нажмите на Recommended Repairкнопку. (это автоматически установит правильные параметры для grub-efi, включая параметры SecureBoot, если необходимо, и переименование файлов EFI в случае, если прошивка UEFI заблокирована для файлов Windows). Укажите URL, который появится, если возникнут проблемы.

Boot-Repair

LovinBuntu
источник