Mounting UUID=xxx on /sysroot failed: No Such device - 在 Linux 核心安裝後發生

Mounting UUID=xxx on /sysroot failed: No Such device - 在 Linux 核心安裝後發生

嘗試安裝內建核心並重新啟動後,我收到錯誤:

安裝:在 /sysroot 上安裝 UUID=59c56381-e5ec-4a8b-8c2e-f9c6a66d524c 失敗:沒有這樣的設備

為什麼會發生這種情況?我怎麼能修復這個問題以正確啟動?

關於系統

  • Alpine Linux 3.12_alpha20200319(邊緣)-Alpine Linux 虛擬版
  • 核心 5.4.31-0-virt
  • 在 VirtualBox 中運行

內核建置步驟

wget https://mirrors.edge.kernel/pub/linux/kernel/v5.x/linux-5.4.30.tar.xz
tar -xf linux-5.4.30.tar.xz
cp /boot/config-virt /home/name/build/.config
make -C /home/name/linux-5.4.30 O=/home/name/build listnewconfig
make -j4 -C /home/name/linux-5.4.30 O=/home/name/build
cd /home/name/build
make modules_install

以下步驟我不確定:

cp System.map /boot/System.map-virt
cp arch/x86_64/boot/bzImage /boot/vmlinuz-virt
cp .config /boot/config-virt

我不運行,make install因為它通過了 arch/x86/boot/bzImage。因此,我猜它正在安裝 32 位元和 64 位元。所以我嘗試手動安裝。

我的 extlinux.conf 檔案:

DEFAULT menu.c32
PROMPT 0
MENU TITLE Alpine/Linux Boot Menu
MENU HIDDEN
MENU AUTOBOOT Alpine will be booted automatically in # seconds
TIMEOUT 30
LABEL virt
  MENU LABEL linux virt
  LINUX vmlinuz-virt
  INITRD initramfs-virt
  APPEND root=UUID=59c56381-e5ec-4a8b-8c2e-f9c6a66d524c moudles=sd-mod,usb-storage,ext4 quiet rootfstype=ext4

MENU SEPARATOR

嘗試修復

(以下所有內容仍然會導致相同的錯誤)

  • 重啟前mkinitfs在目錄中運行/
  • 跑步extlinux --install /boot
  • 相反,在建置目錄中運行make install並將 extlinux.conf 行更改LINUX vmlinuz-virtLINUX vmlinuz
  • 嘗試將 VirtualBox 儲存控制器切換到 AHCI、virtio-scsi 和 PIIX4。

可能有幫助:

我檢查了錯誤和 extlinux.conf 中指定的 UUID。它標識 /dev/sda3。但是,當我在啟動失敗後進入緊急復原 shell 並檢查 /dev 目錄時,它不存在。不知道為什麼。

lsmod 顯示沒有載入任何模組。我認為這不應該發生。

如果我通過鍵入繼續啟動,exit我會遇到內核恐慌內核恐慌截圖

文件

.config-https://github.com/alpinelinux/aports/blob/master/main/linux-lts/config-virt.x86_64

extlinux.conf -https://pastebin.com/QMkePsqS

mkinitfs.conf -https://pastebin.com/rksn7GcN

答案1

正如帖子中提到的,

lsmod 顯示沒有載入任何模組。我認為這不應該發生

問題是因為模組沒有載入到核心中。目前運行的核心版本是 5.4.31-0-virt wap,正在建置的版本是 5.4.30。正在安裝的模組被放置到/lib/modules/5.4.30目錄中。這導致在沒有正確的核心模組的情況下建置初始 RAM 磁碟 (initramfs),因此無法在啟動時載入。

若要解決此問題,在建置 initramfs 時安裝核心模組後,應使用下列命令:

mkinitfs -o /boot/initramfs-virt 5.4.30

此命令包括 initramfs 中 5.4.30 核心的已安裝模組,而不是預設版本uname -r(在本例中為 5.4.31-0-virt)。然後核心能夠載入模組 -> 讀取磁碟 -> 從所需的磁碟啟動。

相關內容