我已经创建了一个LFS(从头开始的linux)。所有文件都位于辅助硬盘上。 IE。 /dev/sdb 中没有像 sdb1 或 sdb2 这样的分区。 root 和 boot 都位于同一个 /dev/sdb 中。我的主机系统是安装在 /dev/sda 上的 linux mint。 Grub 也安装在 /dev/sda 上。我遵循了在线教程,但这搞乱了我的分区。有什么可能的解决办法吗?我已经尝试通过将 hd0 调整为 hd1 以及所有其他可能的分区来更改 grub 配置。在不丢失任何内容的情况下,我可以使用另一个实时磁盘创建新分区并移动所有内容吗?或者有更好的解决方案吗?
答案1
如果您完全按照该教程进行操作,那么您现在已经使用/dev/sda
LFS 安装的新引导加载程序覆盖了引导加载程序。
分区/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/sdb
except命令执行其他所有操作grub-install
:那就是grub-install /dev/sdb
.- 在
/boot/grub/grub.cfg
LFS 中,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.conf
LFS,以证明新的 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,如前所述。