嘗試安裝內建核心並重新啟動後,我收到錯誤:
安裝:在 /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-virt
為LINUX vmlinuz
- 嘗試將 VirtualBox 儲存控制器切換到 AHCI、virtio-scsi 和 PIIX4。
可能有幫助:
我檢查了錯誤和 extlinux.conf 中指定的 UUID。它標識 /dev/sda3。但是,當我在啟動失敗後進入緊急復原 shell 並檢查 /dev 目錄時,它不存在。不知道為什麼。
lsmod 顯示沒有載入任何模組。我認為這不應該發生。
文件
.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)。然後核心能夠載入模組 -> 讀取磁碟 -> 從所需的磁碟啟動。