如何防止两个操作系统破坏 grub 文件?

如何防止两个操作系统破坏 grub 文件?

我想在同一块硬盘的不同分区上安装 Linux 和 OpenSolaris。我很担心,因为 OpenSolaris 似乎在更新操作系统时会主动管理 grub 数据(“启动环境”功能的一部分)。我应该做哪些准备来防止 grub 数据被破坏。如果我以后想将另一个版本的 Linux 添加到同一系统,需要考虑哪些事项?我应该选择一个操作系统并始终从该操作系统进行 grub 更新吗?如果是这样,那么我如何使用新版本 Linux 的安装 iso?它不会自行修改 grub 数据吗?一旦我已经启动到 Linux,并且我想更新我的 grub 文件,我是否应该运行 grub 命令来从驱动器的启动部分读取数据,并将其放入我当前启动到的本地文件系统中?

答案1

你必须告诉一个操作系统或另一个操作系统不是自动破坏 GRUB 引导扇区。

我见过的所有 Linux 发行版都有某种方法来防止其安装 CD 破坏引导扇区,但它通常是在一些模糊的高级选项中。

GRUB 的大部分配置数据是不是存储在非常小的引导扇区中,该扇区仅包含一个小的加载程序和一个指向其余部分位置的指针。配置数据通常存储在驱动器上常规分区中的常规目录中(/boot在许多 Linux 发行版下)。因此,除非 Solaris 实际上正在进入并篡改 Linux 分区上的数据,否则这可能不是什么大问题……如果一个操作系统破坏了另一个操作系统创建的引导扇区,您可以轻松恢复它。

答案2

Grub 是一个与其他程序一样的程序。硬盘驱动器开头有一小段(主引导记录),指出应使用哪个程序来加载操作系统。当您安装新的 grub 时,这部分会被破坏。但是,可以选择不为新操作系统安装 grub(Windows 除外,在多引导系统中,Windows 应始终首先安装)。如果您选择不安装 grub,则必须配置原始系统的 grub 以识别新系统。换句话说,您可以从一个系统控制所有操作系统的 grub(在这种情况下,如果 solaris 如此激进,它似乎是最佳选择)。从此操作系统中,向 grub 添加其他选项非常容易。在 /boot/grub/menu.lst 中,您可以添加新选项并选择它们的顺序。例如,我运行 Ubuntu、Windows 和 Gentoo 来试用。我的 menu.lst 包含以下条目:

title       Ubuntu 8.04.1, kernel 2.6.24-18-generic
root        (hd1,0)
kernel      /boot/vmlinuz-2.6.24-18-generic root=UUID=887466bc-8a0d-4408-
17a-91ec1cfd9f2a ro quiet splash vga=795
initrd      /boot/initrd.img-2.6.24-18-generic
quiet

title       Microsoft Windows XP Professional
root        (hd0,0)
savedefault
makeactive
chainloader +1

title       Gentoo Linux 2.6.25-gentoo-r7
root        (hd0,1)
kernel      /boot/kernel-2.6.25-gentoo-r7 root=/dev/hdb2

这些文件中的每一个都包含有关我要加载的系统的基本信息,包括名称、硬盘位置(磁盘和分区)以及要加载的内容在该磁盘上的位置。请注意,由于 Windows 想要加载自身,因此我们通过在磁盘 0 分区 0(就在开头)上找到 Windows 引导加载程序并运行它来让 grub 知道它将进行链式加载。对于 Linux 系统,您实际上只需要名称、根驱动器和内核位置即可将新内容添加到 grub 菜单中。

如果您稍后安装了 Linux,并且忘记跳过 grub 安装,您也可以将 menu.lst 从一个复制到另一个。

答案3

我认为最好将其中一个操作系统作为虚拟机运行。

使用支持 VM 扩展的现代 CPU 和几 GB RAM,您可以轻松运行 3-4 台机器。使用以下代码片段检查您的 CPU 是否支持它们。

egrep '^flags.*(vmx|svm)' /proc/cpuinfo

有很多选择:Xen、kvm、VirtualBox、VMware。

答案4

不要/boot在操作系统之间共享,这只会增加工作量。大多数现代发行版的默认设置是使用单个/文件系统,/boot仅包含一个子目录,但即使/boot它有自己的分区,每个操作系统都有一个单独的分区也是可以的。

然后每个操作系统将管理自己的/boot,其中一个将成为默认的可启动分区——您应该能够轻松地将其配置为链式加载另一个。Grub 可以将其标头仅安装到自己的分区中,而不会影响整个磁盘。

相关内容