viernes, 23 de julio de 2010

Iniciar una imagen .iso de Ubuntu guardada en el disco duro desde el grub2

Una de las grandes ventajas que trae el Grub2 es poder bootear una imagen .iso sin necesidad de grabarla a un CD/DVD, es decir utilizar una imagen .iso de un LiveCD sin grabarla en un CD . Con ello podemos tener instalado en nuestro disco duro una versión de Ubuntu o de Mint ( las dos distros con las que he probado que este sistema funciona ) e ir probando sucesivas versiones de ellas, sin tener que malgastar cd/dvd, por ejemplo podemos tener instalado en el disco duro la versión Gnome e ir probando la versión Kde, Lxde, etc o tener una versión de Gnome  e ir probando las siguientes versiones en Gnome antes de decidir si actualizar o no a una versión posterior.

Voy a explicar como añadir al Grub2 dos opciones para desde él poder iniciar el pc desde dos imágenes.iso guardadas en nuestro disco duro. Explico como añadir dos opciones, pero se pueden añadir de forma similar todas las líneas de entrada a imágenes.iso que se quieran, con tal de que haya espacio en la partición / para que quepan las imagenes.iso

Para este ejemplo las imágenes.iso que usaré las llamo: livecd.iso  ( que en mi caso es una iso de Mint9 en español ) y ubuntu.iso ( que en mi caso es una iso de Ubuntu 10.04 )

I- Las imágenes livecd.iso y ubuntu.iso deben estar guardadas en el directorio raiz /  (para copiarlas en ese directorio hay que hacerlo desde el administrador de archivos Nautilus ejecutado con permisos de root: alt+f2 y luego gksu nautilus )

II- Deberemos editar el archivo /etc/grub.d/40_custom, con sudo gedit /etc/grub.d/40_custom y agregar unas nuevas entradas al menú, para ello copiamos y pegamos este texto tal cual y sin modificarlo en la linea vacía inmediata al final del texto inicial de forma que quede:   ( los números puestos delante de cada linea no hay que copiarlos, solo los he puesto para ayudar a ver lo que es cada linea, ya que una de ellas aparece en el blog como si fueran dos; solo copiar el texto en verde)

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

1- menuentry “Livecd” {
2- set root=(hd0,7)
3- loopback loop /livecd.iso
4- linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/livecd.iso locale=es
_ES bootkbd=es console-setup/layoutcode=es --
5- initrd (loop)/casper/initrd.lz


6- }


1- menuentry “Ubuntu” {

2- set root=(hd0,7)
3- loopback loop /ubuntu.iso
4- linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/ubuntu.iso locale=es
_ES bootkbd=es console-setup/layoutcode=es --
5- initrd (loop)/casper/initrd.lz


6- }

