Booteo (arranque) con una imagen del sistema de archivos -------------------------------------------------------- Dr. Luis Gerardo de la Fraga Departamento de Computación, Cinvestav. 30/05/2007 El proceso está explicado en la documentación del núcleo en el archivo initrd.txt Con esta opción podemos mantener el sistema de archivos en memoria. El problema es que por defecto el tamaño de una partición en memoria es de 4096KB (4 Megabytes). Todo el sistema de archivo se movió a una partición en un archivo. Se realizó así: dd if=/dev/zero of=initrd bs=1k count 4096 mkfs.ext2 -F initrd mount -o loop initrd /mnt/ Y se llenó el sistema de archivos con busybox y los directorios básicos, todos excepto el directorio /boot y se comprimió umount /mnt gzip initrd mv initrd.gz /boot Para arrancarlo se hizo en grub title Linux en memoria root (hd0,4) kernel /boot/bzImage root=/dev/ram0 rw init=/sbin/init initrd /boot/initrd.gz La línea "root (hd0,4)" solo indica donde está instalado grub y el núcleo y el sistema de archivos está en el directorio /boot de esa partición Lo siguiente es una traducción de la parte "Operation" del archivo initrd.txt de la documentación del núcleo. Cuando se usa initrd, el sistema típicamente arranca (bootea) como sigue: 1) El cargador de arranque carga el núcleo y el disco RAM inicial 2) El núcleo convierte a initrd en un disco RAM "normal" y libera la memoria usada por initrd 3) initrd es montado de lectura-escritura y propietario root 4) Se ejecuta /linuxrc (este archivo puede ser cualquier ejecutable válido, como un script del shell; se ejecuta con uid 0 y puede realizar básicamente todo lo que init puede hacer. 5) linuxrc monta el sistema de archivos raíz "real" 6) linuxrc coloca el sistema de archivos raíz en el directorio raíz usando la llama al sistema pivot_root 7) La secuencia usual de arranque (esto es, la invocación a /sbin/init) se realiza sobre el sistema de archivos raíz 8) Se borra el archivo de sistema initrd Nótese que el cambio de directorio raíz no involucra desmontarlo. Por lo tanto es porsible dejar procesos ejecutándise sobre initrd durante ese procedimiento. También nótese que los sistemas de archivos montados bajo initrd continuan siendo accesibles. En la solución especificada aquí, el proceso de arranque no realiza los pasos (5), (6) y (8). -------------------------------------------------------- Arranque desde CDROM -------------------------------------------------------- Esto es una traducción de [1]. La versión de grub es la 0.97 [2]. GRUB tiene el modo de "no emulation" en la especificación de El Torito. Esto significa que se puede usar desde GRUB todo el CDROM y no se tiene que usar un diskete o un archivo de imagen en disco duro, lo cual puede causar problemas de compatibilidad. Para arrancar desde CD-ROM, GRUB usa un Stage 2 especial llamado stage2_eltorito. Solo se necesita el archivo stage2_eltorito de GRUB para hacer de arranque el CDROM. No se necesitan los archivoc stage1 o stage2, esto porque El Torito es diferente que el proceso de arranque estándar. Un ejemplo del procedimiento que hay que seguir para realizar una imagen de CDROM arrancable. Primero, se realiza un directorio raiz para la imagen, podría ser "iso": $ mkdir iso Se realiza un directorio para GRUB: $ mkdir -p iso/boot/grub Se copia el archivo stage2_eltorito: $ cp /usr/lib/grub/i386-pc/stage2_eltorito iso/boot/grub Se se desea, se realiza un archivo grub.conf en iso/boot/grub y se copian todos los archivos y directorios que tendrá el disco en el directorio iso. Para el sistema mínimo solo necesitamos el initrd.gz y el núcleo (ambos en iso/boot) Y finalmente se realiza la imagen ISO9660 con la línea de comando: $ mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot \ -boot-load-size 4 -boot-info-table \ -input-charset iso8859-1 -o grub.iso iso Esto produce un archivo de nombre grub.iso, y este ya puede quemarse en un CD (o en un DVD). mkisofs ya pose el disco para arrancar usando el archivo boot/grub/stage2_eltorito, por lo que no es necesario instalar GRUB en el disco. ( -boot-load-size 4 bit se requiere por compatibilidad con el BIOS de muchas máquinas viejas). Se puede usar el dispositivo "(cd)" para accesar el CD-ROM en el archivo de configuración. Pero no se requiere, GRUB automáticamete ajusta el dispositivo raíz a "(cd)" cuando de arranca desde CD-ROM. Solo se requiere "(cd)" si se quiere accesar también otros manejadores. NOTA: Al crear el archivo de configuración no debe realizarse un llamado a archivos que no exiten en disco, por que si no el arranca fallará. Esto no es un bug pero está reportado en el bug #19343 (http://www.gnu.org/software/grub/). El archivo de configuración sería algo como: default=0 timeout=10 title Linux en memoria desde CDROM kernel /boot/bzImage root=/dev/ram0 rw init=/sbin/init initrd /boot/initrd.gz [1] http://www.gnu.org/software/grub/manual/html_node/Making-a-GRUB-bootable-CD_002dROM.html#Making-a-GRUB-bootable-CD_002dROM [2] La versión de GRUB que se está usando es grub --version grub (GNU GRUB 0.97) ----------------------------------------------------------- Como hacer un disco de arranque en una imagen en disco cd /root dd if=/dev/zero of=boot.img bs=1k count=1440 mkfs.ext2 -F boot.img mount -o loop boot.img /mnt mkdir /mnt/boot mkdir /mnt/boot/grub cd /boot/grub cp stage* menu.lst /mnt/boot/grub/ umount /mnt # /sbin/grub --batch --device-map=/dev/null <