this seems to work in simple trials.  i'm unsure tho if udev and kernel
modules will be working from the right hierarchy, no doubt some of you will

>#!/bin/bash -f
>#set a subdirectory as root directory (with no change to initrd)(multiple
installs don't need partitions)
>#simply specify on the kernel commandline:
>#   init=pat      pathname from partition root to this script (chmod 744)
>#   subroot=foo   pathname to become root directory
>#   partroot=par  mountpoint within subroot where partition root will be
left mounted
>#menuentry "subroot foo" {      #copy /etc/grub.d/40_custom to
/etc/grub.d/07_custom and add menuentries like this example
>#     echo "subroot foo"
>#           set sub=foo
>#     search --no-floppy --fs-uuid --set=root
22e7c84a-a416-43e9-ae9d-ee0119fc3894      #use your partition's uuid
>#            linux /$sub/vmlinuz ro
root=UUID=22e7c84a-a416-43e9-ae9d-ee0119fc3894 init=pat subroot=foo
>#     echo "initrd /$sub/initrd.img"
>#           initrd /$sub/initrd.img     #works in recent releases where
this link is relative
>subroot(){ for a in $(<proc/cmdline)
>           do [[ $a =  subroot=* ]]&& subroot=${a#*=}
>              [[ $a = partroot=* ]]&&partroot=${a#*=}
>           done
>           [[  $subroot ]]||{ echo no  subroot on kernel cmdline;return 1;}
>           [[ $partroot ]]||{ echo no partroot on kernel cmdline;return 1;}
>           (set -x;mount --bind $subroot mnt)||return
>           for m in $(while read -r r;do r=($r)
>                         [[ ${r[1]} = /?(mnt) ]]||echo ${r[1]}  #excluding
/ and /mnt
>                      done<proc/mounts)
>           do (set -x;mount --bind $m mnt$m)||return            #--bind
whatever's already mounted
>           done
>           set -x
>           cd mnt||return
>           pivot_root . $partroot
>subroot&&exec chroot . init "$@"||exec bash
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>