Multiarranque en Linux

Desde “ArbolCharyou” nos viene este post sobre Linux, bastante interesante:

El arranque dual es bastante sencillo, muchos lo usan para tener Windows y Linux y poder arrancar uno u otro cuando lo necesiten.

Pero que sucede cuando queremos tener y poder arrancar más de dos sistemas operativos?

Si sois nuevos en Ubuntu, o quereis “simplemente” arrancar dualmente Ubuntu con Windows, este no es el mejor tutorial, para eso tendreis que ir a otro o mirar en los foros de la web de Ubuntu (aunque podeis pillar ideas de aquí también, claro).

En este “hazlo-tú-mismo” cubriré principalmente como arrancar múltiples sistemas operativos, sobre todo distribuciones de Linux (Versiones), usando GRUB. Para otros sistemas, otro día, o ya mirais por otra parte.

  1. Pre-requisitos – “cosas que ya deberíais saber”
  2. Idea general del proceso de arranque
  3. Particionamiento (importante)
  4. Compartir particiones
  5. Instalar un nuevo sistema operativo y configurar el GRUB
  6. Mantenimiento automático de GRUB
  7. Ejemplos

1. Pre-requisitos – “cosas que ya deberiais saber” :

Debeis tener un conocimiento sólido de como particionar y los tipos diferentes de particiones disponibles en Linux y GRUB. Mientras que en Windows las particiones son del tipo “x:”, Linux usa particiones del tipo “/dev/sdxy” o “/dev/hdxy” y números de GRUB empezando con 0.

Para este tutorial, pensad que cada instalación necesita una partición root “/” y un directorio de arranque, o una particion “/boot” por separado si se usa encriptacion XFS o LVM.

Existen por ahi tutoriales sobre el particionamiento y el sistema que usa GRUB, pero no nos dedicaremos a esto aquí porque nos alargariamos demasiado, y ya asumimos que habeis estudiado chicos xD.

2. Visión general del proceso de arranque del sistema :

Los detalles mas abajo, pero primero un pequeño resumen de la mano de la Wikipedia:

Cita (traducida):

Cuando se enciende un ordenador, la BIOS encuentra el primer dispositvo de arranque (normalmente el disco duro) y transfiere el control al registro de arranque maestro (MBR), los primeros 512 bytes del hd.El MBR contiene la primera fase del GRUB, dado el escaso tamaño del MBR, la primera fase hace poco más que cargar la siguiente fase del GRUB (que puede residir físicamente en cualquier parte del disco duro). La primera fase puede cargar la siguiente directamente, o puede cargar la 1.5.: Esta fase del GRUB esta localizada en los primeros 30 kilobytes del disco duro siguientes inmediatos al MBR. Y después ya carga la fase 2.Cuando esta fase número 2 recibe el control, el GRUB presenta el interfaz al usuario para poder seleccionar el sistema a arrancar. Normalmente de forma gráfica aunque, si esto no está disponible o el usuario quiere más control, el GRUB tiene su propia interfaz de comandos, donde el usuario puede manualmente especificar los parámetros de arranque. Tambien se le puede asignar para el arranque kernels especificos despues de un periodo dado de tiempo.Una vez que las opciones de arranque han sido seleccionadas, el GRUB carga el kernel seleccionado en la memoria y pasa el control a este mismo. En esta fase, el GRUB pasa el control al proceso de arranque a otro cargador usando comandos encadenados si son requeridos por el sistema operativo.

/boot

Normalmente en la partición de arranque “/”, contiene entre otras cosas, tu kernel, el initrd (disco ram de inicio), y el grub, particularmente el archivo menu.lst, que es el que podremos editar para modificar los parámetros de arranque.

Una partición separada /boot se requiere con GRUB si se usa XFS, LVM y/o encriptación para tu partición root.

