หลายเดือนก่อน ในที่สุดฉันก็สามารถแก้ไขปัญหาการอ่านอย่างเดียวบนแล็ปท็อป Lenovo G50 ของฉันได้ คุณสามารถอ่านเกี่ยวกับปัญหาดั้งเดิมและความพยายามในการแก้ปัญหาครั้งแรกของฉัน และในที่สุด เมื่อปัญหาดังกล่าวได้รับความนิยมอย่างมากเนื่องจากความล้มเหลวของไดรเวอร์ Ubuntu 17.10 การแก้ปัญหาที่แท้จริงเกิดขึ้นในรูปแบบของการอัปเดตเคอร์เนล และต่อจากนี้ไป ฉันมี UEFI ของฉันทำงานได้อย่างถูกต้องอีกครั้ง สิ่งที่น่าตลกคือ นี่เป็นปัญหาที่ใหญ่กว่ามาก และไม่ได้จำกัดเฉพาะ Ubuntu เท่านั้น แต่มันถูกเพิกเฉยมาเป็นเวลานาน
ตอนนี้ ขณะที่ฉันกำลังรอการแก้ไขที่จะสร้างขึ้น - ไม่รู้ว่าจะมีการแก้ไขหรือไม่ ฉันพยายามค้นหาวิธีรับระบบปฏิบัติการใหม่เพื่อบูตเครื่อง Lenovo อย่างที่ฉันได้กล่าวไปแล้ว การเข้าถึงดิสก์ดิบผ่าน VirtualBox นั้นเป็นหนึ่งเดียว อีกวิธีที่ค่อนข้างเสี่ยงน้อยกว่าแต่ได้ผลค่อนข้างน้อยคือ:GRUB2 ISOBoot เราจะหารือกันในตอนนี้ เพราะอาจมีวันหนึ่งที่คุณอาจเผชิญ (หรือยังคงเป็น) ปัญหา BIOS/UEFI NVRAM แบบอ่านอย่างเดียว และต้องการวิธีแก้ไขปัญหานั้น และไม่มีการอัปเดตเคอร์เนลและปัญหาดังกล่าว ให้เราดำเนินการต่อ
เปิดเครื่อง
ความสามารถในการบูตโดยตรงจากไฟล์ ISO เป็นคุณลักษณะใหม่ของ bootloader ของ GRUB2 และตอนนี้เราจะใช้ประโยชน์จากมันเพื่อหลีกเลี่ยงความจริงที่ว่าเราไม่สามารถใช้สื่อแบบถอดได้บนแล็ปท็อป เอกสารประกอบเกี่ยวกับการใช้ความสามารถนี้ค่อนข้างหายาก และเช่นเคยและค่อนข้างถูกต้อง มีอคติต่อ Ubuntu ซึ่งสมเหตุสมผล เนื่องจากเป็นการกระจาย Linux ที่แพร่หลายที่สุด ยัง.
อย่างไรก็ตาม ก่อนอื่น โปรดอ่านบทช่วยสอน GRUB2 ของฉันเพื่อทำความคุ้นเคยกับ bootloader และวิธีการทำงาน คุณจะไม่สามารถดำเนินการตามคำแนะนำที่เขียนไว้ในบทความนี้ได้หากไม่มีความรู้ดังกล่าว
การเข้าสู่เมนูด้วยตนเอง
ฉันเชื่อในการทดสอบสิ่งต่างๆ ก่อนดำเนินการอัตโนมัติหรือใช้เครื่องมือช่วยเหลือ เพราะวิธีนี้จะทำให้คุณสามารถเข้าใจสิ่งที่เกิดขึ้นได้ เบื้องหลัง. แนวคิดพื้นฐานมีดังนี้ - คุณต้องสร้างสคริปต์ GRUB2 แบบกำหนดเอง - หรือคุณสามารถใช้เทมเพลตที่มีอยู่แล้วชี้ไปที่ไฟล์ ISO ที่เกี่ยวข้องบนหนึ่งในพาร์ติชันบนดิสก์ ติดตั้ง ISO เป็นอุปกรณ์ย้อนกลับ จากนั้นบูตเคอร์เนลที่มีอยู่และไฟล์ initrd/initramfs
เราจะใช้สคริปต์ 40_custom ซึ่งอยู่ภายใต้ /etc/grub.d ตามค่าเริ่มต้น ไฟล์จะว่างเปล่าและแสดงรายการต่อไปนี้เท่านั้น:
#!/bin/sh
exec tail -n +3 $0
# ไฟล์นี้มีวิธีง่ายๆ ในการเพิ่มรายการเมนูแบบกำหนดเอง เพียงพิมพ์
# รายการเมนูที่คุณต้องการเพิ่มหลังจากความคิดเห็นนี้ ระวังอย่าเปลี่ยน
# บรรทัด 'exec tail' ด้านบน
ตอนนี้มาสร้างรายการและดูว่าให้อะไร:
#!/bin/sh
exec tail -n +3 $0
# ไฟล์นี้มีวิธีง่ายๆ ในการเพิ่มรายการเมนูแบบกำหนดเอง
# เพียงพิมพ์รายการเมนูที่คุณต้องการเพิ่มหลังจากนี้
# ความคิดเห็น ระวังอย่าเปลี่ยนบรรทัด 'exec tail' ด้านบน
เมนู "
set root=(
set isoname="
set isofile="
วนกลับ วนซ้ำ $isofile
ลินุกซ์ (วนซ้ำ)
initrd (วนซ้ำ)
}
เรามีอะไรบ้าง
มาดูสคริปต์ของเรากันดีกว่า
- บรรทัดแรก - ชื่อเรื่อง - ระบุชื่อของรายการบูตเฉพาะ
- ต่อไป เราตั้งค่ารูท สิ่งนี้จะบอก GRUB ว่าพาร์ติชั่นใดที่จะค้นหาเส้นทางเฉพาะที่ระบุไว้ในสคริปต์ โปรดทราบว่า GRUB2 ใช้สัญกรณ์ที่แตกต่างจาก GRUB เดิมเล็กน้อย และหมายเลขพาร์ติชันนั้นขึ้นต้นด้วย 1 ไม่ใช่ 0
- คำสั่งที่สาม - isoname - ระบุชื่อของไฟล์ ISO ที่ดาวน์โหลด
- บรรทัดที่สี่ชี้ไปยังเส้นทางแบบเต็มของตำแหน่งของไฟล์ ISO เรารวมบรรทัดโดยใช้ชื่อไฟล์ ISO และนามสกุล .iso
- คำแนะนำถัดไปจะบอกให้ bootloader ต่อเชื่อมไฟล์ ISO เป็นอุปกรณ์ย้อนกลับ
- ตอนนี้ เราโหลดเคอร์เนล - รายการ linux ควรอ่าน linuxefi บนระบบ UEFI จากนั้นเรามีตัวเลือกการบู๊ตที่จำเป็นอื่น ๆ ซึ่งจะ (น่าเศร้า) แตกต่างกันไปในแต่ละรุ่น สุดท้าย เราทำเช่นเดียวกันกับ initrd (initrdefi อีกครั้งสำหรับระบบ UEFI)
ปัญหา ...
ปัญหาของแนวทางนี้คือเกือบทุก distro ที่มีอยู่จะใช้วิธีการของตัวเองในการบูตเข้าสู่เซสชันสด รวมถึงระบบไฟล์ซ้อนทับ ตัวเลือกการบูต และอื่นๆ ไม่มีวิธีที่ง่ายเพียงวิธีเดียวในการบูตรายการทั่วไปใด ๆ อีกครั้ง หากคุณดูตัวอย่างที่มี คุณจะเห็นความแตกต่างและการแยกส่วนจำนวนมากในพื้นที่นี้ เช่นเดียวกับส่วนอื่นๆ ของเดสก์ท็อป Linux
การทดสอบ Fedora
ฉันตัดสินใจทดสอบกับ Fedora เพราะตัวอย่าง Ubuntu นั้นเล็กน้อยมาก เมื่ออ่านออนไลน์ ฉันพบข้อมูลอ้างอิงอย่างน้อยหนึ่งโหลในตระกูล F18-F27 ซึ่งแต่ละรายการมีความแตกต่างกันเล็กน้อย แบบแผนทั่วไปจะจำกัดให้แคบลงไม่มากก็น้อย:
รายการเมนู "Fedora Live" --class fedora {
set root='hd0,msdos8'
set isofile="/home/roger/Downloads/
Fedora-Workstation-Live-x86_64-27 -1.6.iso"
ลูปแบ็ค $isofile
ลินุกซ์ (ลูป)/isolinux/vmlinuz0 iso-scan/filename=${isofile}
root=live:CDLABEL=Fedora-Live rootfstype=อัตโนมัติ ro rd.live.image
เงียบ rhgb rd.luks=0 rd.md=0 rd.dm=0
initrd (วนซ้ำ)/isolinux/initrd0.img
}
ฉันใช้ตัวอย่างล่าสุดของ Fedora 27 และระบบดูอัลบูตที่มีไฟล์ ISO อยู่ในพาร์ติชันที่แปด (sda8) เมื่อคุณเพิ่มสิ่งนี้ลงในสคริปต์ที่กำหนดเองแล้ว ขั้นตอนต่อไปคือการอัปเดตเมนู GRUB จากนั้นตรวจสอบและยืนยันว่าไฟล์คอนฟิกูเรชัน GRUB ที่สร้างขึ้นมีรายการของคุณจริง
การทดสอบนี้ไม่ได้ผล - หรือรูปแบบอื่นๆ อีกหลายสิบรูปแบบ ฉันยังใช้ UUID แทนดิสก์และสัญลักษณ์พาร์ติชัน ลองแทรกโมดูลต่างๆ แล้ว โมดูลเหล่านี้ไม่อนุญาตสำหรับการบูตไฟล์ ISO ที่ไม่ใช่ของ Ubuntu ที่เรียบง่ายและราบรื่น
วิธีที่ไม่ทำเอง:grml
วิธีที่ง่ายกว่ามากคือการใช้เครื่องมือตัวช่วยที่จะเพิ่มรายการสำหรับไฟล์ ISO ใดๆ ที่พบใน /boot/grml โดยอัตโนมัติ ติดตั้งโปรแกรม - sudo apt-get install grml คัดลอกไฟล์ ISO ที่เกี่ยวข้อง แล้วรันคำสั่งอัพเดต GRUB
ด้วยวิธีนี้ ฉันได้ผลลัพธ์ที่หลากหลาย - ดิสทริบิวชันบางตัวสามารถบู๊ตได้ บางตัวจะไม่บู๊ต เมื่อดูที่ไฟล์ grub.cfg ที่สร้างขึ้น อีกครั้ง ดูเหมือนจะไม่มีข้อตกลงง่ายๆ ทั่วไปว่าผลลัพธ์ควรมีลักษณะอย่างไร แม้จะปลอดภัยกว่าการใช้การเข้าถึงดิสก์ดิบใน VirtualBox ตามที่ฉันได้แสดงให้คุณเห็นในบทความแรกของฉันเกี่ยวกับหัวข้อนี้ วิธีการ ISOBoot มีโอกาสน้อยที่จะทำงานในทุกกรณี
วิธีแก้ปัญหาอื่นๆ
ไม่เกี่ยวข้องกับ GRUB2 ISOBoot อย่างเคร่งครัด แต่มีเครื่องมืออื่นๆ อีกสองสามอย่างที่คุณอาจต้องการพิจารณา เครื่องมือเหล่านี้บางส่วนเป็นคำแนะนำจากผู้อ่านของฉัน และฉันอยากจะขอบคุณพวกเขาสำหรับความช่วยเหลือและการสนับสนุนอย่างแท้จริง เนื่องจากพวกเขาพยายามช่วยเหลือฉันในการซ่อมแซมแล็ปท็อป
คำแนะนำอย่างเป็นทางการของ Lenovo คือการเปลี่ยนเมนบอร์ด วิธีนี้จะได้ผล และคุณอาจต้องการลองทำดู แต่หลังจากใช้โซลูชันที่ใช้ซอฟต์แวร์จนหมดเท่านั้น มีราคาถูกกว่า และคุณสามารถถอยกลับไปใช้ฮาร์ดแวร์ได้เสมอ และอย่างที่เราได้เห็น การอัปเดตเคอร์เนลก็ช่วยได้ ดังนั้นการเปลี่ยนเมนบอร์ดจึงไม่ใช่เรื่องเสียเงินอีกต่อไป (นั่นเป็นทางเลือกเสมอ และควรเป็นทางเลือกสุดท้าย)
คำแนะนำด้านฮาร์ดแวร์อีกข้อหนึ่ง (ค่อนข้างเชี่ยวชาญมาก) คือการลองแฟลชอิมเมจ UEFI ที่สะอาดลงบนชิปของแล็ปท็อปโดยตรง โดยใช้โปรแกรมเมอร์ USB SPI ที่สนับสนุนโดยเครื่องมือ flashrom ฉันยังไม่ได้ลองสิ่งนี้ แต่นี่คือสิ่งที่คุณอาจต้องพิจารณาหากคุณเป็นคนกล้าได้กล้าเสียและเข้าใจ
บทเรียนย่อยของเรื่องนี้คือการรอคอยที่ดี ในกรณีของฉัน ฉันอดทนรอประมาณสี่เดือน ฉันไม่ได้รีบใช้เงินไปกับการซ่อมแซมฮาร์ดแวร์หรือซื้อแล็ปท็อปเครื่องใหม่ อย่างไรก็ตาม ฉันเข้าใจว่าในบางสถานการณ์ คุณอาจไม่มีทางเลือกตัวเลือกอื่นๆ ตามลำดับความสำคัญจากมากไปน้อยควรเป็น:1) แฟลชเฟิร์มแวร์ BIOS/UEFI หากมี 2) การใช้ตัวจัดการการบูต rEFInd แทน GRUB; ด้วยการแฮ็กเล็กน้อย (สิ่งที่เราอาจสำรวจในรายละเอียดมากขึ้นในวันหนึ่ง) คุณอาจสามารถแก้ไขข้อจำกัดที่มีอยู่ซึ่งกำหนดโดย BIOS แบบอ่านอย่างเดียว/UEFI ได้สำเร็จ 3) โปรแกรมการจัดการ UEFI อื่นๆ หลายโปรแกรม เช่น EasyUEFI 4) หนังสือสวดมนต์ ซึ่งสำหรับ geeks ส่วนใหญ่จะเป็นแบบ Python manual
เรามาพูดถึงประเด็นที่สองถึงสุดท้ายในรายละเอียดอีกเล็กน้อย โปรแกรมนี้เป็นโปรแกรมบน Windows และสามารถใช้จัดการ EFI bootloader ได้ ซึ่งรวมถึงการเปิด/ปิดรายการ การเปลี่ยนลำดับของรายการ และล้างข้อมูลรายการที่ปิดใช้งาน
คำสั่งล้างข้อมูลนี้คือสิ่งที่อาจช่วยให้คุณได้รับ NVRAM ให้ความร่วมมือ (อาจจะ) In the main menu, try to disable one of the entries, or if you already have some in the disabled state, then you can try the cleanup option. In my case, this did not work. The tool threw a system API error, which is probably not that different from the interrupted system call issue we saw in my initial report on the problem. Don't get your hopes too high, but it might work for you better than it did for me.
I would like to thank aigle, Ivan, L., Neal, Marcin, Richard, Nik, Floris, zloster, Georg, and Matthew for their suggestions, ideas, encouragement through the adventure. Since the problem has been resolved, I won't be able to continue any additional tools or ways to resolve the issue, and with what you have above, plus the kernel update, plus the VirtualBox raw disk access, you should be okay.
บทสรุป
When you're facing an odd hardware situation, like we have here, there are no guarantees. In the first workaround article, I mentioned VirtualBox and raw disk access. This is bound to work, but the risks are quite high. A less intrusive method is to try to boot from ISO files using GRUB2, our topic today. My testing shows this is a much less successful and effective way, but it also carries less risk of damaging the data on the hard disk. Lastly, you could try some other tools, and we will explore some of those more in the future.
For the time being, my suggestion is - if the kernel update does not work for you AND you do not really have to change the current setup AND it works for you well - let it be. For me, this was the matter of using eight operating systems, more than plenty for a test box, and I could still perform in-vivo upgrades, so it was all right waiting for the kernel fix. If you do want to try to be able to use additional operating systems without making any hardware repairs, then you have several workaround solutions and semi-solutions to consider. I wish I could give you a 100% foolproof 100% applicable recipe, but that is never the case in a war between software and hardware. ดูแล.
ไชโย.