在发行版之间共享 /boot 分区

在发行版之间共享 /boot 分区

几个月前,我在计算机上运行了 CEntOS 6.5 的默认安装,此后添加了一些我不想删除的程序和文件。我想双启动 Ubuntu 14.x,不知道如何处理 /boot 分区。硬盘驱动器当前的分区如下:

sda:256 GB SSD

  • sda1: /boot 500 MB
  • sda2:/LVM 物理卷~237 GB
    • /根
    • /家
    • 交换

我的问题是:发行版之间共享 /boot 分区可以吗?还是我需要为 Ubuntu 设置单独的 /boot 分区?如果是这样,是否有必要将 /boot 分区放在驱动器的开头?

答案1

你可以,但这不是一个好主意。

在 GRUB 中,您要做的是initrd为系统上安装的每个发行版指定不同的内核和文件。

但是,一个发行版的启动配置可能与其他发行版的配置冲突,这取决于每个发行版如何设置其启动配置以及在 中如何命名其文件/boot。这可能会导致配置混乱,并可能导致一个或多个发行版无法启动。在更新内核或更改任何发行版中的启动设置时应特别小心。但是,如果没有冲突,您应该能够毫无问题地启动两个操作系统。

答案2

我意识到这对聚会来说有点晚了,但我只是想保留三个并发安装和一个/boot分区:

  • linux 操作系统
  • Ubuntu 14.04
  • Ubuntu 16.04

我使用 Arch 多年,但对 ubuntu 不太熟悉,不知道如何阻止它安装引导加载程序,所以我就让它安装了。对于 Arch,我一直在使用syslinux,不是grub,所以我对它更熟悉。虽然这是有些在我的实验早期,我的程序如下:

  • 识别可能存在冲突的文件。注意 ubuntu 与 arch 的命名约定后,结果归结为 14.04 和 16.04vmlinuzininrd.img,它们的名称相同(如果它们在不同时间更新,则可能除了版本号之外)。据我所知,它们是兼容的,但我选择将它们视为不兼容。
  • 设置syslinux像往常一样,为每个发行版创建条目(如下所示)
  • 在更新任何一个可能存在冲突的发行版时,实施命名策略以避免出现问题
  • 有备用计划

如果 ubuntu 更新内核,我会得到两个关键文件:

  • /boot/initrd.img-x.x.x-xx-generic
  • /boot/vmlinuz-x.x.x-xx-generic

对于上述每一项,我只需将其附加_distro到末尾,并替换静态命名的变体,以防止syslinux.cfg每次更新都发生更改(更多内容见下文)。该过程如下所示,使用 14.04/Trusty 作为示例,仅显示感兴趣的文件。

$ cd /boot
$ sudo mv ./initrd.img-4.4.0-62-generic ./initrd.img-4.4.0-62-generic_trusty
$ sudo cp ./initrd.img-4.4.0-62-generic_trusty ./initrd-trusty.img
$ sudo mv ./vmlinuz-4.4.0-62-generic ./vmlinuz-4.4.0-62-generic_trusty
$ sudo cp ./vmlinuz-4.4.0-62-generic_trusty vmlinuz-trusty

由于 arch 的命名约定从不冲突,这意味着我最终会得到 2 个备份/准确命名的文件initrd以及vmlinuz两个我可以用来避免一直更改的文件syslinux.cfg。关键文件如下(添加了注释):

$ ls /boot/

initramfs-linux.img                 ## arch main initramfs
initramfs-linux-fallback.img        ## arch fallback initramfs
initrd.img-4.4.0-62-generic_trusty  ## named recent 14.04 initrd
initrd.img-4.4.0-62-generic_xenial  ## same for xenial (16.04)
initrd-trusty.img                   ## statically named initrd
initrd-xenial.img
vmlinuz-4.4.0-62-generic_trusty     ## named vmlinuz
vmlinuz-4.4.0-62-generic_xenial
vmlinuz-linux                       ## arch's vmlinuz
vmlinuz-trusty                      ## statically named vmlinuz
vmlinuz-xenial

为了启动,这是我的syslinux条目:

LABEL arch
  MENU LABEL arch
  LINUX ../vmlinuz-linux
  APPEND luks-options-here rootflags=compress=lzo,discard,ssd,subvol=arch rw
  INITRD ../intel-ucode.img,../initramfs-linux.img

LABEL xenial
  MENU LABEL xenial
  LINUX ../vmlinuz-xenial
  APPEND luks-options-here ro rootflags=compress=lzo,discard,ssd,subvol=xenial quiet splash $vt_handoff
  INITRD ../initrd-xenial.img

LABEL trusty
  MENU LABEL trusty
  LINUX ../vmlinuz-trusty
  APPEND luks-options-here ro rootflags=compress=lzo,discard,ssd,subvol=trusty quiet $vt_handoff
  INITRD ../initrd-trusty.img

到目前为止,我一直grub使用 ubuntus,每次更新时都会抱怨,但一切正常。我的备份计划是复制mbr.bin/boot/(通常它位于/usr/lib/syslinux...arch 上),这样如果grub决定覆盖我的引导加载程序,我至少可以将引导加载dd程序syslinux恢复。我有 95% 以上的信心,我的 arch 安装永远不会出错(至少在启动时不会),所以如果我复制/命名错误,我几乎总是能够启动到那里并修复 ubuntus。我可能会保留每个initrd/vmlinuz版本的一个旧版本,这样我就可以更改在启动时加载的版本,以防initramfs过程中出现问题。

希望这能相对清楚地说明发生了什么。我可能可以使用链接、某种更新后脚本等来实现自动化,但目前还没有做到这一点。

被接受的答案表明事情可能会出错,但由于我在谷歌上搜索了其他人这样做的例子,只找到了这样的答案(基本上是“可能,但不要”),我想我会添加一个具体的例子来说明一个人如何可以设置类似的东西。

就我个人而言,我对此感到非常兴奋。我有一个启动分区,您可能已经注意到,一个分区上有三个并排的发行版btrfs。无需预先分配大小,不用担心不喜欢一个设置并将其丢弃(留下一个未使用的分区),也不需要一堆逻辑卷来启动一个 Linux 分区(当我已经一个引导加载程序!

希望这对某人有帮助。

答案3

您可以在不同的分区上拥有其他系统目录。

我会尽力回答你的问题。你也许可以共享 /boot,但不建议这么做。就我个人而言,我认为最终不值得为此头疼。

相关内容