Así mismo, no puedes compartir una partición /boot (el problema es que muchas distribuciones sobreescribirán tu partición /boot cuando las instales.

3. Particionamiento :

En general, aconsejaría reservar unos 512 Mb para la partición de arranque (por si acaso), de 5 a 10 Gb para la root “/”, y una particion “/data” para los datos del usuario, de unos 40 a 100 Gb.

4. Compartir Particiones :

Recuerda: No puedes compartir una partición /boot con múltiples distros.

Swap

La partición swap puede ser compartida entre varias distros Linux y incluso con BSD (sólo necesitas una swap). El problema puede estar en que algunas distros automáticamente formatean la partición swap (durante la instalación), y si esta formateada, el UUID cambiará. En este paso tienes que cambiar editando “/etc/fstab” (en cualquier OS viejo) y actualizar el uuid.

Conflictos con un /home compartido

Aunque la idea de compartir una partición /home puede sonar bien, tened cuidado al hacerlo asi. Los problemas podrían ser:

  • Un Sistema Operativo agresivo (o un “mal” click de raton) pueden formatear o sobreescribir la particion sin pedir permiso siquiera. Aunque es raro hoy en dia, cosas asi podrian hacer perder datos al usuario (osea, a ti).
    • El usuario esta identificado en el sistema por un número de id (uid), y no por un nombre. Ubuntu empieza a nombrar los usuarios desde el 1000, pero esto no es standard. Fedora, por ejemplo, empieza con 500. Por eso, incluso si tu nombre de usuario es el mismo en Fedora y Ubuntu, tendrás diferentes uuid (lógico, verdad?) y como los uuid son diferentes, no tendras “casa” nunca más.
    • Otro conflicto potencial es con tu configuración, o los archivos que terminan en un punto “.” en tu /home. Mientras que podrias compartir estos archivos en diferentes versiones de Ubuntu, podrias tener conflictos con otras distros o diferentes versiones de aplicaciones (gnome, gimp, etc..).

      Pero… hay solución. Este problema puede ser “solucionado” usando diferentes nombres de usuario con cada distro, o mejor aun, una particion /data.

      Particion /data compartida

      Aconsejo hacer una partición para los datos que se quieran compartir entre distros y dejar un /home (y sus archivos de configuración) en la partición root. Aun tendrás problemas con permisos, pero esto eliminará conflictos con archivos de configuración en la particion /home compartida.
      Puedes minimizar problemas con los permisos también al mismo tiempo que mantienes la seguridad haciendo un nuevo grupo de usuarios, llamándolo “data” o “datos”, y dándole permisos de datos a la partición root, con permisos de 770.

      *** Igual que con la home compartida, cuidado con no formatear o sobreescribir la partición /data. (o de añadir tu partición de datos a /etc/fstab después de instalar).

      5. Instalar un nuevo SO, configurar manualmente GRUB :

      Normalmente, cuando instalas un nuevo SO, reinstalarás el GRUB en el MBR y GRUB ahora apuntará al nuevo SO cuando cargue la fase 1.5. Es fácil que el nuevo SO lo encuentre y instale automáticamente y lo añada al menu del GRUB, aunque si no fuera asi, necesitarás editar manualmente /boot/grub/menu.lst y añadir ahí tu nuevo SO al GRUB.
      El “problema” con editar manualmente el menu.list es que necesitas actualizar también manualmente la linea GRUB del kernel donde arranca cada vez que actualizes el kernel en el viejo SO.

      Una linea tipica del grub sería así:

      title Ubuntu hardy (development branch), kernel 2.6.24-11-generic
      root (hd0,1)
      kernel /boot/vmlinuz-2.6.24-11-generic root=UUID=b485ef35-1e30-4709-91
      initrd /boot/initrd.img-2.6.24-11-generic
      quiet

      El kernel en rojo y el initrd necesitan ser actualizados manualmente con cada actualización del kernel  (Solo en viejos SO’s).

      Si prefieres editar manualmente el /boot/grub/menu.lst con cada actualización del kernel, bueno, vale…pero espero que tengas cosas mejores a hacer, porque…

      Podrías automatizar el proceso con “cargas en cadena” (ver la siguiente sección).

      6. Mantenimiento automático del GRUB con “cargas en cadena” :

      Esta sección es opcional.

      Probablemente creais que este método es sólo para cargar Windows o BSD, pero también sirve para arrancar Linux.

      Como implica el nombre mismo, el GRUB pasa el control de la secuencia de arranque a otro cargador de arranque, localizado en el dispositivo al que el menú de entrada indica. Este puede ser bien un sistema operativo Windows, o cualquier otro, incluyendo Linux.

      Las ventajas de esto incluyen :

        • Las lineas del menu.lst are se simplifican bastante
        • Cada SO “automágicamente” actualiza el menu.lst (en su respectivos directorios /boot directorios/particiones) y no necesitarás actualizar manualmente las cadenas de arranque cuando actualices el kernel.

          El “truqui” es que necesitas instalar el GRUB en la partición de arranque destino. Pero bueno, la manera más fácil de hacer esto es instalar conjuntamente el GRUB con el MBR y la partición root (o /boot), con cada instalación.

          Para instalar manualmente grub (como root):

          Codigo:

          $ sudo grub

          grub> root (hd0,1)
          grub> setup (hd0,1)
          grub> quit

          Nota: Hay que cambiar (hd0,1) a la partición que sea root (o a la de arranque si usas XFS, LVM, o encriptacion). (“setup (hd0)” en el prompt del grub instalará el mismo en el MBR).

          Como veis, esto simplifica bastante las cadenas de arranque. Para cada SO edita la cadena para que se parezca a esto:

          title Fedora 8
          root (hd0,0)
          chainloader +1
          boot 

          Nota: De nuevo, cambia (hd0,0) a la partición apropiada (Fedora) raiz (o de arranque si has usado las opciones por defecto de Fedora y configurado una LVM).

          Configurar GRUB (en un SO viejo, con cadenas de arranque)

          Ahora cuando arranques, si has seleccionado un SO nuevo, si seleccionas el nuevo SO en la pantalla del GRUB, arrancará directamente al nuevo SO.
          Si de otra manera, seleccionas un SO anterior, tendras una segunda pantalla de grub, lo seleccionas y ya está.
          Si esto no funcionara, puedes seleccionar las opciones por defecto del grub para el SO anterior. Arrancas primero el viejo SO, y editas el /boot/grub/menu.lst.

          También querrás asegurarte que la opción por defecto sea 0 y poner el “time out” a 0 también.

          ## default num
          # Set the default entry to the entry number NUM. Numbering starts from 0, and
          # the entry number 0 is the default if the command is not used.
          #
          # You can specify ’saved’ instead of a number. In this case, the default entry
          # is the entry saved with the command ’savedefault’.
          # WARNING: If you are using dmraid do not use ’savedefault’ or your
          # array will desync and will not let you boot your system.
          default 0

          ## timeout sec
          # Set a timeout, in SEC seconds, before automatically booting the default entry
          # (normally the first entry defined).
          timeout 1

          Después de estos cambios, cuando arranques el viejo SO, verás la segunda pantalla para el GRUB por un segundo (esto permite seleccionar un modo de recuperación si fuera necesario).
          Cuando actualices el SO viejo a un nuevo kernel, el segundo GRUB (cargado por comandos de cadena) se actualizará automáticamente y no necesitarás editarlo manualmente.

          7. Ejemplos:

          Imaginemos arrancando dualmente a Fedora y a Ubuntu con las siguientes particiones:

          /dev/sda1 = partición de arranque (para Fedora)

          /dev/sda2 = LVM = la root de Fedora “/”

          /dev/sda3 = la root de Ubuntu  (esta partición contiene el directorio de arranque para Ubuntu).

          /dev/sda4 = la swap

          Pasito a Pasito:

          • Empezamos por instalar Fedora primero, usando LVM y /dev/sda1 como la carpeta de arranque /boot.
          • Luego, desde el live CD de Fedora, instalamos el GRUB en /dev/sda1 (Fedora /boot)
            Codigo:

            su

            root@fedora# grub

            grub > root (hd0,0)
            grub > setup (hd0,0)
            grub > quit

              • Ahora arrancamos e instalamos Ubuntu en /dev/sda3
              • De nuevo, desde el live CD de Ubuntu, instalamos el grub en /dev/sda3

              Nota: Este paso no se necesita en este momento, pero indica al SO de Ubuntu para poder ser cargado con cadenas de arranque si instaláramos un tercer SO más tarde.

              • Después de instalar el arranque para Ubuntu, editamos /boot/grub/menu.lst para cargar con cadenas Fedora.
                Código:

                title Fedora 8
                root (hd0,0) <– Atención: Partición /boot de Fedora
                chainloader +1
                boot

                • Arrancar Fedora y modificar /boot/grub/menu.lst, para cambiar el time out a 1.
                • Finalmente, instala todos los SO que quieras, siempre instalando el grub en la particion root “/” o (/boot) de cada SO.

                Espero que esto ayude a hacer el multi-arranque un “poco” más fácil.

                Traducido de “How to Multi-boot (Maintain more then 2 OS)

                ~ por EddieDean en Marzo 15, 2008.

                3 comentarios to “Multiarranque en Linux”

                1. [...] Multiarranque en Linux (Howto traducido)eddiedean.wordpress.com/2008/03/15/multiarranque-en-linux/ por animaleJo hace pocos segundos [...]

                2. Gracias por el curro!!

                  Muy buena la info i los ejemplos.

                3. gracias pau, aunque fue traducido de una web, pero gracias igualmente ^^

                Escribe un comentario