Ich bin auf dasselbe Problem gestoßen und habe es schließlich so geschrieben , dass es auf verschiedenen Systemen (Debian, Ubuntu derzeit) problemlos funktioniert:
Führen Sie ein make_chroot_initrd
Skript aus, um aus dem vorhandenen ein neues chroot-fähiges initrd-Image zu erstellen:
# ./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
Das neue Image ist genau das gleiche, außer dass es jetzt einen chroot=
Boot-Parameter verarbeiten kann.
Mit grub2 als Bootloader können Sie einen Eintrag hinzufügen zu /boot/grub/grub.cfg
:
(oder besser /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
}
(Ändern Sie die Dateien / Partitionen, um sie an Ihre anzupassen.)
Systemweite Installation
Sobald Sie damit zufrieden sind, können Sie die Änderungen dauerhaft vornehmen
(bis das initramfs-tools-Paket aktualisiert wird).
Im Chroot-System:
# 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
Von nun an unterstützt das reguläre initrd-Image das chroot-Booten.
Es muss kein separater initrd.chroot verwendet werden, der dann möglicherweise nicht mehr mit ihm synchronisiert ist.
Siehe boot_chroot für Details.
vmlinuz root=/dev/sda1/chroot
wird nicht funktionieren. Man könnte dies wahrscheinlich mit einer ähnlichen Methode simulieren wie ininitrd
. Siehe zB hier . Sie mounten/new_root
wie dort beschrieben, dann anstatt zucd /new_root
tuncd /new_root/chroot
und fortzufahren.