Завантажився в chroot?


13

У мене на жорсткому диску встановлений Linux (Debian Jessie). Диск - sda1, ext4fs та sda2- swap

У мене /chrootпапка. Там встановлена ​​інша система, в /chrootпапці.

Питання:

Як сказати bootmanager, щоб завантажувати не первинну систему (основну, Debian Jessie), а систему в / chroot ? Мабуть, зміни /menu.lstі /chroot/etc/fstab? ( vmlinuz root=/dev/sda1/chroot?)

Або інший варіант питання: чи можливо встановити Linux не в кореневий каталог розділу, а в папку? ( /another_linux/bin, /another_linux/home, /another_linux/etc...)


1
vmlinuz root=/dev/sda1/chrootне буде працювати. Можливо, можна було б імітувати це методом, подібним до того, що використовується у initrd. Дивіться, наприклад, тут . Ви монтуєтесь так, /new_rootяк описано там, а потім замість цього cd /new_rootробите cd /new_root/chrootі продовжуєте.
н. 'займенники' м.

Відповіді:


7

Це не може зробити завантажувач або ядро. Параметр для параметра ядра, rootнаприклад в, root=/dev/sda1виглядає як стандартне ім'я шляху Unix, але такі імена трактуються відповідно до встановленої в даний час файлової системи. На момент rootінтерпретації параметра немає змонтованих файлових систем. Ну, майже ніхто. На час ініціалізації ядра є екземпляр мінімальної ramfsфайлової системи, яка називається rootfsзмонтованою як корінь для запуску початкового процесу start_kernel(). Фактична інтерпретація rootпараметра параметра виконується в рутині, що називається name_to_dev_t(). Одним із підтримуваних синтаксисів є /dev/nameформат, де ім'я інтерпретується, виконуючи тимчасове кріплення sysfsфайлової системи вrootfsroot, і шукаєте назву блокового запису, що відповідає імені під /sys/block. Цей процес детальніше пояснюється тут .

Налаштування, як описано, потрібно було б виконати, попередньо завантажившись у мінімальне середовище, наприклад, таке, яке надає initrd, встановити реальну кореневу файлову систему з /dev/sda1тимчасової точки монтажу , наприклад /mnt/rootfs, потім змінити кореневий каталог на /mnt/rootfs/chrootвикористання pivot_root(8).

Це дещо схоже з тим, як налаштовуються кореневі файлові системи для LinuX Containers ( LXC ). LXC - реалізація віртуалізації на рівні операційної системи для Linux. Віртуалізація на рівні операційної системи зазвичай використовується у віртуальних хостингових середовищах як легка альтернатива повній віртуалізації, якою керує гіпервізор. У віртуалізації на рівні операційної системи одне ядро ​​операційної системи поділяється між декількома ізольованими екземплярами простору користувача. Кожен екземпляр, який часто називають контейнером, в'язницею, віртуальним приватним сервером (VPE) або віртуальною середовищем (VE), по суті є окремою установкою операційної системи, розміщеною у власному каталозі хост-системи.


6

Я наткнувся на той самий випуск і закінчив писати це, щоб змусити його безболісно працювати в різних системах (на даний момент 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 .


3

Так, ви можете зробити трюк, використовуючи підтоми Btrfs .

Спочатку потрібно перетворити ext4 в btrfs, як описано тут .

Перетворіть ваш chroot в підміський номер, якщо його ще немає:

 sudo mv /path/to/chroot /path/to/chroot-tmp
 sudo btrfs subvol create /path/to/chroot
 sudo mv /path/to/chroot-tmp/* /path/to/chroot
 sudo mv /path/to/chroot-tmp/* /path/to/chroot -r # for directories

Тепер у вас є підпункт з назвою path / to / chroot . Ви можете це перевіритиsudo btrfs subvol list /

Тепер ви можете створити завантажувальну систему для підгрупування запису в grub. Просто додайте rootflags=subvol=path/to/chrootдо рядка завантаження ядра linux у пункті меню grub або використовуйте це для автоматичного зондування.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.