Como inicializar usando uma imagem squashfs como rootfs

4

Eu fiz uma imagem squashfs do meu sistema root, eu quero colocá-la em um drive USB entre alguns Live ISOs, e fazer o menu de inicialização usando o GRUB2.

Quais parâmetros de inicialização do kernel devo usar para especificar essa imagem do Squashfs como sistema de arquivos raiz?

Eu usei isso como configuração do grub, mas Dracut falha para encontrar e montar o root:

insmod gzio
insmod xzio
insmod part_msdos
insmod squash4
insmod iso9660
insmod ext2
insmod btrfs
insmod regexp
menuentry 'Fedora Workstation' {
    set imgfile=/images/fedora*.squashfs
    loopback loop0 /$imgfile
    linux16 (loop0)/boot/vmlinuz-4.1.8-200.fc22.x86_64 ro rd.fstab=0 root=$imgfile elevator=deadline enforcing=0 #rhgb quiet LANG=en_US.utf8
    initrd16 (loop0)/boot/initramfs-4.1.8-200.fc22.x86_64.img
}
    
por Persian 10.10.2015 / 01:44

1 resposta

2

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 .

    
por 10.10.2015 / 04:22