Acabo de configurar un sistema base Gentoo (lo que significa que puedo arrancar e iniciar sesión y hacer cosas con él ahora). Mi partición raíz está en un grupo virtual LVM2 (con una /boot
partición separada ). Para arrancar, necesito pasar los siguientes parámetros al núcleo:
root=/dev/ram0 real_root=/dev/vg/rootlv init=/linuxrc dolvm
Aparentemente está usando un disco RAM inicial para hacer algo (supongo que cargar las cosas de LVM) antes de montar la raíz. ¿Hay alguna manera de que pueda poner este código en el núcleo para que no se necesite initrd? Si no, ¿cómo puedo hacer el initrd yo mismo?
Puede ser útil agregar que intenté compilar el kernel para la raíz no LVM, sin initrd y funcionó perfectamente. Luego intenté poner todo bajo LVM y no pude hacer que la máquina se iniciara (supongo que no puede manejar las cosas de LVM). Luego usé la genkernel
herramienta con la --lvm
opción y crea el núcleo de trabajo y el initrd que estoy usando actualmente.
Ahora quiero omitir genkernel
y hacer todo por mi cuenta, preferiblemente sin initrd para que la máquina arranque un poco más rápido (de todos modos no necesito la flexibilidad).
Respuestas:
Respuesta simple: No. Si quieres LVM necesitas un initrd.
Pero como otros han dicho antes: los LVM no ralentizan su sistema ni hacen nada malo de otra manera, solo le permiten crear un entorno que permita que su núcleo se cargue y haga su trabajo.
El initrd permite cargar su kernel: si su kernel está en una unidad LVM, se debe establecer todo el entorno LVM antes de que se pueda cargar el binario que contiene el kernel.
Echa un vistazo a la entrada de Wikipedia sobre initrd que explica qué hace el initrd y por qué lo necesitas.
Otra nota: veo su punto de querer hacer las cosas usted mismo pero puede ensuciarse las manos incluso con genkernel. Use genkernel --menuconfig all y básicamente puede configurar todo como si fuera a construir su kernel completamente sin soporte de herramientas, genkernel simplemente agrega make bzImage, make modules y modules_install líneas para usted y hace esas cosas desagradables de initrd.
Obviamente, puede construir el initrd usted mismo como se describe aquí para initramfs o aquí para initrd .
fuente
linuxrc
script en initrd realiza esta tarea.editar: acabo de darme cuenta de que estás intentando arrancar en LVM, nunca he configurado un LVM, nunca los necesité, por lo que probablemente el enfoque aquí no funcione
Aquí están las reglas básicas que debe hacer para crear un núcleo sin initrd (de memoria, no lo recordaba exactamente):
Vuelva a compilar su núcleo, asegúrese de incorporarlo (IMPORTANTE: ¡no como módulo!):
Device Drivers
)/
,/etc/*
y/lib/modules/*
(bajoFile systems
)Básicamente, el núcleo debe ser capaz de montar el sistema de archivos raíz, leer / etc / fstab, cargar otros módulos de controlador (si es necesario) y montar otros sistemas de archivos no raíz para completar el resto del proceso de arranque. Si tiene un proceso de arranque más complicado, por ejemplo, el arranque de red, entonces también necesita incorporar esos controladores.
Deshabilite initrd desde el núcleo "Configuración general> Sistemas de archivos RAM iniciales y soporte de disco RAM (initramfs / initrd)" también conocido como CONFIG_BLK_DEV_INITRD = n.
Modifique la configuración de GRUB, ya no necesita init = y realroot =, y configure root = para que apunte al dispositivo del sistema de archivos raíz.
Creo que eso es todo. No olvides mantener un kernel de respaldo y una buena copia de un Live CD de arranque, en caso de que ocurra algo.
Cosas que podrían salir mal: si compiló los controladores incorrectos o si compila los controladores básicos como un módulo, entonces el núcleo no puede leer el sistema de archivos. Reinicie con un kernel nuevo o con un Live CD y vuelva a compilar un kernel con los controladores correctos.
La única parte difícil es averiguar qué controlador es relevante para su hardware. Puede usar
lspci
ylshw
para ayudar a identificar su hardware. Si aún no tiene estas herramientas, entoncesemerge lshw pciutils
.fuente
lsmod
desde un kernel en ejecución también es útil.Sí, necesitas un initrd. Este es el por qué:
El proceso de arranque normal comienza con el gestor de arranque, que conoce lo suficiente sobre su sistema para encontrar el núcleo y ejecutarlo. (GRUB2 es lo suficientemente inteligente como para encontrar un kernel ubicado en una partición LVM2 o RAID, pero GRUB1 no lo es, por lo que generalmente se recomienda crear / iniciar como una partición separada con un diseño simplificado). Una vez que se carga, el kernel necesita para poder encontrar el sistema de archivos raíz, para que pueda iniciar el proceso de arranque. Sin embargo, LVM no puede iniciarse sin ser activado por algunas herramientas de espacio de usuario, que existen en el sistema de archivos raíz, que no se pueden cargar sin las herramientas de LVM, que existen en el sistema de archivos raíz ...;)
Para romper este ciclo, un initrd o initramfs es un sistema de archivos comprimido que se almacena con el kernel (ya sea en / boot o dentro del kernel), que contiene lo suficiente de un sistema Linux para iniciar servicios como LVM o MD o cualquier otra cosa usted quiere. Es un sistema de archivos temporal, y solo actúa como su sistema de archivos raíz el tiempo suficiente para cargar la raíz real.
En cuanto a hacer uno, la mayoría de la documentación sobre el tema es asombrosamente obsoleta: lvm2create_initrd, por ejemplo, ya ni siquiera funciona en Gentoo. (Configuré lo mismo hace unos meses, y tuve que reescribir el script antes de obtener un initrd que funcionara). Crear sus propios initramfs puede ser divertido, y es la única forma de obtener un arranque absolutamente mínimo. proceso (y aprender los entresijos sobre cómo arranca Linux en el proceso), pero es mucho trabajo.
La respuesta corta: usa Dracut. Es un nuevo marco que se está creando para generar un initramfs de una manera principalmente automatizada, y está en portage. La documentación es un poco escasa, pero hay suficiente para resolver las cosas, y es, con mucho, la forma más fácil de obtener un initramfs sólido y una raíz LVM.
fuente
Si bien no es posible no usar algún tipo de initrd, es posible no usar archivos initrd separados. (Nunca he usado genkernel, así que no puedo dar instrucciones para ello).
Por ejemplo, he establecido la opción:
Donde
/usr/src/initrd.contents
en mi caso se ve (tengo LVM + tuxonice + fbsplash):Y
/usr/src/init
es:fuente
Sí lo es.
Las complicaciones que surgen de la creación y el manejo de initrds se vuelven discutibles si instala y usa grub2. El wiki de grub2 http://grub.enbug.org/LVMandRAID describe cómo puede tener su / boot en lvm con nada más que un insmod lvm en grub.cfg, el archivo de configuración de grub, por lo tanto, no es necesario un initrd.
grub2 ahora en la versión 1.98 pero aún en la rama experimental en gentoo. Sin embargo, se puede instalar en otra ranura y es perfectamente utilizable.
¡Disfrutar!
fuente