Sony VAIO พร้อมไบออส 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

สิ่งที่น่าประหลาดใจคือมีพาร์ติชั่นระบบ EFI 2 ตัวบนดิสก์ พาร์ทิชัน sda2 เป็นพาร์ติชั่นการกู้คืน 20GB ซึ่งโหลดหน้าต่างด้วยอินเตอร์เฟสการกู้คืนพื้นฐาน สามารถเข้าถึงได้โดยกดปุ่ม "ASSIST" ตรงข้ามกับปุ่มเปิดปิดปกติ ฉันคิดว่า sda1 EFI System Partition (ESP) จะโหลดเข้าสู่การกู้คืนนี้

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 ต่อจากโหมดไฮเบอร์เนต - ข้อผิดพลาด bootloader ของมันออกมาและต้องรีบูตใหม่ทั้งหมด

คำตอบ:


11

ในที่สุดฉันก็สามารถแก้ปัญหานี้ได้ ฉันแทนที่ EFI / Microsoft / boot / bootmgfw.efi ด้วย grub64.efi ฉันเปลี่ยนชื่อเดิมเป็น bootmgfw.efi.old และใช้ด้วงเพื่อเพิ่มตัวเลือกเมนูเพื่อ chainload เข้าไป

นี่หมายความว่าเฟิร์มแวร์นั้นเป็นฮาร์ดโค้ดที่จะมองหา microsoft windows bootloader และไม่เคารพการตั้งค่า efibootmgr หรือ startup.nsh มันแย่มากจริงๆ

ฉันพบว่ากระบวนการบูตของ Sony EFI ทำงานอย่างไร:

  1. ดูใน /EFI/Microsoft/Boot/fwbootmgr.efi; หากมีให้บู๊ต
  2. ค้นหาในไดเรกทอรีย่อยทั้งหมดของ / EFI / สำหรับ grubx64.efi หากมีอยู่ให้บูต
  3. Boot /EFI/Boot/bootx64.efi
  4. แสดงข้อความแสดงข้อผิดพลาดเช่น "ไม่พบระบบปฏิบัติการ"

ภายใต้ Linux เครื่องมือ efibootmgr ทำงานได้ แต่มันแสดงเรื่องไร้สาระที่สร้างโดยอัตโนมัติจำนวนมากรวมถึงไดรฟ์ USB ล่าสุดที่คุณใช้

นี่คือวิธีที่ฉันเรียนรู้สิ่งนี้ทั้งหมด:

  1. ฉันเปิดเครื่องใหม่และยุบพาร์ติชั่น Windows เพื่อติดตั้ง Linux และ Mac เคียงข้างกัน
  2. ฉันติดตั้ง Ubuntu 12.10 และตัวติดตั้งเขียนทับ fwbootmgr.efi สำรองข้อมูล bootloader Windows ตัวเก่า
  3. ฉันกู้คืน bootloader ของ Windows ตัวเก่า แต่ไม่สามารถบู๊ตได้ยกเว้น Windows
  4. ฉันเปลี่ยนชื่อ bootloader ของ 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 ของ EeasyBCD ยังคงยุ่งเหยิงในประสบการณ์ของฉันฉันปฏิเสธที่จะสัมผัสอีกครั้งในขณะนี้)


โปรดทราบว่าฉันได้ลองปรับเปลี่ยนการตั้งค่า BCD [โดยใช้ bcdedit.exe] จาก Windows เพื่อให้ตัวจัดการการบูตระบบ Windows ตั้งค่าเป็นด้วงและยังคงใช้งานไม่ได้ - ฉันต้องแทนที่ไฟล์. esi จริงด้วย grub's .efi .
Rohan Dhruva

5

ก่อนอื่นคุณไม่มี ESP สองอัน ESP คือพาร์ติชันที่มีรหัสประเภทพาร์ติชันของ C12A7328-F81F-11D2-BA4B-00A0C93EC93B ซึ่งแยกส่วนนั้นระบุว่าเป็นพาร์ติชันที่มีชุด "บู๊ตบูต" เอาต์พุตของคุณระบุว่า / dev / sda3 เท่านั้นมีการตั้งค่า "boot flag" ดังนั้นคุณจึงมี ESP - / dev / sda3 เพียงชุดเดียว ภายใต้ GPT พาร์ติชันสามารถมีชื่อและคุณมีสองพาร์ติชันที่มีชื่อ "พาร์ติชันระบบ EFI" แต่ชื่อเหล่านี้ใช้เพื่อจุดประสงค์ในการระบุตัวบุคคลเท่านั้น ดังนั้นฉันเดาว่าคุณ (หรือยูทิลิตี้อัตโนมัติ) สร้าง / dev / sda1 ด้วยความตั้งใจที่จะทำให้มันเป็น ESP แต่อาจมีข้อผิดพลาดในการตั้งรหัสประเภทพาร์ติชันหรือยูทิลิตี้อื่น ๆ เปลี่ยนรหัสประเภทของมันไม่เหมาะสม C12A7328-F81F-11D2-BA4B-00A0C93EC93B เป็นอย่างอื่น

