Chciałbym spróbować skonfigurować komputer tak, aby miał wiele instalacji Linuksa w tym samym systemie plików. Na przykład, systemem plików będzie mieć 3 foldery: /Ubuntu_Precise
, /Ubuntu_Oneiric
, i /Ubuntu_Natty
.
(Wiem, że możesz to zrobić za pomocą BTRFS i podwoluminów, ale chciałbym użyć EXT4 dla szybkości).
Kiedyś konfigurowałem wiele instalacji różnych dystrybucji za pomocą BTRFS, a po uruchomieniu tego wiem, że Grub dobrze sobie radzi z uruchamianiem vmlinuz i obrazu initrd ze „niestandardowych” ścieżek. Ale kiedy robiłem BTRFS, było takie, rootflags=subvol=@<subvolume_name>
które mówiło kernelowi, aby zamontowało to podobjętość jako / w systemie plików. Czy jest jakiś argument, że można przekazać jądro, które zmusi go do wiązania, zamontowania podfolderu na partycji jako / a następnie rozruchu?
Myślę o pozostałych częściach, jestem dość blisko. Wiem, jak sprecyzować mocowanie bind /etc/fstab
. Ponadto, od kiedy skonfigurowałem mój system z wieloma instalacjami linuksowymi w podwoluminach BTRFS, jestem przyzwyczajony do instalowania dystrybucji na maszynie wirtualnej, a następnie migrowania jej za pomocą rsync, więc nie martwię się zbytnio o to, co musiałbym zrobić, aby uzyskać odpowiednią konfigurację, próbuję tylko dowiedzieć się, jaka byłaby właściwa konfiguracja. Gdy się dowiem, powinienem móc dość łatwo przeprowadzić migrację do podfolderów i edytować pliki.
Wiem już o wirtualizacji i partycjach, ale nie tego szukam. Komputer docelowy nie ma wystarczającej mocy do wirtualizacji, a partycje nie współużytkują wolnego miejsca. Chcę skonfigurować system, w którym dual / triple / quad / etc uruchamia dystrybucje linuksowe, ale robi to z jednym systemem plików, więc nie ma przypadku „Mam wolne miejsce, ale jest na niewłaściwej partycji!”
Jeśli ktoś ma sugestie, jak edytować moje pytanie lub jego tytuł, aby było jaśniej, jestem cały w uszach.
źródło
Odpowiedzi:
Krótka odpowiedź - o ile mi wiadomo, nie ma gotowego do pracy rozwiązania dla konkretnych wymagań. Będziesz musiał dostosować każdy initramfs każdej dystrybucji, aby zaspokoić swoje specyficzne potrzeby.
Długa odpowiedź - tak, jest to możliwe. Obecnie większość dystrybucji Linuksa używa initramfs, które zostaną załadowane do pamięci przez bootloader, a następnie rozpakowane przez jądro. Tam będzie działał,
/sbin/init
który jest odpowiedzialny za skonfigurowanie wczesnej przestrzeni użytkownika (uruchamianie udev, ładowanie modułów, uruchamianie Plymouth, proszenie o hasło kryptograficzne, konfigurowanie sieci do montowania w sieci,… tak to nazywacie). Ponieważ możesz uruchamiać własne skrypty i oceniać niestandardowe programy rozruchowe.Przykład dla Debiana
Jeśli używasz Debiana (powinien być taki sam z Ubuntu), powinieneś być w stanie umieścić skrypt, w
/etc/initramfs-tools/scripts/init-bottom/
którym zostanie wykonany przed uruchomieniem init. Aby uzyskać więcej informacji o skrypcie, różne katalogi i układ znajdują się w man initramfs-tools . Będziesz musiał dostosowaćrootmnt
i dodać katalog docelowy.Przykładowy (nieprzetestowany) skrypt, który powinien zostać zainstalowany jako
/etc/initramfs-tools/scripts/local-bottom/00-myroot
lub/usr/share/initramfs-tools/scripts/init-top/00-myroot
:Chodzi o to, aby dostosować,
rootmnt
który jest używany winit
skrypcie initramfs do uruchamiania / wykonywania prawdziwego init. Ponieważ urządzenie root jest już zamontowane nainit-bootom
etapie, możesz po prostu dostosować / zmienić katalog docelowy.Aby użyć tego skryptu, po prostu dodaj nowy parametr rozruchowy, skopiuj skrypt, uczyń go wykonywalnym, zregeneruj initramfs i dodaj parametr rozruchowy do dystrybucji Linuksa, np
rootdir=/Ubuntu_Precise
.źródło
mount /dev/rootdevice /mountpoint
po uruchomieniu systemuOto dwa sposoby, które działają w Ubuntu Bionic (i ewentualnie gdzie indziej). nie mam wystarczającej liczby komentarzy do skomentowania, ale bionic: / usr / share / initramfs-tools / init szuka / etc / fstab dla / usr zaraz po wywołaniu mountroot i przed wywołaniem skryptów * -bottom, więc dodanie init- dolny skrypt (jak zasugerowano w innej odpowiedzi tutaj) jest „za późno”. zamiast tego polecam te:
źródło
Uruchamianie różnych Linuksa bez bałaganu przy użyciu tablicy partycji jest interesujące do różnych celów, alternatywnym rozwiązaniem dla współdzielonego systemu plików jest użycie woluminów pętli, tutaj kilka potrzebnych zmian, zakładając, że masz plik / wolumin pętli / debian w systemie plików / dev / sdb1 (Używam obecnego GNU / Debiana sid / unstable zarówno dla systemu głównego, jak i pętli).
Argumenty zdefiniowane w grub jako linia poleceń Linuxa są ustawione na env przez initrd / init, więc:
pętla pozwala zamontować wolumin nad „samym sobą”, domyślny przepływ skryptu wykonujemy po
mount /dev/sdb1 /root
prostu opcjonalnie ponownie montujemy / dev / sdb1 jako rw, jeśli był to ro, to zawsze dołączamy amount -o loop /root/debian /root
.Musisz również wstępnie załadować moduł do initram (nie zapomnij uruchomić update-initramfs)
Nie wiem, ile przy użyciu wydajności pętli wpływa na marnowanie zasobów, zastanawiam się, czy zamontowanie ext4 na ext4 podwaja prawdopodobieństwo awarii systemu plików, ale zgaduję, że można by to zrobić. Może jest lepszy sposób na użycie pętli, mniej hackerski, jeśli istnieje, proszę dać mi znać, ponieważ nie znalazłem.
źródło
To nie jest odpowiedź, ale chcę wyjaśnić pewną kwestię dotyczącą odpowiedzi i komentarzy Ulricha (nie mogę komentować powyżej).
Rozwiązanie Ulrich proponuje „może” działać (jeszcze nie przetestowane), ale wtedy otrzymasz system plików, którego nie można ponownie wymontować . Jako obejście (brzydkie IMHO) możesz zamontować fs jako rw przed chrootowaniem ( jak sugerowano tutaj ), ale uważaj na zepsute skrypty init. Wydaje mi się, że to obejście ma więcej skutków ubocznych (np. Zepsuty fs próbujący ponownie zamontować ro i zawodzić).
Używam jądra 3.2 z ext4 i montowanie już zamontowanego dev wewnątrz chroota nadal daje EBUSY, jak psusi komentuje.
źródło