Me deparei com o mesmo problema e acabei escrevendo isso para fazê-lo funcionar sem problemas em diferentes sistemas (debian, ubuntu atualmente):
Execute o make_chroot_initrd
script para criar uma nova imagem initrd ativada para chroot a partir da imagem existente:
# ./make_chroot_initrd /chroot/trusty/boot/initrd.img-3.13.0-32-generic
making new initrd: /chroot/trusty/boot/initrd.img-3.13.0-32-generic.chroot
A nova imagem será exatamente a mesma, exceto que agora pode lidar com um chroot=
parâmetro de inicialização.
Com o grub2 como carregador de inicialização, você pode adicionar uma entrada para /boot/grub/grub.cfg
:
(ou talvez melhor /etc/grub.d/40_custom
)
menuentry "ubuntu trusty, (linux 3.13.0-32) (chroot)" {
insmod ext2 # or whatever you're using ...
set root='(hd0,7)' # partition containing the chroot
set chroot='/chroot/trusty' # chroot path
linux $chroot/boot/vmlinuz-3.13.0-32-generic root=/dev/sda7 chroot=$chroot rw
initrd $chroot/boot/initrd.img-3.13.0-32-generic.chroot
}
(mude os arquivos / partições para combinar com os seus)
Instalação em todo o sistema
Quando estiver satisfeito com isso, você poderá tornar as alterações permanentes
(até que o pacote initramfs-tools seja atualizado).
No sistema com chroot:
# cd /usr/share/initramfs-tools
# cp -pdrv . ../initramfs-tools.orig # backup
# patch -p1 < path_to/boot_chroot/initrd.patch
# rm *.orig */*.orig
# update-initramfs -u
A partir de agora, a imagem regular do initrd suportará a inicialização chroot.
Não é necessário usar um initrd.chroot separado que pode ficar fora de sincronia com ele.
Veja boot_chroot para detalhes.
vmlinuz root=/dev/sda1/chroot
não vai funcionar. Provavelmente, poderia-se simular isso com um método semelhante ao utilizadoinitrd
. Veja, por exemplo, aqui . Você monta/new_root
como descrito lá, em vez decd /new_root
fazercd /new_root/chroot
e continuar.