Bagaimana cara memperbaiki boot ke prompt initramfs dan “mount: tidak dapat membaca '/ etc / fstab': Tidak ada file atau direktori” dan “No init found”?

25

Menginstal sistem baru menggunakan disk yang dipartisi GPT yang didedikasikan untuk satu partisi, diformat ext4 , extlinux (versi 4.05) sebagai bootloader, Ubuntu Core versi 13.10 amd64 sebagai rootfs, dan Ubuntu linux-image-3.11.0-18-generic as kernel, dan extlinux-update untuk menghasilkan konfigurasi bootloader.

Hasil setelah reboot (masih di dalam mesin virtual berbasis KVM) adalah prompt (initramfs) dan pesan-pesan ini:

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 adalah v1.20.2.

Regresi:

  • sistem file telah diperiksa fsck.ext4

Periksa keberadaan root

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

Rooting argumen root

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

Periksa modul yang dimuat

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

/ boot konten folder

$ 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

Bagaimana membuat sistem ini boot ke bash prompt default yang diharapkan?

Pro Backup
sumber
Mengapa dua gambar init? Bisakah Anda meletakkan ini di disk yang sebenarnya dan mencoba untuk boot? Qemu dan EFI memiliki masalah - misalnya, jika Anda tidak menggunakan image firmware boot EFI, Anda tidak akan mendapatkan apa-apa.
mikeserv
Dan jika semua yang Anda inginkan adalah bash prompt, Anda selalu dapat menyertakan bash di initramfs Anda ...
mikeserv
Bahkan, saya ingat melihat partisi GPT BESAR di Ubuntu dan mereka mendaftar sebagai benar-benar kosong. Setelah saya memegang shift saat reboot untuk mendapatkan pilihan grub untuk live disk mereka, saya dapat memilih opsi Efi, setelah itu saya memiliki disk.
mikeserv

Jawaban:

11

Ubah parameter boot kernel Anda dengan mengatur root=/dev/sdaXopsi. sdaXakan menjadi partisi /atau Anda root. Setelah mem-boot di waktu berikutnya, Anda akan melihat bahwa Anda initramfsmencoba memasang partisi sebelum mencoba mengakses /etc/fstabdan memasang sistem file.

Lihat pertanyaan " Apakah initramfs menggunakan / etc / fstab? " Untuk lebih jelasnya.

Alex
sumber
Menambahkan root=/dev/sdaX meningkatkan situasi, tidak ada lagi (initramfs)tetapi bashprompt login sebagai gantinya.
Pro Backup
1
Selain secara manual menambahkan root=/dev/sdaXke boot kernel, saya perlu memperbarui /mnt/etc/default/extlinuxdan mengubah EXTLINUX_ROOT=""ke yang disarankan EXTLINUX_ROOT="/dev/sdaX"dan menjalankan extlinux-updatelagi.
Pro Backup
10

Yang perlu Anda pahami initramfsadalah bahwa itu adalah sistem file. Karena kernel 2.6, pada dasarnya, ini adalah satu-satunya filesystem yang dipaksakan kernel (mengesampingkan VFS, yang bisa dibilang juga merupakan filesystem) pada mesin Anda. Anda initramfs imageadalah disk image.

Dalam initramfs imagekehendak Anda, file apa pun yang ditentukan distribusi Anda cukup penting untuk diminta sebelum root disk Anda ditemukan. Biasanya itu Busybox dan modul kernel apa pun yang Anda butuhkan untuk menemukan dan memasang perangkat root Anda. Ini tidak bekerja untukmu.

Tidak ada misteri nyata di sini, semua hal dipertimbangkan. Jika Anda dapat menemukan jalan di sekitar terminal prompt, Anda dapat menavigasi initramfs.Tapi pertama Anda harus demistify itu.

Pertama dan terpenting dan sekali lagi - ini hanyalah /.Linux root yang melakukan hal-hal jenis root Linux. Faktanya, jika berada di file terpisah dari kernel Anda, sebenarnya itu sudah menjadi perangkat root kedua Anda. Setiap Linux kernel mengandung dasarnya mengosongkan /semua sendiri yang tunggangan pertama sebelum menarik di Andainitramfs.

