Я понимаю, что это немного поздно для вечеринки, но я просто взял это на себя, чтобы сохранить три одновременных установки и один раздел /boot
:
- арка линукс
- Убунту 14.04
- Ubuntu 16.04
Я годами использовал arch, но был совершенно незнаком с ubuntu и не знал, как помешать ему установить загрузчик, поэтому просто позволил. Для arch я использовал syslinux
, а не grub
поэтому я гораздо лучше с ним знаком. Хотя это немного рано в моем эксперименте, вот моя процедура:
- определить потенциально конфликтующие файлы. После того, как мы обратили внимание на соглашения об именах ubuntu и arch, это сводилось к 14.04 и 16.04
vmlinuz
и ininrd.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
на убунту, и он жалуется на каждое обновление, но ничего не пошло не так. Мой план резервного копирования должен был mbr.bin
к /boot/
(обычно он находится в /usr/lib/syslinux...
на арке) , так что , если grub
решает переписать свой загрузчик , что я могу по крайней мере , dd
в syslinux
загрузчиком обратно. Я на 95% уверен, что моя установка с использованием архива никогда не будет прервана (по крайней мере, до загрузки), поэтому я почти всегда буду в состоянии загружаться и исправлять убунт, если я скопировал / назвал что-то неправильно. Вероятно, я сохраню одну прежнюю версию каждого initrd/vmlinuz
чтобы я мог изменить, какая из них загружается при загрузке, на случай, если что-то пойдет не так с процессом initramfs
.
Надеюсь, это относительно ясно, что происходит. Возможно, я мог бы использовать ссылки, какой-то сценарий после обновления и т.д. Для автоматизации, но пока не добрался.
Принятый ответ показывает, что что-то может пойти не так, но, поскольку я гуглил примеры других, делающих это, и нашел только ответы, подобные этому (в основном, «возможно, но нет»), я решил добавить осязаемый пример как можно настроить что-то подобное.
Лично я очень рад этому. У меня есть один загрузочный раздел и, как вы могли заметить, три соседних дистрибутива на одном разделе btrfs
. Не нужно предварительно выделять размеры, не беспокоиться о неприязни к одной установке и выбрасывать ее (оставляя неиспользуемый раздел без изменений) и не нужно кучу логических томов только для загрузки раздела Linux, когда у меня уже есть загрузчик!
Надеюсь, это кому-нибудь поможет.