Na minha opinião, você ainda deve usar um initramfs. Praticamente qualquer coisa serve, mas você precisará do módulo de kernel do sistema de arquivos squashfs (se ainda não estiver compilado no seu kernel) na sua imagem initramfs.
A maioria dos sistemas initramfs respeita fstab - e definitivamente o Dracut o faz. Assim, você pode configurar apenas dois arquivos /etc/fstab
- um na sua imagem .sfs
e um na sua imagem initramfs.
{ cd /tmp; cat >fstab
mkdir -p sfs/sfs sfs/usb
dracut -i fstab /etc/fstab \
-i sfs sfs \
--add-drivers overlay \
--add-drivers squashfs \
initramfs.img
} <<"" #FSTAB
UUID={USB-UUID} /sfs/usb $usbfs defaults 0 0
/sfs/usb/img.sfs /sfs/sfs squashfs defaults 0 0
Com toda a sinceridade, não estou perfeitamente familiarizado com o sistema de compilação dracut
initramfs e, portanto, pode haver algo mais necessário para que o comando seja concluído com êxito. Estou trabalhando com uma familiaridade geral de como a maioria das montagens initramfs são configuradas e as informações que eu encontro na página man
para dracut
aqui . Alguma montagem posterior pode ser necessária, mas isso deve trazer você muito bem.
Depois de ter instalado o /etc/fstab
adequado ao seu initramfs, você poderá usar os seguintes parâmetros relacionados ao dispositivo raiz para obter um rootfs do overlayfs:
root=overlay \
rootfstype=overlay \
rootflags=\
lowerdir=/sfs/sfs,\
upperdir=/sfs/usb/persist,\
workdir=/sfs/usb/tmp
Isso pressupõe que você tenha um diretório em sua unidade usb chamada /persist
e outro diretório vazio /tmp
e que sua imagem squashfs possa ser encontrada na raiz do seu sistema de arquivos usb como /img.sfs
.