Linux – Is it possible to mount a subdirectory as the root file system at kernel startup

bootboot-loaderchrootkernellinux

I'm trying to install a linux from sources inside my home directory(as oposed to creating a dedicated partition). The basic system(glibc, kernel and init) is installed at $HOME/lfs/root. I'm booting this system using grub installed inside my usb drive, here is the relevant part in grub.cfg(I have to change grub root to hd1 since hd0 is my usb stick):

menuentry "Custom linux HD" {
set root='(hd1,1)'
linux /home/thiago/lfs/root/boot/bzImage root=/dev/sda1/home/thiago/lfs/root ro
}

It seems only devices are valid parameters for 'root='. Is there any way to work arround that? I don't want to mess with my current partitions.

Best Answer

I did not test it, but in theory (with a recent distribution and kernel) you can choose to use an initramfs or initrd. The kernel will first run with the initramfs as root, and run its boot script. The last thing the boot script does should be to call pivot_root on the mounted "real" root, and then run the real /sbin/init.

If you can get an initramfs or initrd working, maybe you can tweak the boot script do do the pivot_root in the subdirectory that you want ?