วิธีแก้ไขการบูตในพรอมต์ initramfs และ“ mount: ไม่สามารถอ่าน '/ etc / fstab': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว” และ“ ไม่พบ init”?


25

การติดตั้งระบบใหม่โดยใช้ดิสก์ที่แบ่งพาร์ติชันGPT สำหรับพาร์ติชันเดียว, รูปแบบext4 , extlinux (รุ่น 4.05) เป็น bootloader, Ubuntu Core version 13.10 amd64 เป็น rootfs และ Ubuntu linux-image-3.11.0-18-generic เป็นเคอร์เนล, และ extlinux-update เพื่อสร้างการกำหนดค่า bootloader

ผลลัพธ์หลังจากรีบูตเครื่อง (ยังอยู่ในเครื่องเสมือนที่ใช้ KVM) คือพรอมต์ (initramfs) และข้อความเหล่านี้:

mount: can't read '/etc/fstab': No such file or directory
mount: mounting /dev on /root/dev failed: No such file or directory
mount: mounting /sys on /root/sys failed: No such file or directory
mount: mounting /proc on /root/proc failed: No such file or directory
The filesystem doesn't have requested /sbin/init.
No init found. Try passing init= bootarg.

BusyBox คือ v1.20.2

การถดถอย:

  • ระบบไฟล์ถูกตรวจสอบด้วย fsck.ext4

ตรวจสอบการมีอยู่ของราก

(initramfs) ls -l /dev/[hs]da*
ls: /dev/[hs]da*: No such file or directory

อาร์กิวเมนต์การบูตรูท

(initramfs) cat /proc/cmdline
initrd=/boot/initrd.img-3.11.0-18-generic ro quiet BOOT_IMAGE=/boot/vmlinuz-3.11.0-18-generic

ตรวจสอบโมดูลที่โหลด

(initramfs) cat /proc/modules
e1000 145368 0 - Live 0xffffffffa0000000

/ boot เนื้อหาของโฟลเดอร์

$ sudo ls -l boot
-rw------- 1 root root 3296162 Feb 18 22:37 System.map-3.11.0-18-generic
-rw-r--r-- 1 root root 1007681 Feb 18 22:37 abi-3.11.0-18-generic
-rw-r--r-- 1 root root  163258 Feb 18 22:37 config-3.11.0-18-generic
drwxr-xr-x 2 root root    4096 Mar 17 20:13 extlinux
-rw-r--r-- 1 root root 4995000 Mar 16 23:35 initrd.img-3.11.0-18-generic
-rw------- 1 root root 5634192 Feb 18 22:37 vmlinuz-3.11.0-18-generic

จะทำให้ระบบนี้บูตไปยังพรอมต์ bash ที่เป็นค่าเริ่มต้นได้อย่างไร


ทำไมภาพสองภาพเริ่มต้น คุณช่วยวางมันลงบนดิสก์จริงแล้วลองบู๊ตได้ไหม? Qemu และ EFI มีปัญหา - ตัวอย่างเช่นถ้าคุณไม่ใช้อิมเมจสำหรับบูตเฟิร์มแวร์ของ EFI คุณจะไม่ไปไกลเลย
mikeserv

และหากสิ่งที่คุณต้องการคือพรอมต์ทุบตีคุณสามารถรวมทุบตีใน initramfs ของคุณ ...
mikeserv

ในความเป็นจริงฉันจำได้ว่ากำลังดูพาร์ติชัน LARGE GPT ใน Ubuntu และพวกเขาลงทะเบียนว่าว่างเปล่าอย่างสมบูรณ์ หลังจากฉันเปลี่ยนกะเมื่อรีบูตเพื่อรับการเลือกด้วงสำหรับดิสก์สดของพวกเขาฉันสามารถเลือกตัวเลือก Efi หลังจากนั้นฉันมีดิสก์
mikeserv

คำตอบ:


11

ปรับเปลี่ยนพารามิเตอร์การบูตเคอร์เนลโดยการตั้งค่าroot=/dev/sdaXตัวเลือก sdaXจะเป็น/หรือrootพาร์ติชันของคุณ เมื่อบู๊ตในครั้งต่อไปคุณจะเห็นว่าคุณinitramfsพยายามเมาต์พาร์ติชันก่อนที่จะพยายามเข้าถึง/etc/fstabและติดตั้งระบบไฟล์

ดูคำถาม " initramfs ใช้ / etc / fstab หรือไม่ " สำหรับรายละเอียดเพิ่มเติม


