Làm cách nào để sửa lỗi khởi động vào dấu nhắc initramfs và mount mount: không thể đọc '/ etc / fstab': Không có tập tin hoặc thư mục nào như vậy.


25

Cài đặt hệ thống mới bằng đĩa được phân vùng GPT dành riêng cho một phân vùng duy nhất, ext4 được định dạng, extlinux (phiên bản 4.05) làm bộ nạp khởi động, Ubuntu Core phiên bản 13.10 amd64 làm rootfs và Ubuntu linux-image-3.11.0-18-generic làm kernel, và extlinux-update để tạo cấu hình bootloader.

Kết quả sau khi khởi động lại (vẫn bên trong máy ảo dựa trên KVM) là một dấu nhắc (initramfs) và các thông báo sau:

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 là v1.20.2.

Hồi quy:

  • hệ thống tập tin đã được kiểm tra với fsck.ext4

Kiểm tra sự tồn tại của root

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

Đối số khởi động gốc

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

Kiểm tra các mô-đun được tải

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

/ khởi động nội dung thư mục

$ 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

Làm thế nào để làm cho hệ thống này khởi động đến dấu nhắc bash mặc định dự kiến?


Tại sao hai hình ảnh init? Bạn có thể vui lòng đặt cái này lên một đĩa thực tế và thử khởi động nó không? Qemu và EFI có vấn đề - ví dụ: nếu bạn không sử dụng hình ảnh phần sụn khởi động EFI, bạn sẽ không nhận được rất xa.
mikeerv

Và nếu tất cả những gì bạn muốn là một dấu nhắc bash, bạn luôn có thể bao gồm bash trong initramfs của mình ...
mikeerv 22/03/2016

Trên thực tế, tôi nhớ rằng đã xem xét các phân vùng LPTGE GPT trong Ubuntu và chúng đăng ký hoàn toàn trống rỗng. Sau khi tôi tổ chức ca khi khởi động lại để có được lựa chọn của grub cho đĩa trực tiếp của họ, tôi đã có thể chọn tùy chọn Efi, sau đó tôi có một đĩa.
mikeerv

Câu trả lời:


11

Sửa đổi tham số khởi động kernel của bạn bằng cách đặt root=/dev/sdaXtùy chọn. sdaXsẽ là /hoặc rootphân vùng của bạn . Khi khởi động lần sau, bạn sẽ thấy rằng bạn initramfscố gắng gắn kết phân vùng trước khi cố gắng truy cập /etc/fstabvà gắn hệ thống tệp.

Xem câu hỏi " Liệu initramfs có sử dụng / etc / fstab không? " Để biết thêm chi tiết.


Thêm root=/dev/sdaX cải thiện tình hình, không còn là (initramfs)một bashdấu nhắc đăng nhập thay thế.
Sao lưu dự phòng

1
Bên cạnh việc thêm thủ công vào root=/dev/sdaXkernel boot, tôi cần cập nhật /mnt/etc/default/extlinuxvà thay đổi EXTLINUX_ROOT=""thành gợi ý EXTLINUX_ROOT="/dev/sdaX"và chạy extlinux-updatelại.
Sao lưu dự phòng

10

Những gì bạn cần hiểu initramfslà nó là một hệ thống tập tin. Vì kernel 2.6, về cơ bản, là hệ thống tập tin áp đặt kernel duy nhất (bỏ qua VFS, cũng được cho là hệ thống tập tin) trên máy của bạn. Bạn initramfs imagelà một hình ảnh đĩa.

Trong phạm vi của bạn initramfs imagesẽ là bất kỳ tệp nào mà bản phân phối của bạn quyết định đủ quan trọng để yêu cầu trước khi tìm thấy đĩa gốc của bạn. Thông thường đó là Busybox và bất kỳ mô-đun hạt nhân nào bạn cần để tìm và gắn thiết bị gốc của mình. Điều này không làm việc cho bạn.

Không có bí ẩn thực sự ở đây mặc dù, tất cả mọi thứ xem xét. Nếu bạn có thể tìm đường xung quanh dấu nhắc thiết bị đầu cuối, bạn có thể điều hướng initramfs.Nhưng trước tiên bạn phải làm sáng tỏ nó.

Đầu tiên và quan trọng nhất và một lần nữa - đây chỉ /.là gốc Linux thực hiện các thao tác gốc của Linux. Trong thực tế, nếu nó nằm trong một tệp riêng biệt từ kernel của bạn, thì nó thực sự đã là thiết bị gốc thứ hai của bạn. Mọi nhân Linux đều chứa một cái trống cơ bản,/ tất cả đều chứa trước khi nó được gắn vào trước khi lấyinitramfs.

