Followup of previous article (Single passphrase to boot Devuan GNU/Linux with multiple encrypted partitions), I found out that if you have two clone system, both on encrypted partitions, on the same hard disk, grub/os-prober as of today fails to automatically configure boot for the clone.
It the concept of having such clone system odd? Not really if you think of laptop that you use for two completely unrelated activities (work and out of the work?), that you do not want to mix at all.
I spent quite a time trying to understand why the clone system was ignored by os-prober and all, even though the partition it was on was mounted.
In the end, I decided it was easier to actually clone the config built for the running system, adjusting the UUID of partitions than to look further.
Here is my /etc/grub.d/11_linux_cryptoclone wrapper for /etc/grub.d/10_linux:
#! /bin/bash set -e # require GRUB_LINUX_CLONE_MAPPER_NAME to be set # for instance to XY if the relevant fs is /dev/mapper/XY # along with relevant grub parameters #GRUB_ENABLE_CRYPTODISK=y #GRUB_PRELOAD_MODULES="luks cryptodisk lvm" #GRUB_LINUX_CLONE_MAPPER_NAME=XY . /etc/default/grub [ x"$GRUB_LINUX_CLONE_MAPPER_NAME" == x ] && exit # setup CLONE=$GRUB_LINUX_CLONE_MAPPER_NAME # only necessary to edit CLONEUUID=`blkid /dev/mapper/$CLONE -o value -s UUID` CLONENAME="Devuan GNU/Linux (on $CLONE)" CLONECRYPTOUUID=`grep $CLONE /etc/crypttab | awk '{print $2}' | cut -f 2 -d =` CLONECRYPTOUUIDGRF=`echo $CLONECRYPTOUUID | tr -d -` ORIG=`df / --output=source | tail -1 | tr -d /dev/mapper` ORIGUUID=`blkid /dev/mapper/$ORIG -o value -s UUID` ORIGNAME="Devuan GNU/Linux" ORIGCRYPTOUUID=`grep $ORIG /etc/crypttab | awk '{print $2}' | cut -f 2 -d =` ORIGCRYPTOUUIDGRF=`echo $ORIGCRYPTOUUID | tr -d -` # produce arranged conffile >&2 echo "$ORIG -> $CLONE:" `dirname "$0"`/10_linux | sed s/$ORIGCRYPTOUUID/$CLONECRYPTOUUID/ig | sed s/$ORIGCRYPTOUUIDGRF/$CLONECRYPTOUUIDGRF/ig | sed s/$ORIGUUID/$CLONEUUID/ig | sed s@"$ORIGNAME"@"$CLONENAME"@ig >&2 echo " $ORIGCRYPTOUUID -> $CLONECRYPTOUUID" >&2 echo " $ORIGUUID -> $CLONEUUID" # make sure there is proper kernel and initrd installed MCLONE=0 CLONEDIR=`grep /dev/mapper/$CLONE /etc/mtab | awk '{print $2}'` if [ "x$CLONEDIR" == "x" ]; then MCLONE=1 mount /dev/mapper/$CLONE CLONEDIR=`grep /dev/mapper/$CLONE /etc/mtab | awk '{print $2}'` fi for file in /boot/config-* /boot/init* /boot/vmlinuz-* /boot/System.map-*; do [ ! -e "$CLONEDIR/$file" ] && >&2 echo " $CLONE $file missing!" done >&2 echo " (remember $CLONE needs properly built initramfs)" if [ $MCLONE == 1 ]; then umount /dev/mapper/$CLONE ; fi # EOF
As said it requires you to add GRUB_LINUX_CLONE_MAPPER_NAME=XY in /etc/default/grub, XY being the /dev/mapper/XY of the clone system.
It expect the clone system to be similarly set up: it needs to have proper initramfs for the same kernel.
It also expect this clone system to be accessible and set in /etc/crypttab et /etc/fstab, since it needs to be able to find clone UUIDs which should not come as a surprise because if it would have to be if os-prober was to find it anyway.
Once done, you can simply run
update-grub