Teniendo en cuenta que:
1– menuentry “Livecd” { -> pone el título en el menú de grub2 para poder escogerlo como opción de arranque. Esta linea podemos modificarla cambiando “Livecd” por otro nombre que nos parezca mejor.

Editado, tras un comentario: He estado probando, y a mi, me funciona con la línea:
menuentry “Ubuntu” {
(usando la combinación de teclas mayúscula+2 para que se escriban las comillas)
Pero también he visto que con los corchetes en vez de las comillas:
menuentry [Ubuntu] {
también me funciona.
2– la línea set root: nos indica en que partición esta el archivo.iso; esta linea es la única que tenemos que modificar según donde tengamos el directorio raiz, es decir en que partición tenemos instalado el sistema.

Ten en cuenta que (hd0,7) significa disco primero (sda) y partición 7 (sda7); antiguamente la partición 7 se indicaba restando 1, es decir, (hd0,6). Mucho cuidado con no equivocarte pues no encontraría la partición correcta.

3– la linea loopback loop: nos indica la ruta dentro de la partición donde esta el archivo.iso ( directorio raiz / ): livecd.iso y ubuntu.iso son  los nombres de las imágenes iso que he empleado para este ejemplo.

4– La línea linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/ubuntu.iso locale=es_ES bootkbd=es console-setup/layoutcode=es – debe ir en una sola linea en el archivo /etc/grub.d/40_custom aunque aquí parezca que son dos líneas) es para indicarle que arranque el kernel y que es una imagen iso que debe montar y usar como sistema raiz, y que la monte con todo ( los menús, los programas, y la distribución del teclado ) en español.

Cuidado: si en vez de
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/ubuntu.iso locale=es_ES bootkbd=es console-setup/layoutcode=es --
ponemos
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/ubuntu.iso --
el resultado será que en vez de en español el sistema aparecerá en ingles.
5– la línea initrd(loop): nos indica donde esta el initrd

III- Guardamos los cambios realizados en el archivo /etc/grub.d/40_custom

IV- Actualizamos el grub2 con el comando: sudo update-grub2

V- Reiniciamos el pc y veremos que en el menú Grub2 aparecen dos nuevas opciones ( Livecd y Ubuntu ) de forma que al elegir una de ellas arrancamos, en mi caso un Mint9 en español o un Ubuntu 10.04 también en español.

Una vez hechos estos cambios: En mi caso la imagen livecd.iso hace referencia a un archivo .iso de mint9, pero si quieres que arranque otra imagen.iso no hace falta que modifiques el archivo /etc/grub.d/40_custom, basta con que renombres la imagen .iso que quieres arrancar poniéndole el nombre livecd.iso ( o ubuntu.iso ), y que la copies al directorio raiz /

------------------------------

Este sistema tiene sus limitaciones: he probado este método, desde Mint9, con varias imágenes .iso de varias distros, pero de las que he probado solo funciona para las isos de Ubuntu y de su derivada Mint, para otras derivadas, como por ejemplo para Guadalinex, no funciona;  y tampoco para otras distros de linux como PcOnLinux.

No sé si desde un Guadalinex v7 instalado en el disco duro se puede hacer lo mismo de forma que se pueda iniciar una imagen.iso de Ubuntu o de Mint; si algún usuario de Guadalinex v7 prueba este método me gustaría que me indicara tanto si le funciona como si no, y también seria bueno que lo comunicara al servicio técnico de Guadalinex.

( Editado [15-Abril-2011 ]: Con el método que se indica, con Unetbootin, en  Probando una distro desde el menú del Grub2 con Unetbootin  ya he conseguido poder ejecutar la .iso de Guadalinex v7  que tengo en /  , sin necesidad de grabarla en un dvd.  Pero curiosamente en vez de en español me salen en inglés.

Unetbootin nos permite crear ISOs que puedan ejecutarse directo desde el disco duro. ¿Qué hay que hacer? Simplemente abre el programa, busca la imagen .iso que descargaste y selecciona Type > Hard Disk y haz clic en OK.
Reinicia la máquina y cuando aparece el menú del Grub2, selecciona la entrada “Unetbootin”.
Lamentablemente, cada vez que actualices la .iso (porque descargaste una versión nueva) vas a tener que ejecutar de nuevo Unetbootin para actualizar la entrada en el menú del Grub2. )
--------------------------------

Una vez configurado dicho archivo /etc/grub.d/40_custom de esta forma, y actualizado el grub2 con sudo update-grub2, una sola vez, para que se inicie cualquier livecd en vez de ir modificando dicho archivo con el nombre de la .iso, lo que hago es copiar la .iso en el directorio raiz /  y cambiarle el nombre: por ejemplo linuxmint-9-gnome-cd-i386.iso lo renombro a livecd.iso.

Por lo que dado que con esto lo único que habría que cambiar en /etc/grub.d/40_custom seria la partición en la que esta el directorio raiz /  ( en mi caso hd0,7 )  y copiar en / la imagen.iso que quisiéramos iniciar, pero cambiándole el nombre a livecd.iso ¿ no se podría hacer esto con un simple ( o complicado, no lo sé... )  script ?

Un script que nos hiciera dos simples preguntas:
--- ¿ en que partición se tiene instalado el sistema ( la partición / ) ?
al contestar a esto, el script escribiría la contestación adecuada en el archivo /etc/grub.d/40_custom
y luego el script actualizaría el grub2 con sudo update-grub2
--- ¿ dirección donde tenemos la imagen.iso que queremos iniciar con el grub2 ?
al contestar a esto nos la copiaría, desde esa dirección al directorio raiz / , cambiándole el nombre por livecd.iso

¿ Alguien sabe como hacer un script semejante ?
-------------------------------

16 comentarios:

  1. Una forma alternativa de iniciar desde otra .iso (por ejemplo kubuntu.iso) que tengas en el directorio raiz / es:

    Cuando inicias el sistema, en el grub2 te paras sobre la línea LiveCD y tecleas “e” para editar la linea de grub2 y modificas el nombre de livecd.iso al que necesites en ese momento…

    Es decir, te sitúas en la línea LiveCD, tecleas "e" y cambias esto:
    loopback loop /livecd.iso
    linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/livecd.iso locale=es_ES bootkbd=es console-setup/layoutcode=es –

    por esto:

    loopback loop /kubuntu.iso
    linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/kubuntu.iso locale=es_ES bootkbd=es console-setup/layoutcode=es –

    Luego de hecho este cambio tecleas ctrl+x y se iniciara el sistema con la kubuntu.iso
    Pero el cambio en estas lineas es solo temporal: la próxima vez que inicies el pc y vuelvas a seleccionar la entrad LiveCd, si no haces nada mas se iniciara el sistema con la livecd.iso ( en estos ejemplos la de Ubuntu )

    Con este método solo necesitas tener una entrada a una .iso en el grub2 desde la que podrás iniciar cualquier .iso de ubuntu o derivadas compatibles ( ubuntu, xubuntu, kubuntu, mint-gnome, mint-kde, etc ), pero tienes que saber cual es el nombre de la .iso ( que no debe tener espacios en blando en su nombre ) que tienes en el directorio raiz /

    Con este método se pueden tener todas las imágenes.iso que se quieran, con tal de que haya espacio en la partición / , sin tener que ir añadiendo nuevas entradas al menú del grub2 editando el archivo /etc/grub.d/40_custom .

    ResponderEliminar
  2. hola:
    soy nuevo en esto.
    quiero copiar la iso de la carpeta descargas a /, y me dice que no tengo permiso.
    ¿como lo puedo hacer?
    gracias.

    ResponderEliminar
  3. Marino:
    Para copiar o mover un archivo y/o directorio fuera de la carpeta /home/usuario se necesitan permisos de root. Inicia un administrador de archivos nautilus con permisos de root: teclea alt+f2 y escribes: gksu nautilus
    Te pedirá la contraseña que pusiste al instalar el sistema y se abrirá un nautilus con permisos de root, desde el que ya podrás hacer lo que quieres. Ten mucho cuidado, ya que desde ese nautilus de puede borrar cualquier archivo y/o directorio y estropear irremediablemente el sistema. En cuanto hayas hecho lo que quieres, vuelve a cerrar el nautilus con permisos de root.

    Cuidado con lo que haces, y suerte.
    Gracias por leer este blog

    ResponderEliminar
  4. "No sé si desde un Guadalinex v7 instalado en el disco duro se puede hacer lo mismo de forma que se pueda iniciar una imagen.iso de Ubuntu o de Mint; si algún usuario de Guadalinex v7 prueba este método me gustaría que me indicara tanto si le funciona como si no..."


    Hola. He probado Linuxmint 11 desde Guadalinex v7 y funciona. Hay algunas cosas que están en inglés y otras en español.
    La pena es que no he podido conectarme a la red. Utilizo un módem usb de Vodafone y he instalado los mismos paquetes que tenía para G.V7. Obviamente algunos -la mayoría- no servían, pero los que sí indican los paquetes que se necesitan descargar para instalarse y ahí aprovecho y copio las direcciones. Tras volver a Guadalinex a descargarlos y regresar a Linuxmint e instalarlos me encuentro que el botón de conectar no va. Lo pulso una y otra vez pero nada.
    Espero que te sirva.

    Gracias y un saludo.

    ResponderEliminar
  5. Hola. Lo he intentado con Linuxmint 10 de 32 bits -la 11 es de 64 bits- y también funciona. Con el idioma pasa igual que en la 11, español e inglés. El problema está en que no accede al equipo ni instala unidades externas. La idea de probarla era para saber si me podría conectar a la red con el módem usb, pero al no poder acceder a las otras particiones ni al disco duro externo donde tengo los paquetes de vodafone-mobile-connect pues me quedo otra vez con las ganas.

    Gracias y un saludo.

    ResponderEliminar
  6. Hola. En el escritorio aparece "Instalar" como en un Live Cd, sin embargo no consigo instalarlo. ¿No se puede?. Con Gparted he redimensionado otra partición y creado una nueva pero a la hora de instalarlo hay algo que falla. Hablo de LinuxMint 11.

    Gracias y un saludo.

    ResponderEliminar
  7. Yo uso Mint9 ( ya que es por ahora la última versión lts ), pero tengo una .iso de Mint11 en / , y una línea en el grub2 que hace referencia a ella. Para probar, he iniciado el sistema desde esa línea; he llegado al escritorio de Mint11, he hecho click en el icono de Instalar en el disco duro, y si que se me ha abierto el programa de instalación. Como sigo queriendo usar Mint9, me he salido del programa de instalación.


    -- Cuando llegues al escritorio de Mint11, abre Synaptic y te aseguras de que tienes el paquete Ubiquity ( y sus dependencias ) instalado; instalado si no lo tienes. Comprueba también que tienes activada la conexión a internet antes de intentar instalar el sistema
    -- Lógicamente no puedes instalar Mint11 en la misma partición donde tienes guardada la imagen .iso de Mint11, pues para instalar una de las cosas que tienes que hacer es formatear la partición, y se formatea esa...desaparece el archivo .iso de Mint 11 con el que quieres hacer la instalación
    -- Prueba a bajar otra imagen .iso de Mint11 a ver si la que tienes esta mal de alguna forma.

    ResponderEliminar
  8. Hola. Estos son los paquetes de Ubiquity que hay instalados:
    ubiquity 2.6.10-1mint2
    ubiquity-casper 1.265
    ubiquity-frontend-gtk 2.6.10-1mint2
    ubiquity-ubuntu-artwork 2.6.10-1mint2
    Estos otros vienen pero no están instalados:
    ubiquity-frontend-debconf
    ubiquity-frontend-kde
    ubiquity-slideshow-kubuntu
    ubiquity-slideshow-ubuntu
    Clico en instalar y sigo los pasos hasta llegar a Asignar espacio en disco. Elijo la Partición, Tamaño, Formatear, Punto de montaje /, OK, Instalar ahora. Entonces se abre una pequeña ventana que dice: Error al desmontar las particiones. El instalador necesita guardar los cambios en las tablas de particiones, pero no puede hacerlo porque no se pueden desmontar las particiones en los siguientes puntos de montaje: /isodevice
    Aquí si opto por continuar aparecen los cuadros donde se elije el tipo de teclado, nombre, contraseña, etc. Y parece que todo va bien porque te va informando de las características del sistema que estás instalando. Sin embargo, debajo pone > Detectando sistemas de ficheros y una barra de color azul que está muy próxima de llegar al final pero que no avanza. Si clicas en la flecha que hay delante ↓ se puede leer la hora más los pasos que ha dado el sistema -creo- y la última línea pone la hora más mint ubiquity [números]: Step_before=stepUserInfo
    Pasan los minutos y sigue igual.
    Si opto por retroceder para desmontar las particiones, cuando elijo en la que voy a instalar el S.O. no me permite acceder a ella para elegir punto de montaje, formatear... y, claro está, si clico en instalar me avisa de que no hay una partición raíz.
    Espero haberme explicado lo suficientemente bien. Da la impresión de que no es posible instalar de esta manera.
    Gracias y un saludo.

    ResponderEliminar
  9. Hola. No me puedo permitir descargar otra iso y como comenté (29-08-11 12:28) también tengo una iso de Linuxmint 10 de 32 bits y he probado a instalarla y pasa lo mismo.
    En un nuevo intento con Linuxmint 11 he comprobado que el sistema marca la hora actual, pero cuando te dice que no se pueden desmontar las particiones en /isodevice y clico en continuar la hora que marca el panel se adelanta 2 horas.
    En el comentario anterior dije que la última línea que aparecía debajo de Detectando sistemas de ficheros era fecha y hora más mint ubiquity [números]: Step_before=stepUserInfo. En esta ocasión ha aparecido después otra línea: fecha y hora (real) más mint CRON [números]: (root) CMD ( cd / && run-parts --report /etc/cron.ho urly)

    Gracias y un saludo.

    ResponderEliminar
  10. Hola. Halteras, lo primero felicitarte por el blog y tus participaciones en el foro de Guadalinex.
    Yo lo he intentado desde Guadalinex V8 y no me ha funcionado, me salen las entradas en el menú de arranque pero no arranca, he copiado las isos de Mint13 y ubuntu 12.04 en ./ tal cual, no se si debía haberlas metido en una carpeta de ./

    ResponderEliminar
  11. Alejandro:
    Si te sirve de consuelo, desde mi sistema Mint tampoco me funciona esta forma de poder acceder a Guadalinex, si a otras distros derivadas de Ubuntu.
    Pero si que he podido probar Guadalinex ( hasta la v7 - con la v8 no lo he probado ),sin tener que grabar la .iso en uin cd/dvd y accediendo a ella desde la pantalla del grub2, con Unetbootin. Busca en el índice del blog un tema sobre este programa.
    Suerte

    ResponderEliminar
  12. Posible error:
    Si al arrancar os aparece el siguiente error:
    you need to load the kernelk first
    Es por que "no encuentra el archivo para el arranque del kernel" y esto es debido a que el directorio /casper y los archivos vmlinuz y initrd.lz solo se utilizan en Debian y derivadas (Ubuntu, Linux Mint, Guadalinex, ...), por lo que en otras distribuciones se debería de cambiar las líneas pertinentes con la ruta/archivo adecuada, para que encuentre el archivo.

    ResponderEliminar
  13. Hay un error en el código, el menuentry se pone entre apóstrofes, no entre comillas, de lo contrario la entrada no se muestra en el GRUB al ejecutarse. Arreglalo para que nadie más se confunda. Gracias por el tuto.

    ResponderEliminar
  14. Shadow Reaper:
    He estado probando, y a mi, como siempre, me funciona con la línea:
    menuentry “Ubuntu” {
    (usando la combinación de teclas mayúscula+2 para que se escriban las comillas)
    Pero también he visto que con los corchetes en vez de las comillas:
    menuentry [Ubuntu] {
    también me funciona.
    No se porque no te funciona a ti con las comillas (mayúscula+2), quizás sea que usas otro tipo de comillas (mayúscula+ la tecla que hay entre la ñ y ç)

    ResponderEliminar
  15. hola hatteras, 4 añitos después, aquí estoy.
    Es posible dar persistencia así que cuando se arranca en live puede tener todas mi cosas como mi claves, teclado, etc?

    ResponderEliminar
  16. Deje ayer un mensaje, y al final encontré una manera. Es bastante crear una partición ext4 y dar a ella come nombre casper-rw, luego añadir persistent antes de
    --initrd (loop)/casper/initrd.lz
    }
    Sin dar una dirección de esa partición. Ahora seria interesante descubrir como poderlo hacer, así podría tener mas que un archivo iso persistente.
    Saludos

    ResponderEliminar

A la vez que haces un comentario, por favor da una puntuación al tema: malo, normal, bueno o muy bueno.
Gracias.