Những gì nhiều hơn initramfslà gốc thực sự . Đó là nơi nhân Linux khởi tạo không gian người dùng bằng cách thực thi initvà sau đó từ bỏ mọi trách nhiệm đối với bất kỳ vấn đề nào bạn có thể gặp phải sau đó. Bạn initdường như là Busybox, cũng như nhiều người, điều đó có nghĩa là việc kiểm soát các hành động của nó cũng đơn giản như chỉnh sửa các tập lệnh shell đi kèm.

Vậy thì tại sao lỗi về việc không tìm thấy init?Hầu như chắc chắn điều này liên quan đến một chương trình có tên initmà thực tế của bạn initđã được hướng dẫn qua shell script để tự thực thi.

Đáng chú ý nhất với tôi là hệ thống tập tin giả nhân - dev sys proc- không gắn kết. Điều này hoặc là rất rắc rối hoặc là một đầu mối rất tốt. Bạn đề cập đến KVM dẫn tôi đến câu hỏi về khả năng của hạt nhân, nhưng trước khi chúng ta đi vào con đường tối tăm và tồi tàn đó, trước tiên chúng ta có thể thử điều gì khác không?

cd /root || mkdir /root

Tôi nhận ra rằng thông báo lỗi được lặp đi lặp lại:

Không có tập tin hoặc thư mục

Không cần phải xây dựng lại initramfshình ảnh của bạn . Khởi động vào đĩa trực tiếp để làm như vậy và chạy bất kỳ công cụ nào mà bản phân phối của bạn cung cấp để thực hiện kết thúc đó. Ồ, và vui lòng đảm bảo rằng đĩa trực tiếp này được tải ở chế độ EFI .

Vì vậy, đây là điều thực sự khác thường duy nhất về initramfs - switchroot.

Nhân Linux cung cấp một tòa nhà rất đặc biệt dành cho không gian người dùng sớm và xử lý việc chuyển từ initramfsthiết bị đĩa gốc của bạn. Nó hoạt động bằng cách đầu tiên gắn đĩa gốc của bạn vào một điểm gắn kết initramfsvà sau đó xoay hệ thống tập tin gốc vào nó. Tôi giả sử initramfs'sđiểm gắn kết mục tiêu của bạn rootdựa trên cách nó tiếp tục rên rỉ về nó. Tại sao không chắc chắn rằng nó ở đó?

Để điều tra thêm, bạn sẽ cần phải có một chút gritty. Điều chỉnh bộ nạp khởi động của bạn để vượt qua ...

init=/bin/sh

... Là một tham số kernel.


... Điểm gắn kết mục tiêu là root ... Tại sao không chắc chắn rằng nó ở đó? Tôi đã không có ý tưởng sương mù làm thế nào để xác minh điều này.
Sao lưu dự phòng

Bạn không cần phải nữa. Youve có bash có nghĩa là bạn đã qua initramfs. Nhưng bạn vẫn còn trong kvm?
mikeerv

Vâng, tôi vẫn còn ở kvm.
Sao lưu dự phòng

@ProBackup Nếu bạn thực hiện nó ở đó, bạn cần đưa cho anh chàng kia tiền thưởng của bạn - dù sao đó là những gì bạn đã nêu là mục tiêu của bạn. Nevermind - youve rõ ràng đã làm như vậy. Tôi tò mò muốn biết tại sao bạn cần chỉ định hai hình ảnh init - tại sao initrd và boot? Đó là gì? Tôi cũng muốn biết những gì, nếu có bất cứ điều gì, bạn có thể thoát khỏi việc chạy efibootmgrtại dấu nhắc của bạn trong máy ảo của bạn.
mikeerv

Tôi đã đặt câu hỏi SE mới cho lý do tại sao: unix.stackexchange.com/questions/120999/iêu Lưu ý: Tôi nghĩ rằng KVM (Parallels Desktop v8) này chỉ có BIOS (không phải UEFI) do thông báo khởi động BIOS.
Sao lưu dự phòng

0

Tôi đã từng gặp vấn đề tương tự. Những gì Alex nói là chính xác. Đầu tiên tôi điều chỉnh fstab của mình nhưng điều đó không giúp được gì. Vì vậy, tôi đã kiểm tra grub của tôi. Nếu bạn có khả năng truy cập menu grub.

  • Chọn Linux, những gì bạn muốn bắt đầu và gây rắc rối.
  • Nhấn 'e' và tìm 'boot_image' hoặc 'boot ... root'.
  • Kiểm tra ' uuid '.
  • Trong trường hợp của tôi, nó đã sai. Tôi tạo một hình ảnh trong initramfs bằng cách gõ 'blkid' và lấy uuid trên phân vùng mà linux của tôi được cài đặt.
  • Vượt qua uuid chính xác từ blkid sang grub -> boot_image.

Điều đó đã giải quyết vấn đề của tôi. Sau khi khởi động lại, linux của tôi cần thời gian dài hơn để bắt đầu kiểm tra đĩa. Nhưng bây giờ nó hoạt động trở lại.

Tôi hy vọng tôi có thể giúp bạn.

Trân trọng

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.