Mam Linux (Debian Jessie) zainstalowany na dysku twardym. Drive - sda1
, ext4fs i sda2
- swap
Mam /chroot
folder W /chroot
folderze jest zainstalowany inny system .
Pytanie:
Jak powiedzieć bootmanagerowi, żeby nie uruchamiał systemu podstawowego (main, Debian Jessie), ale system w / chroot ? Prawdopodobnie zmienić /menu.lst
i /chroot/etc/fstab
? ( vmlinuz root=/dev/sda1/chroot
?)
Lub inny wariant pytania: czy jest możliwe, aby Linux był zainstalowany nie w katalogu głównym partycji, ale w folderze? ( /another_linux/bin
, /another_linux/home
, /another_linux/etc
, ...)
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ć.Odpowiedzi:
Nie może tego zrobić bootloader lub jądro. Parametr
root
opcji jądra , taki jak in,root=/dev/sda1
wygląda jak standardowa ścieżka uniksowa, ale takie ścieżki są interpretowane zgodnie z aktualnie podłączonym systemem plików. W momencieroot
interpretacji opcji nie ma zamontowanych systemów plików. Cóż, prawie żaden. Podczas inicjalizacji jądra występuje instancja minimalnegoramfs
systemu plików o nazwierootfs
montowany jako root dla początkowego procesustart_kernel()
. Rzeczywista interpretacjaroot
parametru opcji odbywa się w procedurze o nazwiename_to_dev_t()
. Jedną z obsługiwanych składni jest/dev/name
format, w którym nazwa jest interpretowana przez wykonanie tymczasowego podłączeniasysfs
systemu plików w systemierootfs
root i szukanie wpisu urządzenia blokowego pasującego do nazwy pod/sys/block
. Proces ten wyjaśniono bardziej szczegółowo tutaj .Instalację zgodnie z opisem należy wykonać, najpierw uruchamiając system w minimalnym środowisku, takim jak to zapewnione przez
initrd
, zamontuj prawdziwy główny system plików z/dev/sda1
tymczasowego punktu montowania, np./mnt/rootfs
Następnie zmień katalog główny na/mnt/rootfs/chroot
usingpivot_root(8)
.Jest to nieco podobne do konfiguracji głównych systemów plików dla kontenerów LinuX ( LXC ). LXC to implementacja wirtualizacji na poziomie systemu operacyjnego dla systemu Linux. Wirtualizacja na poziomie systemu operacyjnego jest powszechnie stosowana w wirtualnych środowiskach hostingowych jako lekka alternatywa dla pełnej wirtualizacji zarządzanej przez hiperwizora. W wirtualizacji na poziomie systemu operacyjnego jedno jądro systemu operacyjnego jest współużytkowane przez wiele izolowanych instancji przestrzeni użytkownika. Każde wystąpienie, często nazywane kontenerem, więzieniem, wirtualnym serwerem prywatnym (VPE) lub środowiskiem wirtualnym (VE), jest zasadniczo osobną instalacją systemu operacyjnego, która znajduje się we własnym katalogu w systemie hosta.
źródło
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: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
)(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:
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 .
źródło
Tak, możesz to zrobić za pomocą podwoluminów Btrfs .
Najpierw musisz przekonwertować ext4 na btrfs, jak opisano tutaj .
Przekształć chroot w podwilum, jeśli jeszcze go nie ma:
Teraz masz podwolumnę o nazwie path / to / chroot . Możesz to sprawdzić za pomocą
sudo btrfs subvol list /
Teraz możesz utworzyć boot w celu zapisania wolumenu w grub. Po prostu dodaj
rootflags=subvol=path/to/chroot
do łańcucha ładowania jądra linuksa w menu grub lub użyj tego do automatycznego sondowania.źródło