การเพิ่มการroot=/dev/sdaX ปรับปรุงสถานการณ์ไม่มีอีกต่อไป(initramfs)แต่เป็นbashพรอมต์การเข้าสู่ระบบแทน
Backup Pro

1
นอกจากการเพิ่มroot=/dev/sdaXเคอร์เนลการบูตด้วยตนเองแล้วฉันจำเป็นต้องอัปเดต/mnt/etc/default/extlinuxและเปลี่ยนEXTLINUX_ROOT=""เป็นการแนะนำEXTLINUX_ROOT="/dev/sdaX"และรันextlinux-updateอีกครั้ง
Backup Pro

10

สิ่งที่คุณต้องเข้าใจinitramfsคือมันเป็นระบบไฟล์ ตั้งแต่เคอร์เนล 2.6 มันเป็นพื้นระบบแฟ้มเพียงเคอร์เนลที่กำหนด (วีเอฟเอออกจากกันซึ่งเป็นเนื้อหาที่ยังระบบแฟ้ม) บนเครื่องของคุณ คุณinitramfs imageคือภาพดิสก์

ภายในความต้องการของคุณinitramfs imageจะเป็นไฟล์อะไรก็ตามการแจกจ่ายที่คุณตัดสินใจนั้นสำคัญมากพอที่จะต้องการก่อนที่จะพบดิสก์รูท โดยปกติจะเป็น Busybox และโมดูลเคอร์เนลอะไรก็ตามที่คุณต้องการค้นหาและติดตั้งอุปกรณ์รูทของคุณ สิ่งนี้ไม่ได้ผลสำหรับคุณ

แม้ว่าจะไม่มีความลึกลับที่แท้จริงที่นี่ทุกสิ่งถือว่า หากคุณสามารถหาทางไปรอบ ๆ สถานีแจ้งเตือนคุณสามารถนำทางinitramfs.แต่ก่อนอื่นคุณต้องเข้าใจอย่างถ่องแท้

สิ่งที่สำคัญที่สุดและอีกครั้ง - นี่เป็นเพียง/.ลินุกซ์รูทที่ทำสิ่งที่พิมพ์บนรูทลินุกซ์ อันที่จริงถ้ามันอยู่ในไฟล์แยกต่างหากจากเคอร์เนลของคุณมันเป็นอุปกรณ์รูทที่สองของคุณอยู่แล้ว เคอร์เนลลินุกซ์ทุกอันมีพื้นว่างเปล่า/ทั้งหมดซึ่งมันจะเมานท์ก่อนที่จะดึงเข้ามาinitramfs.

ยิ่งไปกว่าinitramfsนั้นคือรากที่แท้จริง เป็นที่ซึ่งเคอร์เนลของลีนุกซ์เริ่มต้น userspace โดยการดำเนินการinitและยกเลิกความรับผิดชอบทั้งหมดสำหรับปัญหาใด ๆ ที่คุณอาจพบหลังจากนั้น initดูเหมือนว่าคุณจะเป็น Busybox เหมือนอย่างมากซึ่งหมายถึงการควบคุมการกระทำของมันควรจะง่ายเหมือนการแก้ไขเชลล์สคริปต์ที่มาพร้อมกัน

แล้วทำไมข้อผิดพลาดเกี่ยวกับการไม่ค้นหาinit?เกือบแน่นอนนี้อ้างถึงโปรแกรมที่ชื่อinitจริงของคุณinitได้รับคำสั่งผ่านเชลล์สคริปต์เพื่อดำเนินการเอง

สำหรับฉันที่โดดเด่นที่สุดคือระบบไฟล์เคอร์เนลหลอก - dev sys proc- ไม่เมา นี่อาจเป็นปัญหาหรือเป็นเงื่อนงำที่ดีมากก็ได้ คุณพูดถึง KVM ที่พาฉันไปถามความสามารถของเคอร์เนล แต่ก่อนที่เราจะลงไปบนถนนที่มืดมนและขรุขระเราจะลองอย่างอื่นก่อนได้ไหม?

cd /root || mkdir /root

มันทำให้ฉันเห็นว่าข้อความแสดงข้อผิดพลาดซ้ำ ๆ :

ไม่พบไฟล์หรือโฟลเดอร์ที่คุณค้นหา

