内核恐慌 - 不同步:VFS:无法挂载 root fs - LFS

内核恐慌 - 不同步:VFS:无法挂载 root fs - LFS

我已经创建了一个LFS(从头开始的linux)。所有文件都位于辅助硬盘上。 IE。 /dev/sdb 中没有像 sdb1 或 sdb2 这样的分区。 root 和 boot 都位于同一个 /dev/sdb 中。我的主机系统是安装在 /dev/sda 上的 linux mint。 Grub 也安装在 /dev/sda 上。我遵循了在线教程,但这搞乱了我的分区。有什么可能的解决办法吗?我已经尝试通过将 hd0 调整为 hd1 以及所有其他可能的分区来更改 grub 配置。在不丢失任何内容的情况下,我可以使用另一个实时磁盘创建新分区并移动所有内容吗?或者有更好的解决方案吗?

答案1

如果您完全按照该教程进行操作,那么您现在已经使用/dev/sdaLFS 安装的新引导加载程序覆盖了引导加载程序。

分区/dev/sda应该没问题:如果你想恢复 Mint 安装,你只需要从一些 live-Linux ISO 启动系统,挂载 root 和 /boot 文件系统/dev/sda*,chroot 到 Mint 安装并运行grub-install /dev/sda。由于 Mint 安装的 GRUB 配置文件未受影响,因此这应该足以将 Mint 安装恢复到完全工作状态。

新的引导加载程序尝试从中加载操作系统内核,/dev/sdb并且实际上成功了:该Kernel Panic消息来自 LFS 安装的内核,而不是引导加载程序。

(引导加载程序的安装在视频教程第11章时间 15:30 起。)

第11章 时间16:12该教程讨论了创建/boot/grub/grub.cfg,并且有一行:

linux /boot/vmlinuz-4.7.2-lfs-7.10 root=<something> ro

在你的情况下,<something>应该是/dev/sdb.如果您弄错了,这可能会导致错误。在第11章 时间18:20本教程讨论了如何解决这个问题:当您看到 GRUB 引导菜单时,按 可以e在引导时编辑引导选项。您将看到上面提到的同一行,并且可以进行临时更改以使 LFS 安装启动。

另一个可能的错误是没有将根文件系统的驱动程序编译到 LFS 内核中:这将在内核配置阶段指定第11章 时间14:32,但教程几乎掩盖了它。

换句话说,在内核配置菜单的File systems子菜单中,该行The Extended 4 (ext4) filesystem应选择为Y(表示为星号),而不是选择为M。如果您错过了这一步,那么root=/dev/sdb在启动选项行上设置正确的选项将无济于事:在这种情况下,您最好的选择是恢复 Mint 安装,使用它来重新配置和重新编译您的 LFS 内核,然后放置重新编译的内核vmlinuz-4.7.2-lfs-7.10文件复制到/boot目录下/dev/sdb,最后重新安装LFS的GRUB。


话虽如此,我认为该教程犯了一个根本性的错误,/dev/sdb即一开始就没有分区。相反,他们将整个磁盘用于单个文件系统(mkfs /dev/sdb=“超级软盘”配置)。这使得无法在以下位置安装 GRUB2 /dev/sdb:GRUB2 在 MBR 之后需要一些磁盘块,这些磁盘块通常在分区磁盘上不使用,但会覆盖“超级软盘”上文件系统的开头。结果,他们被迫安装引导加载程序/dev/sda,从而破坏了 Mint 主机的安装过程。

我会做的最小改变:

  • 创建/dev/sdb一个大分区 ( /dev/sdb1) 并在其上创建文件系统
  • /dev/sdb1使用而不是/dev/sdbexcept命令执行其他所有操作grub-install:那就是grub-install /dev/sdb.
  • /boot/grub/grub.cfgLFS 中,GRUB 根设备应指定为set root=(hd0,1),Linux 根文件系统引导选项应为root=/dev/sdb1。这是因为 BIOS 的一个怪癖:无论您在 BIOS 级别选择从哪个磁盘启动,通常都会(hd0)用于 GRUB,即使它是/dev/sdb用于 Linux 的。

通过这些更改,您将避免破坏 Mint 安装的引导加载程序,并且应该能够使用 VirtualBox 的引导菜单来选择从哪个安装引导:Mint 或 LFS。它还应该允许您/dev/sda从配置中完全删除(制作/dev/sdb新的/dev/sda),只需更改/boot/grub/grub.confLFS,以证明新的 LFS 安装完全能够独立运行。


如何挽救目前的处境?

/dev/sda我首先会使用 live-Linux ISO来恢复 Mint 引导加载程序。一旦这个问题解决了,我就会启动到 Mint,安装/dev/sdb并打包一切将其放入 tar.bz2 包中:

mount /dev/sdb /mnt
cd /mnt
tar jcvf /somewhere/with/plenty/of/space/LFS-recovery.tar.bz2 *
cd /
umount /mnt

然后我会对 进行分区/dev/sdb,在 上创建一个 ext4 文件系统/dev/sdb1,安装它并恢复/dev/sdb其上的所有内容:

fdisk /dev/sdb
<set up one partition to cover the whole disk>

mkfs -v -t ext4 /dev/sdb1
mount /dev/sdb1 /mnt
cd /mnt
tar xvf /somewhere/with/plenty/of/space/LFS-recovery.tar.bz2

接下来的步骤是必要的准备工作和 chroot 到 LFS 环境中,就像教程第6章2:40-4:05但现在目录应该已经在那里了。然后可以将引导加载程序安装到 /dev/sdb,如前所述。

相关内容