Saya baru saja membuat sistem basis Gentoo (yang berarti saya bisa boot dan login dan melakukan hal-hal dengan itu sekarang). Partisi root saya ada dalam grup virtual LVM2 (dengan /boot
partisi terpisah ). Untuk mem-boot saya perlu memberikan parameter di bawah ini ke kernel:
root=/dev/ram0 real_root=/dev/vg/rootlv init=/linuxrc dolvm
Rupanya itu menggunakan ramdisk awal untuk melakukan sesuatu (saya kira memuat hal-hal LVM) sebelum me-mount root. Apakah ada cara agar saya dapat memasukkan kode ini ke dalam kernel itu sendiri sehingga tidak diperlukan initrd? Jika tidak, bagaimana saya bisa membuat initrd sendiri?
Mungkin bermanfaat untuk menambahkan bahwa saya telah mencoba mengkompilasi kernel untuk root non-LVM, tanpa initrd dan bekerja dengan sempurna. Kemudian saya mencoba untuk meletakkan semuanya di bawah LVM dan tidak bisa mendapatkan mesin untuk boot (saya kira itu tidak dapat menangani hal-hal LVM). Kemudian saya menggunakan genkernel
alat dengan --lvm
opsi dan itu menciptakan kernel dan initrd yang sedang saya gunakan.
Sekarang saya ingin melewatkan genkernel
dan melakukan semuanya sendiri, lebih disukai tanpa initrd sehingga mesin akan boot agak lebih cepat (saya tidak memerlukan fleksibilitas pula).
Jawaban:
Jawaban sederhana: Tidak. Jika Anda menginginkan LVM, Anda memerlukan initrd.
Tetapi seperti yang orang lain katakan sebelumnya: LVM tidak memperlambat sistem Anda atau melakukan hal buruk dengan cara lain, mereka hanya memungkinkan Anda untuk menciptakan lingkungan yang memungkinkan kernel Anda memuat dan melakukan tugasnya.
Initrd memungkinkan kernel Anda untuk dimuat: Jika kernel Anda berada di drive LVM seluruh lingkungan LVM harus dibuat sebelum biner yang berisi kernel dapat dimuat.
Lihatlah Entri Wikipedia pada initrd yang menjelaskan apa yang dilakukan initrd dan mengapa Anda membutuhkannya.
Catatan lain: Saya mengerti maksud Anda ingin melakukan sesuatu sendiri, tetapi Anda bisa membuat tangan Anda kotor bahkan dengan genkernel. Gunakan genkernel --menuconfig all dan pada dasarnya Anda dapat mengatur semuanya seolah-olah Anda akan membangun kernel sepenuhnya tanpa dukungan alat, genkernel hanya menambahkan make bzImage, membuat modul dan membuat jalur modules_install untuk Anda dan melakukan hal-hal initrd yang buruk.
Anda jelas dapat membangun initrd sendiri seperti yang diuraikan di sini untuk initramfs atau di sini untuk initrd .
sumber
linuxrc
skrip initrd melakukan tugas ini.sunting: baru sadar Anda mencoba untuk boot pada LVM, saya tidak pernah mengatur LVM, tidak pernah membutuhkannya, jadi mungkin pendekatan di sini mungkin tidak berfungsi
Berikut adalah aturan dasar yang perlu Anda lakukan untuk membuat kernel initrd-less (dari memori, saya tidak ingat persis):
Kompilasi ulang kernel Anda, pastikan untuk memasukkan kernel (PENTING: bukan sebagai modul!):
Device Drivers
)/
,/etc/*
dan/lib/modules/*
(di bawahFile systems
)Pada dasarnya, kernel harus dapat me-mount sistem file root, membaca / etc / fstab, memuat modul driver lain (jika perlu), dan me-mount sistem file non-root lainnya untuk menyelesaikan sisa proses booting. Jika Anda memiliki proses booting yang lebih terlibat, misal boot jaringan maka Anda perlu menginstal driver tersebut juga.
Nonaktifkan initrd dari kernel "Pengaturan umum> Sistem file RAM awal dan dukungan disk RAM (initramfs / initrd)" alias CONFIG_BLK_DEV_INITRD = n.
Ubah konfigurasi GRUB, Anda tidak lagi membutuhkan init = dan realroot =, dan setup root = sehingga ia menunjuk ke perangkat sistem file root.
Saya pikir itu saja. Jangan lupa untuk menyimpan kernel cadangan, dan salinan Live CD yang dapat di-boot, jika terjadi sesuatu.
Hal-hal yang bisa salah: jika Anda dikompilasi di driver yang salah atau jika Anda mengkompilasi driver dasar sebagai modul, maka kernel tidak dapat membaca sistem file. Reboot dengan kernel baru, atau dengan Live CD dan kompilasi ulang kernel dengan driver yang benar.
Satu-satunya bagian yang sulit adalah mencari tahu driver mana yang relevan dengan perangkat keras Anda. Anda dapat menggunakan
lspci
danlshw
membantu mengidentifikasi perangkat keras Anda. Jika Anda belum memiliki alat ini, makaemerge lshw pciutils
.sumber
lsmod
dari kernel yang berjalan juga berguna.Ya, Anda membutuhkan initrd. Inilah alasannya:
Proses boot normal dimulai dengan bootloader, yang cukup tahu tentang sistem Anda untuk menemukan kernel dan menjalankannya. (GRUB2 cukup pintar untuk menemukan kernel yang terletak pada partisi LVM2 atau RAID, tetapi GRUB1 tidak, jadi biasanya Anda disarankan untuk membuat / boot sebagai partisi terpisah dengan tata letak yang disederhanakan.) Setelah dimuat, kernel perlu untuk dapat menemukan sistem file root, sehingga dapat memulai proses boot. Namun, LVM tidak dapat memulai tanpa dipicu oleh beberapa alat userspace, yang ada di sistem file root, yang tidak dapat dimuat tanpa alat LVM, yang ada di sistem file root ...;)
Untuk memutus siklus ini, initrd atau initramfs adalah sistem file terkompresi yang disimpan dengan kernel (baik di / boot, atau di dalam kernel itu sendiri), yang berisi cukup banyak sistem Linux untuk memulai layanan seperti LVM atau MD atau apa pun kamu ingin. Ini adalah sistem file sementara, dan hanya bertindak sebagai sistem file root Anda cukup lama untuk root yang sebenarnya untuk dimuat.
Sejauh benar-benar membuatnya, sebagian besar dokumentasi tentang topik ini sudah usang - lvm2create_initrd, misalnya, bahkan tidak berfungsi lagi di Gentoo. (Saya membuat hal yang sama beberapa bulan yang lalu, dan saya harus menulis ulang skrip sebelum mendapatkan initrd yang berfungsi.) Membuat initramfs Anda sendiri bisa menyenangkan, dan itu satu-satunya cara untuk mendapatkan boot yang benar-benar minimal. proses (dan pelajari seluk-beluk tentang bagaimana Linux melakukan booting dalam proses), tetapi ini banyak pekerjaan.
Jawaban singkatnya: gunakan Dracut. Ini adalah kerangka kerja baru yang dibuat untuk menghasilkan initramfs dengan cara yang sebagian besar otomatis, dan ini dalam portage. Dokumentasinya agak jarang, tetapi ada cukup di luar sana untuk mencari tahu, dan sejauh ini cara termudah untuk mendapatkan initramf yang solid, dan root LVM.
sumber
Meskipun tidak mungkin untuk tidak menggunakan semacam initrd, adalah mungkin untuk tidak menggunakan file initrd yang terpisah. (Saya tidak pernah menggunakan genkernel jadi saya tidak bisa memberikan instruksi untuk itu).
Misalnya saya telah mengatur opsi:
Di mana
/usr/src/initrd.contents
dalam kasus saya terlihat seperti (saya punya LVM + tuxonice + fbsplash):Dan
/usr/src/init
adalah:sumber
Ya itu.
Komplikasi yang timbul dari membuat dan menangani initrds diterjemahkan menjadi moot jika Anda menginstal dan menggunakan grub2. Wiki grub2 http://grub.enbug.org/LVMandRAID menjelaskan bagaimana Anda dapat memiliki / boot di lvm dengan tidak lebih dari lmm insmod di grub.cfg, file konfigurasi grub, karenanya tidak perlu initrd.
grub2 sekarang di versi 1.98 tetapi masih di cabang percobaan di gentoo. Namun itu dapat dipasang di slot lain dan dapat digunakan dengan sempurna.
Nikmati!
sumber