Saya ingin mencoba membuat komputer sehingga memiliki banyak instalasi Linux semua dalam sistem file yang sama. Misalnya, filesytem akan memiliki 3 folder: /Ubuntu_Precise
, /Ubuntu_Oneiric
, dan /Ubuntu_Natty
.
(Saya tahu Anda bisa melakukan ini dengan BTRFS dan subvolume, tapi saya ingin menggunakan EXT4 untuk kecepatan).
Saya pernah mengatur beberapa instalasi dari distro yang berbeda menggunakan BTRFS, dan dari mulai bekerja, saya tahu Grub tidak apa-apa dengan mem-boot vmlinuz dan gambar initrd dari jalur 'tidak standar'. Tetapi ketika saya melakukan hal BTRFS, ada rootflags=subvol=@<subvolume_name>
yang memerintahkan kernel untuk me-mount subvolume itu sebagai / di sistem file. Apakah ada argumen bahwa Anda dapat melewati kernel yang akan membuatnya mengikat mount subfolder di partisi sebagai / dan kemudian boot?
Saya pikir untuk bagian lain, saya cukup dekat. Saya tahu bagaimana cara spesifik untuk mengikat mount /etc/fstab
. Juga, sejak saya mengatur sistem saya dengan beberapa instal linux di subvolume BTRFS, saya terbiasa menginstal distro di VM dan kemudian memigrasikannya menggunakan rsync, jadi saya tidak terlalu khawatir tentang apa yang perlu saya lakukan untuk dapatkan konfigurasi yang tepat, saya hanya mencoba mencari tahu konfigurasi yang tepat. Setelah saya tahu itu, saya harus dapat melakukan migrasi ke subfolder dan mengedit file dengan cukup mudah.
Saya sudah tahu tentang virtualisasi dan partisi, tapi bukan itu yang saya cari. Komputer target tidak memiliki kekuatan yang cukup untuk melakukan virtualisasi, dan partisi tidak berbagi ruang kosong. Saya mencari untuk membuat sistem yang dual / triple / quad / etc mem-boot distro linux, tetapi itu melakukannya dengan satu filesystem, sehingga tidak ada kasus "Saya punya ruang kosong, tapi ada di partisi yang salah!"
Jika ada yang punya saran bagaimana mengedit pertanyaan saya atau judulnya menjadi lebih jelas, saya mendengar semuanya.
sumber
Jawaban:
Jawaban singkat - sejauh yang saya tahu tidak ada solusi yang sesuai untuk kebutuhan spesifik Anda. Anda harus menyesuaikan setiap initramf dari setiap distribusi untuk mendukung kebutuhan spesifik Anda.
Jawaban panjang - ya itu mungkin. Saat ini sebagian besar distribusi Linux menggunakan initramfs yang akan dimuat ke dalam memori oleh bootloader dan kemudian dibongkar oleh kernel. Di sana ia akan menjalankan
/sbin/init
yang bertanggung jawab untuk mengatur ruang pengguna awal (menjalankan udev, memuat modul, mulai plymouth, meminta frasa sandi crypto, mengatur jaringan untuk pemasangan jaringan, ... sebut saja). Karena Anda dapat menjalankan skrip Anda sendiri dan mengevaluasi parmater boot khusus.Contoh untuk Debian
Jika Anda menggunakan Debian (harus sama dengan Ubuntu), Anda harus dapat menempatkan skrip
/etc/initramfs-tools/scripts/init-bottom/
yang akan dijalankan sebelum init dimulai. Untuk informasi lebih lanjut tentang skrip, direktori dan tata letak yang berbeda melihat-lihat man-initramfs-tools . Anda harus menyesuaikanrootmnt
dan menambahkan direktori target.Contoh skrip (belum diuji) yang harus diinstal sebagai
/etc/initramfs-tools/scripts/local-bottom/00-myroot
atau/usr/share/initramfs-tools/scripts/init-top/00-myroot
:Idenya adalah untuk menyesuaikan
rootmnt
yang digunakan dalaminit
skrip initramfs untuk memulai / mengeksekusi init nyata. Karena perangkat root sudah terpasang diinit-bootom
panggung Anda hanya dapat menyesuaikan / mengubah direktori target.Untuk menggunakan skrip ini, cukup tambahkan parameter boot baru, salin skrip, buat skrip tersebut dapat dieksekusi, buat ulang initramfs Anda dan tambahkan parameter boot untuk distribusi Linux Anda, mis
rootdir=/Ubuntu_Precise
.sumber
mount /dev/rootdevice /mountpoint
setelah sistem berjalanBerikut adalah dua cara yang berfungsi di ubuntu bionic (dan mungkin di tempat lain). Saya belum cukup rep untuk berkomentar, tetapi, bionik: / usr / share / initramfs-tools / init terlihat di / etc / fstab untuk / usr segera setelah memanggil mountroot dan sebelum memanggil skrip * -bottom, jadi tambahkan init- skrip bawah (seperti yang disarankan dalam jawaban lain di sini) "terlambat". sebagai gantinya saya merekomendasikan ini:
sumber
Boot linux yang berbeda tanpa mengacaukan tabel partisi menarik untuk tujuan yang berbeda, solusi alternatif untuk sistem file bersama adalah dengan menggunakan volume loop, di sini beberapa perubahan yang diperlukan seandainya Anda memiliki file / volume loop debian / volume ke sistem file / dev / sdb1 (Saya menggunakan GNU / Debian sid / saat ini tidak stabil untuk os utama dan loop).
Argumen yang didefinisikan ke grub sebagai baris perintah linux diatur ke env oleh initrd / init, jadi:
loop memungkinkan untuk me-mount volume lebih dari "itu sendiri", aliran skrip default melakukan
mount /dev/sdb1 /root
kita hanya opsional remount / dev / sdb1 sebagai rw jika itu ro maka selalu tambahkan amount -o loop /root/debian /root
.Perlu juga untuk memuat beberapa modul ke dalam initram (maka jangan lupa untuk menjalankan pembaruan-initramfs)
Tidak tahu berapa banyak menggunakan kinerja pengaruh loop atau sumber daya limbah, saya bertanya-tanya apakah me-mount ext4 lebih dari ext4 menggandakan probabilitas kegagalan sistem file, tetapi kira beberapa penyesuaian dapat dilakukan. Mungkin ada cara yang lebih baik untuk menggunakan loop, lebih sedikit peretasan, jika ada tolong beri tahu saya karena saya belum menemukan.
sumber
Ini bukan jawaban tetapi saya ingin mengklarifikasi beberapa hal tentang jawaban dan komentar Ulrich (saya tidak bisa berkomentar di atas).
Solusi yang diusulkan Ulrich "mungkin" berfungsi (belum diuji) tetapi kemudian Anda akan mendapatkan sistem file yang tidak dapat di-remount . Sebagai solusinya (IMHO jelek) Anda dapat me-mount fs sebagai rw sebelum chroot ( seperti yang disarankan di sini ) tetapi hati-hati tentang skrip init yang rusak. Saya kira solusi ini memiliki lebih banyak efek samping (seperti rusak fs mencoba remount ro dan gagal).
Saya menggunakan kernel 3.2 dengan ext4 dan pemasangan dev yang sudah terpasang di dalam chroot masih memberikan EBUSY sebagai komentar psusi.
sumber