Share /boot partition between distros
Solution 1:
You can, but it's not a great idea.
In GRUB, what you would do is specify different kernel and initrd
files for each distribution installed on the system.
However, the boot configuration for one distro may conflict with the configuration for the other distro(s), depending on how each distro sets its boot configuration and names its files in /boot
. This could lead to a messed-up configuration and potentially leave one or more distros unbootable. Special care should be taken when updating the kernel or changing boot settings in any of the distros. If there are no conflicts, however, you should be able to boot both operating systems without issues.
Solution 2:
I realize this is a bit late to the party, but I just took this on to keep three concurrent installations and one /boot
partition:
- arch linux
- ubuntu 14.04
- ubuntu 16.04
I've used arch for years, but was quite unfamiliar with ubuntu and wasn't sure how to stop it from installing a bootloader so I just let it. For arch, I've been using syslinux
, not grub
so I'm a lot more familiar with it. While this is somewhat early in my experiment, here's my procedure:
- identify the potentially conflicting files. After noting the naming conventions of ubuntu vs. arch, this came down to 14.04 and 16.04's
vmlinuz
andininrd.img
, which are named the same (maybe aside from version number if they update at different times). For all I know they are compatible, but I opted to treat them as not. -
setup
syslinux
as usual, creating entries for each distro (shown below) - upon update of either of the potentially conflicting distros, implement a naming strategy to avoid issues
- have a backup plan
If either ubuntu updates the kernel, I get two key files:
/boot/initrd.img-x.x.x-xx-generic
/boot/vmlinuz-x.x.x-xx-generic
For each of the above, I simply append _distro
to the end, as well as replace a statically named variant to keep from changing my syslinux.cfg
each update (more shown below). The process would look like this, using 14.04/Trusty as the example and only showing the files of interest.
$ 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
Since arch's naming convention never conflicts, this means I end up with 2 backup/accurately named initrd
and vmlinuz
files along with two that I can use to keep from changing my syslinux.cfg
all the time. The key files are like so (with comments added):
$ 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
For booting, here's my syslinux
entries:
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
So far I've left grub
on the ubuntus and it complains at each update but nothing has gone awry. My backup plan was to copy mbr.bin
to /boot/
(usually it resides in /usr/lib/syslinux...
on arch) so that if grub
decides to overwrite my bootloader I can at least dd
the syslinux
bootloader back. I'm 95%+ confident that my arch install will never get borked (at least to boot), so I'll almost always be able to boot to that and fix the ubuntus if I copied/named something incorrectly. Likely I'll keep one former version of each initrd/vmlinuz
around so that I can change which one is loaded at boot in case something goes wrong with the initramfs
process.
Hopefully that's relatively clear what's going on. I could probably use links, some sort of post-update script, etc. to automate but haven't gotten there yet.
The accepted answer reveals that things could go wrong, but since I googled around for examples of others doing this, and only found answers like this (basically, "possible, but don't") I figured I'd add a tangible example of how one could set something like this up.
Personally, I'm quite excited about it. I have one boot partition and as you might have noticed, three side-by-side distros on one btrfs
partition. No need to pre-allocate sizes, no worries about disliking one setup and blowing it away (getting left with an un-used partition floating around) and no need for a bunch of logical volumes just to boot a linux partition when I already have a bootloader!
Hope this helps someone.