มีหลายวิธีที่คุณสามารถแก้ไขได้ วิธีที่ง่ายที่สุดคือเปลี่ยนชื่อ / dev / sda1 เพื่อหลีกเลี่ยงความสับสน หากคุณคิดว่า / dev / sda1 ไม่มีจุดประสงค์คุณสามารถสำรองข้อมูลและลบทิ้งได้ สิ่งนี้จะทำให้มันออกนอกเส้นทางและหลีกเลี่ยงความสับสน แต่แน่นอนว่าคุณจะมีพื้นที่ดิสก์ที่ไม่ได้ใช้งาน 273 MB หรือคุณสามารถอุทิศพื้นที่เพื่อวัตถุประสงค์อื่นหากจำเป็นต้องเปลี่ยนชื่อและรหัสประเภทเพื่อหลีกเลี่ยงความสับสน EFI อนุญาตให้มีหลาย ESP ได้อย่างชัดเจนดังนั้นคุณสามารถเปลี่ยนรหัสประเภท (โดยการตั้งค่า "boot flag" โดยใช้การแยกส่วน) และใช้ ESPs ทั้งสอง แต่นี่อาจทำให้สับสน

มีแนวโน้มว่าปัญหานี้ไม่เกี่ยวข้องกับการที่คุณไม่สามารถบูต 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
}

หรือคุณสามารถติดตั้งอานิสงส์หรือrefindเป็น EFI / boot / bootx64.efi โปรดทราบว่า rEFIt ไบนารีที่มีอยู่จากเว็บไซต์ของมันจะไม่ทำงานบนพีซีที่ใช้ UEFI คุณจะต้องใช้เวอร์ชันในที่เก็บ Ubuntu rEFInd เป็นส่วนหนึ่งของ rEFIt ที่มีการแก้ไขข้อผิดพลาดและการปรับปรุงมากมายรวมถึงการสนับสนุน UEFI ที่ดีขึ้น (rEF ดูเหมือนว่าจะถูกทิ้งไว้เมื่อประมาณสองปีที่แล้ว) ดังนั้นฉันแนะนำให้ใช้ rEFInd มากกว่า rEFIt - แต่ฉันเป็นผู้ดูแลของ rEFInd ดังนั้นฉันจึงไม่ใช่ผู้สังเกตการณ์อิสระในคะแนนนี้ น่าเสียดายที่ AFAIK rEFInd ยังไม่รวมอยู่ในที่เก็บของ Ubuntu ดังนั้นคุณจะต้องดาวน์โหลดและติดตั้งด้วยตนเอง


ขอบคุณมาก ๆ Rod! อย่างไรก็ตาม sda1 นั้นอยู่ในตัวของมันเอง ESP [อาจจะไม่สามารถบู๊ตได้ตามค่าเริ่มต้น] ซึ่งจะถูกใช้เพื่อบูตเข้าสู่พาร์ทิชันช่วยเหลือ (20Gb SONSYS) ฉันรู้ว่ามันเป็นเซ็ตแปลก ๆ แต่ Sony เลือกที่จะทำแบบนั้นด้วยเหตุผลบางอย่าง การกดปุ่ม "ASSIST" ตรงข้ามกับปุ่มเปิด / ปิดเครื่องจะเรียก bootloader นั้น
Rohan Dhruva

ขอบคุณสำหรับ Rod ข้อมูลที่ฉันมีปัญหาเดียวกันและทำตามขั้นตอนของคุณแก้ไขได้บางส่วน GRUB ทำงานได้ดีจากนั้นฉันพยายามเพิ่มรายการสำหรับ Win7 และตอนนี้ GRUB ไม่แสดงเพียงบูทตรงไปยัง Ubuntu ความคิดใด ๆ ว่าทำไมและวิธีการแก้ไข? นอกจากนี้พาร์ติชัน EFI ของฉันคือ sda1 และ Win คือ sda3 ควร X ในบรรทัดนี้ "set root = '(hd0, gptX)'" เท่ากับ 1 หรือ 3 ฉันลองทั้งคู่แล้ว!
barro32

@Rod ฉันควรเพิ่ม menuentry (Windows 7) ที่ไหน ใน \ etc \ default \ grub?
alekhine

4

ตำแหน่งเริ่มต้นเหมือนกันที่นี่ใน sony vaio e series ใหม่ ขอบคุณ 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 entry

หลังจากโหลดอูบุนตูฉันแก้ไข

/etc/grub.d/40_custom

เพิ่ม

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

และหลังจากนั้น

sudo update-grub

ทุกอย่างทำงานได้ดี


1

ฉันแนะนำสองทางเลือกที่แตกต่างกัน:

  1. อย่าเขียนทับหน้าต่าง mbr แต่ใช้มันเพื่อเปิดด้วง

  2. เปลี่ยนการตั้งค่าไบออส ( f2หรือf3เมื่อเริ่มต้น) ในตัวเลือกการบูตจาก UEFI เป็น LEGACY จากนั้นจะเปิดใช้งานระบบล่าสุดที่ติดตั้งเช่นเคย


MBR ไม่สามารถใช้ได้กับคอมพิวเตอร์ EFI
Ben Voigt

0
  1. เรียกใช้Boot-Repairจาก liveCD / liveUSB
  2. คลิกที่Recommended Repairปุ่ม (สิ่งนี้จะติดตั้งพารามิเตอร์ที่ถูกต้องโดยอัตโนมัติสำหรับ grub-efi รวมถึงพารามิเตอร์ SecureBoot หากจำเป็นและเปลี่ยนชื่อไฟล์ EFI ในกรณีที่เฟิร์มแวร์ UEFI ถูกล็อคเป็นไฟล์ Windows) ระบุ URL ที่จะปรากฏขึ้นหากมีปัญหาใด ๆ

บูตซ่อม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.