Я столкнулся с той же проблемой и закончил тем, что написал ее, чтобы она работала безболезненно в разных системах (Debian, Ubuntu в настоящее время):
Запустите make_chroot_initrd
скрипт для создания нового образа initrd с поддержкой chroot из существующего:
# ./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
Новый образ будет точно таким же, за исключением того, что теперь он может обрабатывать chroot=
загрузочный параметр.
С grub2 в качестве загрузчика вы можете добавить запись в /boot/grub/grub.cfg
:
(или, возможно, лучше /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
}
(измените файлы / разделы, чтобы они соответствовали вашим)
Общесистемная установка
Как только вы довольны этим, вы можете сделать изменения постоянными
(пока не будет обновлен пакет initramfs-tools).
В корневой системе:
# 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
С этого момента обычный образ initrd будет поддерживать загрузку chroot.
Нет необходимости использовать отдельный файл initrd.chroot, который может быть не синхронизирован с ним.
Смотрите boot_chroot для деталей.
vmlinuz root=/dev/sda1/chroot
не сработает Вероятно, можно смоделировать это с помощью метода, аналогичного тому, который используется вinitrd
. Смотрите, например, здесь . Вы монтируете,/new_root
как описано там, затем вместоcd /new_root
docd /new_root/chroot
и продолжаете.