Terlebih lagi initramfsadalah root yang sebenarnya . Di sinilah kernel Linux menginisialisasi userspace dengan mengeksekusi initdan kemudian melepaskan semua tanggung jawab untuk setiap masalah yang mungkin Anda temui sesudahnya. initTampaknya Anda Busybox, seperti banyak, yang berarti mengendalikan tindakannya harus sesederhana mengedit skrip shell yang menyertainya.

Lalu mengapa kesalahan tentang tidak menemukan? init?Hampir pasti ini merujuk ke sebuah program bernama inityang sebenarnya Anda inittelah diinstruksikan melalui skrip shell untuk mengeksekusi dirinya sendiri.

Yang paling mencolok bagi saya adalah bahwa sistem file pseudo kernel - dev sys proc- jangan mount. Ini bisa sangat mengganggu atau petunjuk yang sangat bagus. Anda menyebutkan KVM yang membuat saya mempertanyakan kemampuan kernel, tetapi sebelum kita melewati jalan yang gelap dan kumuh itu, dapatkah kita terlebih dahulu mencoba sesuatu yang lain?

cd /root || mkdir /root

Menurut saya, pesan kesalahan itu berulang kali:

tidak ada berkas atau direktori seperti itu

Gagal yang Anda butuhkan untuk membangun kembali initramfsgambar Anda . Boot ke live disc untuk melakukannya dan jalankan alat apa pun yang disediakan distribusi Anda untuk mencapai tujuan itu. Oh, dan pastikan disk langsung ini dimuat dalam mode EFI .

Jadi, inilah satu-satunya hal yang benar-benar di luar kebiasaan initramfs - switchroot.

Kernel Linux menyediakan syscall yang sangat khusus untuk ruang pengguna awal dan menangani perpindahan dari initramfske perangkat root disk Anda. Ini bekerja dengan pertama-tama memasang disk root Anda ke mountpoint di initramfsdan kemudian memutar sistem file root ke dalamnya. Saya berasumsi initramfs'starget mount point Anda rootdidasarkan pada cara ia terus mengeluh tentang hal itu. Mengapa tidak memastikan itu ada di sana?

Untuk penyelidikan lebih lanjut, Anda perlu sedikit berpasir. Sesuaikan bootloader Anda untuk lulus ...

init=/bin/sh

... sebagai parameter kernel.

mikeserv
sumber
... target mount point adalah root ... Mengapa tidak memastikan itu ada di sana? Saya tidak punya ide foggiest bagaimana memverifikasi ini.
Pro Backup
Anda tidak perlu lagi. Anda sudah mendapat bash yang berarti Anda sudah lewat initramfs. Tapi apakah Anda masih di kvm?
mikeserv
Ya, saya masih di kvm.
Pro Backup
@ ProBackup Jika Anda berhasil di sana, Anda perlu memberi hadiah kepada orang lain - itulah yang Anda nyatakan adalah tujuan Anda. Nevermind - Anda tampaknya sudah melakukannya. Saya ingin tahu mengapa Anda perlu menentukan dua gambar init - mengapa initrd dan boot? Apa itu? Saya juga ingin tahu apa, jika ada, Anda bisa keluar dari menjalankan efibootmgrprompt Anda di mesin virtual Anda.
mikeserv
Saya telah membuat pertanyaan SE baru untuk alasannya: unix.stackexchange.com/questions/120999/... Catatan: Saya pikir KVM (Parallels Desktop v8) ini hanya memiliki BIOS (bukan UEFI) karena pesan booting BIOS.
Pro Backup
0

Saya memiliki masalah yang sama. Apa yang dikatakan Alex benar. Pertama saya mengatur fstab saya tetapi itu tidak membantu. Jadi, saya memeriksa grub saya. Jika Anda memiliki kemungkinan untuk mengakses menu grub.

  • Pilih Linux, apa yang ingin Anda mulai dan yang membuat masalah.
  • Tekan 'e' dan cari 'boot_image' atau 'boot ... root'.
  • Periksa ' uuid '.
  • Dalam kasus saya, itu salah. Saya membuat gambar di initramfs dengan mengetikkan 'blkid' dan mengambil uuid di mana partisi linux saya diinstal.
  • Melewati uuid yang benar dari blkid ke grub -> boot_image.

Itu memecahkan masalah saya. Setelah reboot Linux saya membutuhkan waktu lebih lama untuk mulai memeriksa disk. Tapi sekarang berhasil lagi.

Saya berharap bisa membantumu.

Salam

Abe Nudel
sumber