ความล้มเหลวในการบูตเคอร์เนลที่กำหนดเองของฉัน


1

ฉันรวบรวมและติดตั้งเคอร์เนล Linux ที่กำหนดเองโดยใช้ Debian kernel-package ทุกอย่างก็โอเค: ไฟล์. deb ถูกสร้างขึ้นและ vmlinuz ที่กำหนดเองและ initrd.img ถูกสร้างขึ้นใน / boot และ /boot/grub/menu.lst ถูกแก้ไขโดยอัตโนมัติ แต่หลังจากฉันบูตเข้าสู่เคอร์เนลที่กำหนดเองนี่คือสิ่งที่เกิดขึ้น:

หลังจากความคืบหน้าบางอย่างเขียนต่อไปนี้:

Begin: Waiting for root file system

และรอสักครู่ แล้วพิมพ์สิ่งนี้:

Gave up waiting for root device. Common problems:
    - Boot args (cat /proc/cmdline)
        - Check root delay= (did the system wait long enough?)
        - Check root= (did the system wait for the right device?)
    - Missing modules (cat /proc/modules; ls /dev)

ALERT! doesn't exist. Dropping to a shell!

/bin/sh
(initramfs)

และข้ามไปยังเชลล์ใน RAM เมื่อฉันลองmount /dev/hda6 /tmp/hda6มันจะไม่มี hda6 hda6 เป็นพาร์ติชั่นที่ใช้ Debian ของฉันและรวมถึง initrd.img ที่กำหนดเอง

โปรดช่วยฉันด้วย!


อาจเป็นเพราะฉันมีพื้นที่ว่างเหลืออยู่ในพาร์ติชันของฉัน พื้นที่ว่างทางด้านซ้ายประมาณ 600MB

เมื่อเคอร์เนลแบบกำหนดเองส่งคุณไปยังเชลล์คุณต้องค้นหา/devเพื่อค้นหาอุปกรณ์ฮาร์ดไดรฟ์ที่ถูกต้อง หากนี่คือเคอร์เนลล่าสุดที่มี udev ควรมี symlink บางตัว/dev/disk/by-UUIDที่จะช่วยระบุอุปกรณ์ใหม่
ต้มตุ๋น Quixote

คำตอบ:


3

ปัญหานี้เกิดขึ้นเมื่อroot=บรรทัดในตัวเลือกการบูตเคอร์เนลของคุณไม่ตรงกับฮาร์ดแวร์

อาจเป็นไปได้ว่าเคอร์เนลใหม่ของคุณไม่ได้ให้/dev/hdaโหนดอุปกรณ์ในการบู๊ตของคุณ มีความเป็นไปได้สองสามอย่าง

  1. อาจเป็นได้ว่าอุปกรณ์ของคุณตอนนี้/dev/hdbหรือบางส่วน

  2. อาจเป็นไปได้ว่าเคอร์เนลของคุณกำลังใช้ไดรเวอร์รุ่นใหม่กว่าสำหรับอุปกรณ์และอุปกรณ์บูตของคุณตอนนี้/dev/sdaหรือบางส่วน /dev/hd{a..z}อุปกรณ์ใช้ไดรเวอร์ PATA รุ่นเก่า สิ่งนี้กลายเป็นที่แพร่หลายสำหรับอุปกรณ์ SATA แต่สามารถเข้าถึง PATA อินเตอร์เฟสที่เก่ากว่าได้ด้วยวิธีนี้เช่นกัน (เช่น Ubuntu จะใช้สิ่งนี้เป็นค่าเริ่มต้นยกเว้นไดรฟ์ออปติคัล PATA)

วิธีที่ง่ายที่สุดในการแก้ไขคือการบูตเคอร์เนลรอให้มันปล่อยคุณไปยัง shell แล้วตรวจสอบ/dev/disk/by-uuidหรือ/dev/disk/by-labelเพื่อหาอุปกรณ์ที่ถูกต้อง จากนั้นคุณสามารถติดตั้งอุปกรณ์แก้ไขroot=อาร์กิวเมนต์ในการกำหนดค่า Grub ของคุณและรีบูต

พิจารณาใช้ UUID หรือป้ายชื่อพาร์ติชันในroot=อาร์กิวเมนต์ของคุณแทนอุปกรณ์เฉพาะ วิธีนี้การเปลี่ยนแปลงไดรเวอร์เคอร์เนลที่เปลี่ยนชื่ออุปกรณ์ของคุณจะไม่มีผลกับการบู๊ต คุณสามารถค้นหา UUID และป้ายกำกับด้วยtune2fs -l <device>และคุณสามารถเพิ่มป้ายกำกับsudo tune2fs -L <label> <device>ได้

นี่คือroot=อาร์กิวเมนต์แต่ละวิธี (หมายเหตุไม่มีเครื่องหมายคำพูด):

root=/dev/sda6
root=UUID=94b1e7d5-9fc5-4f44-b5b1-c776afc808d4
root=LABEL=debian-root-volume-label

ฉันทำตามที่คุณพูด แต่มันก็ช่วยไม่ได้

1

สิ่งแรกที่คุณต้องตรวจสอบคือเคอร์เนลของคุณรู้จักฮาร์ดแวร์ของคุณหรือไม่

  • ก่อนอื่นให้ตรวจสอบประเภทของฮาร์ดไดรฟ์ของคุณและตรวจสอบให้แน่ใจว่าเปิดใช้งานในการกำหนดค่าเคอร์เนล นี่เป็นสาเหตุของปัญหาของคุณ
  • ฉันจำไม่ได้ว่ามีdmesgโปรแกรมที่รวมอยู่ในค่าเริ่มต้นของ Debian แต่คุณสามารถตรวจสอบการพิมพ์ผลลัพธ์การดีบักเคอร์เนลdmesg | lessได้ จากนั้นลองค้นหาบรรทัดที่เกี่ยวข้องกับฮาร์ดไดรฟ์ของคุณ นอกจากนี้ยังเป็นประโยชน์ในการรู้จักผู้ขายหรืออินเทอร์เฟซของไดรฟ์อย่างน้อย
  • ในที่สุดคุณสามารถลบquietตัวเลือกการบูตจากเคอร์เนล commandline ถ้ามีแล้วเพียงเลื่อนขึ้น debug output ด้วยปุ่ม Shift + PgUp / PgDn ค้นหาข้อมูลเดียวกันกับในวรรคก่อนหน้า

นอกจากนี้อาจเป็นความคิดที่ดีที่จะให้ข้อมูลเกี่ยวกับฮาร์ดไดรฟ์ในคำถามที่เกี่ยวข้องกับ HD

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