initramfs 中的空 fstab 启动问题

initramfs 中的空 fstab 启动问题

我最近从 USB 重新安装了 Linux Mint 19.2,一切顺利。但是,启动系统后,它会卡在 initramfs 处。上面的错误消息表明

Mount: mounting /dev on /root/dev failed: no such file or directory
Mount: mounting /run on /root/run failed: no such file or directory
run-init: opening console: No such file or directory
Target: filesystem doesn't have requested /sbin/init.
Try passing init= bootarg.

我从 initramfs 对我的根分区 sda2 进行了一次 fsck,结果是干净的。我用 e2fsck 重复了一遍,结果相同。我再次启动 USB 上的 Live-System,安装 sda1(我的 EFI 启动分区)和 sda2,并检查 grub 和 fstab 中的 UUID 值是否一致。现在我再次陷入 initramfs 中,查看其上 /etc 的内容,发现 fstab 的大小为 0 字节。

(initramfs) ls -la /etc/fs*
-rw-r--r--   1        0 /etc/fstab

因此无法安装 /dev/sda2(fstab 中没有条目)。现在,我不确定此时是否应该包含任何内容,因为这显然不是 /etc 中 /dev/sda2 上的 fstab,但坦率地说,我不知道还有什么可能导致系统找不到根分区,当grub和fstab从实时系统中看到时似乎没问题。

顺便说一句,这是我第一次在带有 EFI 的系统上安装,EFI 启动分区 (vfat) 为 1GB (sda1)。在安装之前,我确保以 EFI 模式启动实时系统(事实上,我在 BIOS 中禁用了传统模式,因此它只会向我显示 EFI 可启动操作系统)。是否有其他我应该注意的设置可能会导致系统找不到其根分区?在 init= 之后我可以传递给引导加载程序的值是什么?

如果有助于确定此处的问题,请随时询问其他信息。谢谢!

添加:在 sda1 上,/EFI/ubuntu 中有一个 grub.cfg,内容如下:

search.fs_uuid 734be585-8baf-408e-850a-69555c89c955 root hd0,gpt2 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

在 sda2 上的 /boot/grub 文件夹中,有引用的 grub.cfg,其中包含以下内容:

export linux_gfx_mode
menuentry 'Linux Mint 19.2 Cinnamon' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-734be585-8baf-408e-850a-69555c89c955' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_gpt
    insmod ext2
    set root='hd0,gpt2'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  734be585-8baf-408e-850a-69555c89c955
    else
      search --no-floppy --fs-uuid --set=root 734be585-8baf-408e-850a-69555c89c955
    fi
        linux   /boot/vmlinuz-4.15.0-54-generic root=UUID=734be585-8baf-408e-850a-69555c89c955 ro ignore_bootid live-media-path=/multibootusb/linuxmint-19.2-cinnamon-64bit/casper floppy.allowed_drive_mask=0 ignore_uuid root=UUID=759A-1D86 quiet splash $vt_handoff
    initrd  /boot/initrd.img-4.15.0-54-generic
}

blkid for sda 提供以下信息:

/dev/sda1: UUID="EE9A-4B64" TYPE="vfat" PARTLABEL="boot" PARTUUID="33a95580-f254-4f54-937e-143da0e1e37c"
/dev/sda2: LABEL="/" UUID="734be585-8baf-408e-850a-69555c89c955" TYPE="ext4" PARTLABEL="/" PARTUUID="92a4ec7f-d1f6-441b-abdf-0bc0a9970d0b"
/dev/sda4: LABEL="home" UUID="7b3b371b-6447-4e33-822d-d2535215b863" TYPE="ext4" PARTUUID="70686b24-b09d-4f83-a715-73fb1e4224d1"

sda3应该是交换分区,不知道这里不出现是否正常。

直到引导过程中出现 grub 为止,我的情况都很好。只有在选择上面的条目或随附的“扩展选项”条目之后,我才会得到 initramfs 而不是登录。

答案1

Mount: mounting /dev on /root/dev failed: no such file or directory
Mount: mounting /run on /root/run failed: no such file or directory
run-init: opening console: No such file or directory
Target: filesystem doesn't have requested /sbin/init.

看起来像正在挂载的任何内容,因为根文件系统没有正确的挂载点目录......

这是启动项的内核行,为了清晰起见,每个启动选项都在单独的行上。

linux   /boot/vmlinuz-4.15.0-54-generic \
    root=UUID=734be585-8baf-408e-850a-69555c89c955 \
    ro \
    ignore_bootid \
    live-media-path=/multibootusb/linuxmint-19.2-cinnamon-64bit/casper \
    floppy.allowed_drive_mask=0 \
    ignore_uuid \
    root=UUID=759A-1D86 \
    quiet \
    splash

现在您可能可以看到:您有两个root=选择。后一个将覆盖前一个。基于第二个“UUID”的简短,看起来您最终会尝试使用某些 FAT 文件系统作为根文件系统。但这不是你的/dev/sda1

live-media-path如果您尝试启动已完全安装在硬盘上的操作系统,该选项看起来也很奇怪。

第一个root=UUID=734be585-8baf-408e-850a-69555c89c955正确引用了您的 UUID /dev/sda2,因此它是正确的。

我的猜测是,这root=UUID=759A-1D86可能是指您安装系统的 USB。可能是 UEFI 引导加载程序的安装过程发生了错误:它无法识别这root=UUID=759A-1D86是从 UEFI 引导选项的一部分。安装介质并且不应复制到完成的安装中。

您应该从启动选项中删除root=UUID=759A-1D86live-media-path=/multibootusb/linuxmint-19.2-cinnamon-64bit/casper,即 from/boot/grub/grub.cfg和 from /etc/default/grubin /dev/sda2,如果它们存在的话。前者应该解决眼前的问题;后者应该可以防止在您安装内核更新或update-grub出于任何其他原因运行时再次出现问题。

/multibootusb选项中的让live-media-path=我觉得你可能已经用类似的东西完成了安装多重启动USB而不是使用“普通”Mint 19.2 安装介质。此类自动化解决方案需要重建引导加载程序配置以构建其引导菜单,并且并不总是能够完美完成。

ignore_uuid用于casper实时媒体实用程序,不与 HDD 安装的操作系统一起使用,并且ignore_bootid似乎也与casper.只是floppy.allowed_drive_mask=0告诉内核跳过软盘驱动器检测,这在通常情况下可能会加快启动速度大约 3 秒左右。 (在某些具有非传统软盘驱动器设置的旧笔记本电脑上,可能有必要防止启动时挂起。)

您很可能可以删除所有这三个启动选项,但为了安全起见,当系统位于 GRUB 启动菜单中时,按E编辑当前启动项(仅针对此特定启动)并删除那里的那些启动选项。如果您可以成功启动,则您知道可以从实际配置文件中删除它们 - 如果系统在启动时挂起而没有这些选项,只需重置系统,它将再次正常启动。

相关内容