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

10

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

[email protected]:~# 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», а не обычной кнопкой питания. Я предполагаю, что системный раздел sda1 EFI (ESP) загружается в это восстановление.

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

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

[email protected]:~# efibootmgr 
BootCurrent: 0000
BootOrder: 0000,0001
Boot0000* EFI USB Device
Boot0001* Windows Boot Manager
[email protected]:~# 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
[email protected]:~# 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 [но это кажется действительно радикальным].

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

задан Rohan Dhruva 13.06.2012 в 03:59
источник

5 ответов

8

В конце концов я смог решить это. Я заменил 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. Единственный способ, которым я мог бы сделать rEFInd, делать то, что я хотел, это:

  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, чтобы сделать все это, но поддержка EFI EeeasyBCD по-прежнему беспорядок в моем опыте. Я отказываюсь прикоснуться к ней снова на некоторое время.)

    
ответ дан Rohan Dhruva 14.06.2012 в 04:36
источник
5

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

Существует несколько способов исправить это. Самое простое - просто изменить имя / dev / sda1, чтобы избежать путаницы. Если вы считаете, что / dev / sda1 не имеет никакой цели, вы можете создать резервную копию и удалить ее. Это избавит вас от пути и позволит избежать путаницы, но, конечно же, у вас будет 273 МБ неиспользуемого дискового пространства. Кроме того, вы можете посвятить пространство другим целям, при необходимости изменив имя и тип кода, чтобы избежать путаницы. EFI явно разрешает несколько ESP, поэтому вы можете изменить код типа (например, установив флаг загрузки, используя разделенные, и использовать оба 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, поэтому вам придется загружать и устанавливать его вручную.

    
ответ дан Rod Smith 13.06.2012 в 17:24
4

То же самое исходное положение здесь, в новой серии sony vaio e. Спасибо Rod за ваш ответ.

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

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

монтаж / dev / sda3 из живого сеанса

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

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

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

/etc/grub.d/40_custom

добавление

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

и после

sudo update-grub

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

    
ответ дан michote 28.06.2012 в 09:07
1

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

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

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

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

    
ответ дан LovinBuntu 28.11.2012 в 08:08