Saya memiliki Linux (Debian Jessie) diinstal pada hard drive. Drive - sda1
, ext4fs, dan sda2
- swap
Saya punya /chroot
folder. Ada diinstal sistem lain, di /chroot
folder.
Pertanyaan:
Bagaimana cara memberitahu bootmanager, untuk boot bukan sistem utama (utama, Debian Jessie), tetapi sistem di / chroot ? Mungkin, berubah /menu.lst
dan /chroot/etc/fstab
? ( vmlinuz root=/dev/sda1/chroot
?)
Atau varian pertanyaan lain: apakah mungkin, untuk menginstal linux tidak ke direktori root partisi, tetapi di folder? ( /another_linux/bin
, /another_linux/home
, /another_linux/etc
, ...)
vmlinuz root=/dev/sda1/chroot
tidak akan bekerja Orang mungkin bisa mensimulasikan ini dengan metode yang mirip dengan apa yang digunakaninitrd
. Lihat misalnya di sini . Anda me/new_root
- mount seperti yang dijelaskan di sana, lalu bukannyacd /new_root
melakukancd /new_root/chroot
dan melanjutkan.Jawaban:
Ini tidak dapat dilakukan oleh bootloader atau kernel. Parameter untuk
root
opsi kernel seperti padaroot=/dev/sda1
tampak seperti nama path Unix standar, tetapi nama path tersebut ditafsirkan menurut sistem file yang saat ini dipasang. Pada saatroot
opsi ditafsirkan, tidak ada sistem file yang terpasang. Yah, hampir tidak ada. Pada saat inisialisasi kernel terdapat sebuah instance dariramfs
sistem file minimal yang disebutrootfs
mount sebagai root untuk proses awal berjalanstart_kernel()
. Interpretasi aktual dariroot
parameter opsi dilakukan dalam rutin yang disebutname_to_dev_t()
. Salah satu sintaks yang didukung adalah/dev/name
format, di mana nama ditafsirkan dengan melakukan mount sementara dari sistemsysfs
file dirootfs
root, dan cari blok pencocokan entri nama perangkat di bawah/sys/block
. Proses ini dijelaskan secara lebih rinci di sini .Setup seperti yang dijelaskan perlu dilakukan dengan mem-boot dulu ke lingkungan minimal seperti yang disediakan oleh
initrd
, me-mount filesystem root sebenarnya dari/dev/sda1
pada mountpoint sementara, misalnya/mnt/rootfs
, kemudian mengubah direktori root untuk/mnt/rootfs/chroot
menggunakanpivot_root(8)
.Ini agak mirip dengan bagaimana filesystem root untuk LinuX Containers ( LXC ) diatur. LXC adalah implementasi virtualisasi tingkat sistem operasi untuk Linux. Virtualisasi tingkat sistem operasi umumnya digunakan dalam lingkungan hosting virtual sebagai alternatif ringan untuk virtualisasi penuh yang dikelola oleh hypervisor. Dalam virtualisasi tingkat sistem operasi, satu kernel sistem operasi dibagikan di antara banyak instance ruang pengguna yang terisolasi. Setiap instance, sering disebut container, jail, Virtual Private Server (VPE) atau Virtual Environment (VE), pada dasarnya adalah instalasi sistem operasi terpisah yang bertempat di direktori miliknya sendiri pada sistem host.
sumber
Saya menemukan masalah yang sama dan akhirnya menulis ini untuk membuatnya bekerja tanpa rasa sakit di berbagai sistem (debian, ubuntu saat ini):
Lari
make_chroot_initrd
skrip untuk membuat gambar initrd yang diaktifkan dengan chroot baru dari yang sudah ada:Gambar baru akan persis sama, kecuali sekarang dapat menangani
chroot=
parameter boot.Dengan grub2 sebagai bootloader Anda dapat menambahkan entri ke
/boot/grub/grub.cfg
:(atau mungkin lebih baik
/etc/grub.d/40_custom
)(ubah file / partisi agar sesuai dengan milik Anda)
Pemasangan di seluruh sistem
Setelah puas, Anda dapat membuat perubahan permanen
(hingga paket initramfs-tools ditingkatkan).
Dalam sistem chroot:
Mulai sekarang gambar initrd biasa akan mendukung boot chroot.
Tidak perlu menggunakan initrd.chroot terpisah yang mungkin tidak sinkron dengannya.
Lihat boot_chroot untuk detailnya.
sumber
Ya, Anda dapat melakukan trik menggunakan subvolume Btrfs .
Pertama, Anda perlu mengonversi ext4 ke btrfs seperti dijelaskan di sini .
Ubah chroot Anda menjadi subvilume jika belum:
Sekarang Anda memiliki subvolume bernama path / to / chroot . Anda bisa memeriksanya
sudo btrfs subvol list /
Sekarang Anda dapat membuat boot ke subvolume record di grub. Cukup tambahkan
rootflags=subvol=path/to/chroot
ke linux load string di item menu grub atau gunakan ini untuk menyelidiki secara otomatis.sumber