如何修復引導進入 initramfs 提示和“mount: can’t read ‘/etc/fstab’: No such file or directory”和“No init found”?
使用專用於單個分區的GPT分區磁碟安裝新系統, ext4格式,extlinux(版本 4.05)作為引導載入程序,Ubuntu Core 版本 13.10 amd64 作為 rootfs,Ubuntu linux-image-3.11.0-18-generic 作為核心,和 extlinux-update 生成引導載入程序配置。
重新啟動後(仍在基於 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 提示符?
root=/dev/sdaX
通過設置選項修改核心引導參數。sdaX
將是您的/
或root
分區。下次啟動時,您將看到您在嘗試訪問和安裝文件系統initramfs
之前嘗試安裝分區。/etc/fstab
有關詳細資訊,請參閱問題“ initramfs 是否使用 /etc/fstab? ”。
您需要了解*
initramfs
的是它是一個文件系統。從核心 2.6 開始,它基本上是您機器上唯一一個核心強加的文件系統(撇開 VFS 不談,它也可以說是一個文件系統)。你initramfs image
*的是一個磁碟映像。在您的*
initramfs image
*文件中,您的發行版決定了在找到您的根磁碟之前需要足夠重要的任何文件。通常那是 Busybox 以及您需要查找和掛載根設備的任何核心模組。這對你不起作用。不過,考慮到所有事情,這裡並沒有真正的奧秘。如果你能在終端提示中找到你的方式,你可以導航*
initramfs.
*但首先你必須揭開它的神秘面紗。首先,再一次——這只是*
/.
它的 Linux 根在做 Linux 根類型的事情。事實上,如果它位於與核心不同的文件中,它實際上已經是您的第二個根設備。每個 Linux 核心都包含一個基本上是空/
的,它首先安裝它,然後再拉入你的initramfs.
*更何況*
initramfs
是真正的根源。這是 Linux 核心通過執行init
並隨後放棄對您之後可能遇到的任何問題的所有責任來初始化使用者空間的地方。你init
*似乎是 Busybox,就像許多人一樣,這意味著控制它的動作應該像編輯它的附帶的 shell 腳本一樣簡單。那麼為什麼關於找不到的錯誤*
init?
幾乎肯定是指一個名為的程序init
,您的實際init
*已通過 shell 腳本指示將其自身執行到該程序中。對我來說最引人注目的是核心偽文件系統——*
dev sys proc
*不掛載。這要麼是非常令人不安,要麼是一個非常好的線索。您提到 KVM 讓我質疑核心功能,但在我們走上那條黑暗和車轍的道路之前,我們可以先嘗試其他東西嗎?cd /root || mkdir /root
令我震驚的是,錯誤消息反復出現:
沒有相應的文件和目錄
失敗,你需要重建你的*
initramfs
形象。啟動到實時光碟以執行此操作並執行您的發行版提供的任何工具來實現這一目標。哦,請確保此 live 磁碟以EFI*模式載入。所以這是唯一真正不尋常的事情*
initramfs - switchroot.
*Linux 核心提供了一個非常特殊的系統呼叫,用於早期使用者空間並處理從*
initramfs
根磁碟設備的移動。它的工作原理是首先將您的根磁碟安裝到一個安裝點,initramfs
然後將根文件系統旋轉到其中。我假設您的initramfs's
目標掛載點是root
*基於它不斷抱怨它的方式。為什麼不確保它在那裡?為了進一步調查,你需要變得有點堅韌不拔。調整您的引導載入程序以通過…
init=/bin/sh
…作為核心參數。