Boot

在 /sysroot 上掛載 UUID=xxx 失敗:沒有這樣的設備 - 在 linux 核心安裝後發生

  • January 21, 2022

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

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

為什麼會這樣?如何解決此問題以正確啟動?

關於系統

  • Alpine Linux 3.12_alpha20200319 (edge) – Alpine Linux Virtual
  • 核心 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-virt更改為LINUX 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

正如文章中提到的,

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

問題是因為模組沒有被載入到核心中。目前執行的核心版本是 5.4.31-0-virt wand,正在建構的版本是 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)。然後核心能夠載入模組 -> 讀取磁碟 -> 從所需的磁碟引導。

引用自:https://unix.stackexchange.com/questions/579035