ความล้มเหลวที่คุณต้องสร้างinitramfsภาพของคุณใหม่ บูตไปยังแผ่นดิสก์สดเพื่อทำเช่นนั้นและเรียกใช้เครื่องมือใด ๆ ที่การแจกจ่ายของคุณจัดเตรียมไว้เพื่อให้บรรลุจุดสิ้นสุดนั้น โอ้และโปรดตรวจสอบให้แน่ใจว่าดิสก์สดนี้โหลดในโหมดEFI

ดังนั้นนี่เป็นเพียงสิ่งที่ผิดปกติอย่างแท้จริงเท่านั้น initramfs - switchroot.

เคอร์เนล Linux มอบ syscall ที่พิเศษมากสำหรับผู้ใช้ช่วงแรก ๆ และจัดการการย้ายจากinitramfsไปยังอุปกรณ์รูทของคุณ มันทำงานได้โดยการติดตั้งดิสก์รูทของคุณลงในจุดเมานท์initramfsก่อนแล้วหมุนแกนระบบไฟล์รูทเข้าไป ฉันสมมติว่าinitramfs'sจุดเมานท์เป้าหมายของคุณrootขึ้นอยู่กับวิธีที่มันส่งเสียงครวญครางเกี่ยวกับมัน ทำไมไม่ทำให้แน่ใจว่ามันอยู่ที่นั่น

สำหรับการตรวจสอบเพิ่มเติมคุณจะต้องได้รับความเมตตาเล็กน้อย ปรับ bootloader ของคุณให้ผ่าน ...

init=/bin/sh

... เป็นพารามิเตอร์เคอร์เนล


... จุดเมาท์เป้าหมายคือรูท ... ทำไมไม่แน่ใจว่ามีอยู่หรือไม่ ฉันไม่ได้มีความคิด Foggiest วิธีการตรวจสอบนี้
Backup Pro

คุณไม่ต้องการอีกต่อไป คุณได้ทุบตีซึ่งหมายความว่าคุณเป็นผู้เริ่มต้นที่ผ่านมา แต่คุณยังอยู่ใน kvm?
mikeserv

ใช่ฉันยังอยู่ใน kvm
Pro Backup

@ProBackup ถ้าคุณทำที่นั่นคุณจะต้องให้คนอื่นได้รับรางวัลของคุณ - นั่นคือสิ่งที่คุณระบุไว้คือเป้าหมายของคุณ ไม่เป็นไร - เห็นได้ชัดว่าคุณได้ทำไปแล้ว ฉันอยากรู้ว่าทำไมคุณต้องระบุภาพเริ่มต้นสองภาพ - เหตุใดจึงเริ่มต้นและเริ่มต้นระบบ นั่นคืออะไร? ฉันควรจะรู้ว่าถ้ามีอะไรคุณสามารถออกจากการทำงานefibootmgrที่พร้อมท์ของคุณในเครื่องเสมือนของคุณ
mikeserv

ฉันได้ตั้งคำถาม SE ใหม่สำหรับสาเหตุ: unix.stackexchange.com/questions/120999/…หมายเหตุ: ฉันคิดว่า KVM (Parallels Desktop v8) นี้มี BIOS (ไม่ใช่ UEFI) เนื่องจากข้อความบูต BIOS
Backup Pro

0

ผมมีปัญหาเหมือนกัน. สิ่งที่อเล็กซ์พูดถูกต้อง ก่อนอื่นฉันปรับ fstab ของฉัน แต่นั่นก็ไม่ได้ช่วยอะไร ดังนั้นฉันตรวจสอบด้วงของฉัน หากคุณมีความเป็นไปได้ในการเข้าถึงเมนูด้วง

  • เลือก Linux สิ่งที่คุณต้องการเริ่มและสร้างปัญหา
  • กด 'e' และค้นหา 'boot_image' หรือ 'boot ... root'
  • ตรวจสอบ ' uuid '
  • ในกรณีของฉันมันผิด ฉันสร้างรูปภาพใน initramfs โดยพิมพ์ 'blkid' แล้วนำ uuid ที่ติดตั้ง linux ของพาร์ติชันของฉัน
  • ส่ง uuid ที่ถูกต้องจาก blkid ไปยังด้วง -> boot_image

นั่นช่วยแก้ไขปัญหาของฉัน หลังจากรีบูทลินุกซ์ของฉันต้องใช้เวลานานในการเริ่มตรวจสอบดิสก์ แต่ตอนนี้มันทำงานได้อีกครั้ง

ฉันหวังว่าฉันจะช่วยคุณ

ความนับถือ

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