Natknąłem się na ten sam problem i ostatecznie napisałem go, aby działał bezboleśnie w różnych systemach (obecnie debian, ubuntu):
Uruchom make_chroot_initrd
skrypt, aby utworzyć nowy obraz initrd z obsługą chroot z istniejącego:
# ./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
Nowy obraz będzie dokładnie taki sam, tyle że teraz może obsłużyć chroot=
parametr rozruchowy.
Z grub2 jako bootloaderem możesz dodać wpis do /boot/grub/grub.cfg
:
(lub może lepiej /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
}
(zmień pliki / partycje na swoje)
Instalacja w całym systemie
Gdy będziesz zadowolony, możesz wprowadzić zmiany na stałe
(do momentu aktualizacji pakietu initramfs-tools).
W systemie chrootowanym:
# 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
Od teraz zwykły obraz initrd będzie obsługiwał ładowanie chroot.
Nie trzeba używać osobnego pliku initrd.chroot, który może wtedy nie być zsynchronizowany.
Szczegóły znajdziesz w boot_chroot .
vmlinuz root=/dev/sda1/chroot
nie zadziała. Prawdopodobnie można to zasymulować za pomocą metody podobnej do tej, która jest używanainitrd
. Zobacz np . Tutaj . Montujesz/new_root
tak, jak tam opisano, a następnie zamiastcd /new_root
robićcd /new_root/chroot
i kontynuować.