หลังจากอัปเดตล่าสุดบางอย่างคอมพิวเตอร์ของฉันจะไม่บูทอีกต่อไป! นี่คือสิ่งที่ฉันสามารถตรวจสอบได้:
- นี่เป็นคอมพิวเตอร์ล่าสุดที่ให้ฉันโดย บริษัท ไอที มันมี Intel CPU ล่าสุด (รุ่น Skylake)
- คอมพิวเตอร์ใช้งาน Ubuntu 16.04
- คอมพิวเตอร์บูตอย่างถูกต้องครั้งล่าสุดในเดือนมีนาคม ปัญหาน่าจะเกิดจากการอัพเดทซอฟต์แวร์หรือบั๊กฮาร์ดแวร์
- ฉันมีคอมพิวเตอร์เครื่องอื่นที่ใช้ 16.04 ซึ่งมีซอฟต์แวร์เดียวกันกับที่ติดตั้ง (ฉันใช้
apt-clone
) และมันใช้งานได้ดี มันมีฮาร์ดแวร์ที่แตกต่างกัน (เช่น amd64 แต่ CPU ที่แตกต่าง, GPU ที่แตกต่างกัน ฯลฯ ) - เคอร์เนลเริ่มทำงาน initrd ทำงานได้อย่างถูกต้อง เมื่อฉันบู๊ตด้วยหน้าจอเริ่มต้นในโหมดกราฟิกฉันจะได้รับพร้อมท์ให้ใส่รหัสผ่านสำหรับโวลต์ dm-crypt ของฉันและสิ่งสุดท้ายที่ฉันเห็นคือมันติดตั้งเรียบร้อยแล้ว
- แฮงค์เกิดขึ้นก่อนที่ฉันจะได้รับพรอมต์การเข้าสู่ระบบ เมื่อคอมพิวเตอร์แฮงค์มันเป็นการแฮงค์อย่างหนัก แม้Alt+ SysRqไม่ตอบสนอง เห็นได้ชัดว่า CPU ถูกตรึงที่ 100% เนื่องจากแฟน ๆ เปิดการระเบิดเต็มรูปแบบ
- ฉันยังมีเคอร์เนลที่ฉันใช้อยู่ก่อนที่จะรีบูตเครื่อง เมื่อฉันเลือกเคอร์เนลนี้ในเมนูด้วงฉันจะได้รับการล็อคเดียวกัน ดังนั้นดูเหมือนว่านี่เป็นข้อผิดพลาดเคอร์เนลที่มีอยู่แล้วซึ่งได้รับการกระตุ้นจากสิ่งอื่น - แต่อะไรนะ?
- หากฉันปิดหน้าจอสแปลช (ลบออก
splash
จากlinux
บรรทัดคำสั่งในด้วง) ฉันจะเห็นจำนวนบริการที่เริ่มต้นจากนั้นจะล็อคขึ้น ฉันจะได้รูทเชลล์โดยการเพิ่ม
init=/bin/sh
ไปยังlinux
บรรทัดคำสั่งในด้วง ฉันยังสามารถรับเพิ่มเติมโดยเพิ่มsystemd.unit=basic.target systemd.shell
สิ่งนี้สตาร์ทเซอร์วิสจำนวนหนึ่งและรันรูทเชลล์บน tty9
- ถ้าฉันวิ่ง
systemctl start multi-user.target
จากรูทเชลล์นั้นคอมพิวเตอร์จะล็อค ดังนั้นจึงน่าจะเป็นปัญหาที่เกิดจากหนึ่งในบริการเหล่านี้ - ฉันวิ่ง
systemctl list-dependencies multi-user.target
ไปดูว่าบริการเริ่มต้นอะไร ฉันเริ่มการพึ่งพาที่ระบุไว้ด้วยตนเองทีละรายการและทุกอย่างเริ่มต้นได้ดี
ดังนั้นนี่ดูเหมือนข้อผิดพลาดของฮาร์ดแวร์ (เนื่องจากเกิดขึ้นในคอมพิวเตอร์เครื่องหนึ่ง แต่ไม่ได้อยู่ที่อีกเครื่องหนึ่ง) ที่เกิดจากซอฟต์แวร์บางตัว แต่ซอฟต์แวร์อะไร เนื่องจากคอมพิวเตอร์ล็อคยากมากฉันจึงไม่สามารถบันทึกได้ ฉันไม่สามารถรับเอาต์พุตคอนโซลที่มีประโยชน์ได้
เทคนิคการดีบักที่มีประโยชน์:
- Alt+ SysRq: ปุ่ม magic SysRqซึ่งให้คุณทำสิ่งต่างๆเช่นการรีบูตฉุกเฉิน มันเข้าถึงเคอร์เนลในระดับต่ำมากดังนั้นมันจึงทำงานได้ทั้งหมดยกเว้นการล่มที่เลวร้ายที่สุด ในกรณีของฉันAlt+ SysRqไม่ตอบสนองซึ่งแสดงว่าข้อขัดข้องนั้นลึกเพียงใด
- ในการแก้ไขพารามิเตอร์การบู๊ตให้กดค้างไว้Shiftสองสามวินาทีหลังจากเปิดเครื่อง คุณต้องกดมันหลังจาก BIOS ได้เริ่มต้นคีย์บอร์ด แต่ก่อนที่ระบบปฏิบัติการจะบู๊ต ทำให้เมนูGrubปรากฏขึ้น
- ที่เมนูด้วงกดeเพื่อแก้ไขบรรทัดคำสั่งสำหรับรายการเมนู
linux
ในการเปลี่ยนพารามิเตอร์บูตลินุกซ์นำทางไปยังบรรทัดที่เริ่มต้นด้วย บน Ubuntu สมัยใหม่คุณจะพบเมล็ดเก่าภายใต้“ ตัวเลือกขั้นสูงสำหรับ Ubuntu” เมื่อคุณทำการเปลี่ยนแปลงที่ต้องการในบรรทัดคำสั่งแล้วให้กดCtrl+ xเพื่อบูต การเปลี่ยนแปลงใด ๆ ที่คุณทำที่นี่สำหรับการบูตนี้เท่านั้นจะไม่ถูกบันทึกลงในดิสก์ - ตัวเลือกที่มีประโยชน์บางตัวใน
linux
บรรทัดคำสั่ง:quiet nosplash
ซ่อนข้อความการบูตเกือบทั้งหมด ลบออกเพื่อรับข้อความบนคอนโซลระหว่างการบู๊ตซึ่งจำเป็นต้องมีโอกาสวินิจฉัยปัญหาrecovery
ให้รูทเชลล์แก่คุณโดยแทบจะไม่มีบริการ คุณจะต้องรู้รหัสผ่านรูท รายการเมนู“ โหมดการกู้คืน” ใช้สิ่งนี้init=/bin/sh
ให้รูทเชลล์แก่คุณโดยไม่มีบริการเลยexec init
เพื่อดำเนินการต่อบูตปกติทำงาน คุณสามารถผ่านตัวเลือก systemd ได้ที่จุดนี้เช่นexec init --unit=basic.target
เพื่อเริ่มต้น init และบริการบางอย่าง (โปรดทราบว่านี่ไม่ได้เริ่มต้นวิธีการเข้าสู่ระบบดังนั้นคุณควรให้เชลล์ทำงานบนคอนโซลอื่น) โปรดทราบว่าระบบไฟล์รูทติดตั้งแบบอ่านอย่างเดียว วิ่งmount -o remount,rw /
เพื่อให้สามารถเขียนถึงมันsystemd.unit=basic.target
เริ่มชุดบริการขั้นพื้นฐานมาก โปรดทราบว่านี่ไม่รวมวิธีการลงชื่อเข้าใช้! คุณสามารถทำให้สิ่งนี้เป็นค่าเริ่มต้นได้ด้วยการรันsystemctl set-default basic.target
ที่พร้อมต์รูท หากต้องการคืนค่าเป้าหมายเริ่มต้นดั้งเดิมให้รันsystemctl set-default graphical.target
(หรือsystemctl set-default multi-user.target
สำหรับเซิร์ฟเวอร์ที่ไม่มี GUI)systemd.debug-shell
สตาร์ทเชลล์รูทบน tty9 คุณสามารถเปิดใช้งานสิ่งนี้สำหรับการบู๊ตทุกครั้งโดยรันsystemctl enable debug-shell
ที่พรอมต์รูต อย่าลืมปิดใช้งานสิ่งนี้หลังจากที่คุณแก้ไขปัญหาsystemctl disable debug-shell
ได้แล้ว กดAlt+ F9เพื่อเปลี่ยนเป็น tty9- ดูเพิ่มเติมเคล็ดลับ Fedora systemd , Arch Linux บูตเคล็ดลับปัญหา