วิธีใช้ GRUB Rescue เพื่อแก้ไข Linux
เผยแพร่แล้ว: 2023-05-14ls
, set
, linux
และ initrd
เพื่อแก้ไขระบบ Linux ของคุณได้ หากคุณเห็นข้อความแจ้ง "grub Rescue>" ให้ใช้คำสั่ง set
, insmod
, linux
และ initrd
เพื่อบู๊ตพีซีของคุณหากคอมพิวเตอร์ Linux ของคุณไม่สามารถบู๊ตเข้าสู่ระบบปฏิบัติการได้ คุณอาจพบว่าตัวเองจ้องที่ข้อความแจ้งในเชลล์ GRUB ทำตามขั้นตอนเหล่านี้เพื่อซ่อมแซมกระบวนการบูตที่เสียหาย
เมื่อ Bootloader ของคุณไม่บูต
การใช้ GRUB Shell
การใช้ GRUB Rescue Shell
วิธีแก้ไขที่เป็นไปได้อื่น ๆ
เมื่อ Bootloader ของคุณไม่บูต
มีปัญหาคอมพิวเตอร์น้อยมากที่ทำให้หัวใจของคุณจมลึกและรวดเร็วพอ ๆ กับความล้มเหลวในการบู๊ต หากไม่มีระบบปฏิบัติการ คอมพิวเตอร์ของคุณก็ไม่ใช่คอมพิวเตอร์จริงๆ
อาจเป็นปัญหาที่คลุมเครือและไม่มีวิธีที่ง่ายในการเจาะลึกถึงสาเหตุที่แท้จริง หากไม่มีสิทธิ์เข้าถึง Linux คุณจะใช้เครื่องมือและกระบวนการวินิจฉัยตามปกติที่คุณใช้ตรวจสอบปัญหาไม่ได้ และไม่ได้ระบุว่าปัญหาคืออะไร คุณจะแก้ไขได้อย่างไร
บน Linux นั้น GRUB เป็นซอฟต์แวร์ที่ควบคุมกระบวนการบู๊ต หากคุณติดตั้งระบบปฏิบัติการไว้หลายระบบ คุณจะสามารถเลือกระบบที่ต้องการบูตได้
GRUB ถูกควบคุมโดยการกำหนดค่า มันอาศัยไฟล์สนับสนุนอื่น ๆ ด้วยเพื่อทำหน้าที่ของมัน หากสิ่งเหล่านี้ขาดหายไปหรือเสียหาย GRUB จะไม่ทำงาน การเปลี่ยนแปลงฮาร์ดไดรฟ์และพาร์ติชันของคอมพิวเตอร์ของคุณต้องมีผลในการกำหนดค่าของ GRUB หากไม่เป็นเช่นนั้น คำแนะนำของ GRUB จะไม่สมเหตุสมผล และกระบวนการบูตของคุณจะใช้งานไม่ได้
โปรดทราบว่าสิ่งที่เราเรียกว่า GRUB จริงๆ แล้วคือ GRUB 2 นี่เป็นเวอร์ชันขั้นสูงของ GRUB ที่เปิดตัวในปี 2012 ท่ามกลางการเปลี่ยนแปลงอื่นๆ มันเปลี่ยนวิธีสร้างไฟล์ "grub.cfg" และช่วยให้คุณ บูตจากสื่อแบบถอดได้
หาก GRUB ไม่สามารถโหลดระบบปฏิบัติการได้ คุณจะถูกปล่อยให้จ้องที่ข้อความแจ้งในเชลล์ GRUB นี่คือสภาพแวดล้อมแบบมินิมัลลิสต์ที่จะช่วยให้คุณดำเนินการได้หลายอย่าง ทำอย่างถูกต้อง อย่างไรก็ตาม ขั้นตอนเหล่านี้อาจทำให้คอมพิวเตอร์ของคุณฟื้นคืนชีพได้
มี GRUB shell ที่แตกต่างกันสองแบบ ขึ้นอยู่กับสาเหตุของปัญหา คุณอาจพบว่าตัวเองได้รับพร้อมท์เชลล์ GRUB:
ด้วง>
หรือที่พรอมต์ ช่วยเหลือ ของ GRUB:
ด้วงกู้ภัย>
เชลล์ช่วยเหลือของ GRUB นั้นถูกจำกัดมากกว่าเชลล์ GRUB แต่ก็ยังอัดแน่นพอที่จะทำให้คอมพิวเตอร์ของคุณบู๊ตได้ เมื่อคอมพิวเตอร์ของคุณบู๊ตแล้ว คุณจะอยู่ในตำแหน่งที่ดีขึ้นมากในการแก้ไขสาเหตุที่แท้จริง
การใช้ GRUB Shell
เชลล์ GRUB เป็นอินเตอร์เฟสบรรทัดคำสั่งที่ให้คุณใช้ชุดย่อยของคำสั่ง Linux ได้ หากคุณพบว่าตัวเองอยู่ที่นี่แทนที่จะอยู่ที่หน้าจอเข้าสู่ระบบตามปกติ แสดงว่ากระบวนการบูตของคุณยุ่งเหยิง
คำสั่งที่คุณสามารถเข้าถึงได้ไม่เหมือนกับเวอร์ชัน Linux ทั่วไป ตัวอย่างเช่น คำสั่ง ls
ของเชลล์ GRUB ไม่ใช่คำสั่ง Bash ls
มันมีอะไรเหมือนกันน้อยมาก เราสามารถดูสิ่งนี้ได้โดยใช้ตัวเลือก --help
ls -- ช่วยด้วย
จะแสดงห้าตัวเลือกเท่านั้น นั่นเป็นหนทางไกลจากตัวเลือกมากมายที่สนับสนุนโดย ls
ใน Bash อย่างไรก็ตาม แม้จะมีชุดคำสั่งที่ค่อนข้างเงียบ แต่เราก็ยังสามารถแก้ไขสถานการณ์ได้
ที่พรอมต์ ให้พิมพ์ ls
แล้วกด “Enter”
ล
ในคอมพิวเตอร์เครื่องนี้ จะแสดงรายการสามรายการ
- (hd0) เป็นฮาร์ดไดรฟ์ตัวแรก
- (hd0,gpt1) เป็นพาร์ติชันแรกในฮาร์ดไดรฟ์ตัวแรก
- (hd0,gpt2) เป็นพาร์ติชันที่สองในฮาร์ดไดรฟ์ตัวแรก
ป้ายกำกับ "gpt" หมายถึงตารางพาร์ติชัน GUID เราจำเป็นต้องใส่วงเล็บ " ()
" เมื่อเราอ้างอิงพาร์ติชัน แต่เราสามารถละป้ายกำกับได้
ในการดูพาร์ติชันในทางกลับกัน เราจะใช้ ls
ls (hd0,1)
ls (hd0,2)
เราพบว่าพาร์ติชันที่สองมีระบบไฟล์ Linux อยู่ เราจะตรวจสอบเพิ่มเติมอีกเล็กน้อยโดยดูที่ไดเร็กทอรีรากของพาร์ติชันนั้น
ls (hd0,2)/
เห็นได้ชัดว่านี่คือพาร์ติชัน Linux ซึ่งมีไดเร็กทอรีสำหรับบูตอยู่ นี่คือที่เก็บไฟล์ GRUB, อิมเมจสำหรับบูต Linux และไฟล์สำหรับบูตอื่นๆ
ในคอมพิวเตอร์เครื่องนี้ เราจะต้องอ้างอิงพาร์ติชัน (hd0,2)
เมื่อเราออกคำสั่ง ในคอมพิวเตอร์ของคุณ คุณจะใช้พาร์ติชันใดก็ได้ที่คุณพบการติดตั้ง Linux
เราสามารถใช้คำสั่ง cat
เพื่อดูไฟล์ข้อความโดยเพิ่มพาธไดเร็กทอรีและชื่อไฟล์ต่อท้ายชื่อพาร์ติชัน ดังนี้
cat (hd0,2)/อื่นๆ/ปัญหา
ในการติดตั้งมัลติบูต นี่เป็นวิธีที่มีประโยชน์ในการยืนยันว่าคุณใช้พาร์ติชันที่ถูกต้อง นอกจากนี้ยังเหมาะสำหรับการดูไฟล์การกำหนดค่าภายใน
ในที่นี้ เราใช้คำสั่ง ls
กับตัวเลือก -l
(long) และ -h
(ขนาดที่มนุษย์อ่านได้) เพื่อแสดงรายการไฟล์ในไดเร็กทอรี “/boot”
ls -lh (hd0,2)/บูต
ในการทำให้คอมพิวเตอร์เครื่องนี้บูตได้ เราต้องบอก GRUB ว่าพาร์ติชัน Linux ที่เพิ่งค้นพบของเราเก็บไฟล์สำหรับบูตไว้
ตั้งค่ารูท = (hd0,2)
เราจำเป็นต้องระบุเคอร์เนล Linux ที่จะบูตจาก เราทำสิ่งนี้ด้วยคำสั่ง linux
โปรดทราบว่าเราต้องจัดเตรียมไดเร็กทอรีหลักโดยใช้แผนการตั้งชื่อฮาร์ดไดรฟ์และพาร์ติชัน Linux ตามปกติ
linux /boot/vmlinuz-6.2.0-20-generic root=/dev/sda2
ในคอมพิวเตอร์ตัวอย่างของเรา เราใช้ (hd0)
ซึ่งเป็นฮาร์ดไดรฟ์ตัวแรก สิ่งนี้เรียกว่า sda
ในระบบการตั้งชื่อ Linux ตามปกติ เราพบว่าพาร์ติชันที่สองคือพาร์ติชัน Linux ดังนั้นเราต้องระบุ sda2
เครื่องของคุณอาจแตกต่างออกไป ตัวอย่างเช่น หากพาร์ติชั่น Linux ของคุณถูกรายงานเป็น (hd2,1)
นั่นหมายถึงพาร์ติชั่นหนึ่งในฮาร์ดไดรฟ์ตัวที่สาม หรือ sdc1
เราต้องระบุอิมเมจระบบไฟล์ที่ใช้ RAM ที่จะใช้เมื่อคอมพิวเตอร์บูท ต้องใช้องค์ประกอบตัวเลขเดียวกันกับเคอร์เนล Linux ที่เรากำลังใช้
initrd /boot/initrd.img-6.2.0-20-generic
ตอนนี้เพื่อบู๊ตระบบของเรา พิมพ์ "boot" แล้วกด "Enter"
สิ่งนี้ควรบู๊ตคอมพิวเตอร์ของคุณเป็น Linux นั่นทำให้เรากลับมาทำงานได้อีกครั้ง แต่เรายังจำเป็นต้องแก้ไข GRUB ดังนั้นเราจึงไม่จำเป็นต้องทำสิ่งนี้ทุกครั้งที่เปิดคอมพิวเตอร์
เราจะเรียกใช้ update-grub
สิ่งนี้จะสแกนระบบของเรา ระบุระบบปฏิบัติการ และสร้างการกำหนดค่า GRUB ใหม่ เราจำเป็นต้องเรียกใช้สิ่งนี้ในฐานะผู้ใช้รูท
sudo ปรับปรุงด้วง
ไม่บ่อยนัก คุณอาจต้องติดตั้ง bootloader ของ GRUB ใหม่ด้วย โดยใช้ grub-install
sudo ด้วงติดตั้ง /dev/sda
โปรดทราบว่าคุณไม่จำเป็นต้องระบุว่าจะติดตั้งพาร์ติชันใด เพียงแค่เลือกไดรฟ์ใด ในการติดตั้งปกติ จะเป็นไดรฟ์เดียวกับที่คุณใช้ Linux
หลักฐานของพุดดิ้งมาพร้อมกับการรีบูตครั้งต่อไป คอมพิวเตอร์ของคุณควรรีบูตตามปกติ
ที่เกี่ยวข้อง: วิธีกำหนดการตั้งค่าของ Boot Loader ของ GRUB2
การใช้ GRUB Rescue Shell
คุณอาจไม่หลุดเข้าไปในเชลล์ GRUB ทั้งนี้ขึ้นอยู่กับลักษณะของปัญหาการบู๊ต คุณอาจอยู่ในโหมด ช่วยเหลือ ด้วง หากเป็นเช่นนั้น พรอมต์ของคุณจะมีลักษณะดังนี้:
ด้วงกู้ภัย>
คำสั่งที่เราต้องใช้ในเชลล์นี้แตกต่างกัน เราจำเป็นต้องใช้ ls
เพื่อค้นหาพาร์ติชัน Linux เช่นเดียวกับที่คุณใช้เชลล์ GRUB เมื่อระบุพาร์ติชัน Linux แล้ว คุณสามารถดำเนินการต่อและป้อนคำสั่งเหล่านี้ได้
อย่าลืมใช้ตัวระบุไดรฟ์และหมายเลขเวอร์ชันเคอร์เนลที่ถูกต้องสำหรับคอมพิวเตอร์ของคุณ คำสั่ง insmod
จะโหลดโมดูลเคอร์เนล
ตั้งคำนำหน้า=(hd0,2)/boot/grub
ตั้งค่ารูท = (hd0,2)
เข้าโหมดปกติ
insmod ลินุกซ์
linux /boot/vmlinuz-6.2.0-20-generic root=/dev/sda2
initrd /boot/initrd.img-6.2.0-20-generic
จากนั้นคุณสามารถพิมพ์ "boot" และกด "Enter" เพื่อรีบูตเครื่องคอมพิวเตอร์ของคุณ เมื่อรีบูตและคุณเข้าสู่ระบบแล้ว ให้อัปเดต GRUB ด้วยคำสั่ง update-grub
วิธีแก้ไขที่เป็นไปได้อื่น ๆ
หากปัญหากลายเป็นว่าไม่มีไฟล์บูต เช่น ไฟล์ "vmlinuz" และ "initrd.img" คุณสามารถบูตคอมพิวเตอร์จาก Live DVD หรือแฟลชไดรฟ์ Linux USB ที่สามารถบู๊ตได้ และคัดลอกไฟล์ที่ขาดหายไปเข้าที่
โปรดทราบว่าไฟล์ “vmlinuz” และ “initrd.img” ต้อง มีหมายเลขเวอร์ชันเดียวกัน เนื่องจากทำงานเป็นคู่ที่ตรงกัน
ที่เกี่ยวข้อง: วิธีสร้าง Linux Live USB ที่บูตได้บน Mac ของคุณ