GRUB en unidad USB: agregar sistemas operativos

9

Algunos antecedentes:

  • Procedente de un fondo en gran parte de Windows (aunque estoy familiarizado con Ubuntu, etc.) y usando una máquina con Windows 7 para completar esta tarea
  • Se ha instalado GRUB correctamente en el MBR de la unidad USB (unidad FAT32 de 8 GB):
  • Haber creado una estructura básica en la unidad: / boot / grub, / boot / img, / boot / kernel

Pregunta:

Tengo algunas preguntas básicas para principiantes, pero a las que he tenido problemas para encontrar respuestas a través de Google / StackExchange, etc.

  • Entiendo que la carpeta / boot / img / [SystemName] almacenará la imagen para un sistema específico, que puede usar varias versiones (o las mismas) de los núcleos de Linux almacenados en el directorio / boot / kernel (al menos, así es como yo me gustaría configurarlo)
  • Sin embargo, la mayoría de estos sistemas solo tienen un núcleo en sus directorios llamado "linux" (sin indicar la versión). Puedo buscar qué kernel usan todos, pero ¿cuál es el mejor lugar para obtener los kernel para copiar / boot / kernel?
  • Después de obtener los núcleos, imagino que el resto es principalmente copiar el dispositivo a / boot / img / y crear la entrada adecuada en menu.lst, ¿correcto? Puedo hacerlo sistema por sistema una vez que pueda hacer referencia a los núcleos.

Objetivo general:

Estoy tratando de crear una unidad flash usb de 8GB que me permita iniciar múltiples sistemas operativos desde un menú de inicio de GRUB. Para agregar o restar sistemas operativos, solo me gustaría tener que copiar los archivos apropiados a / boot / img / [SystemName] y una carpeta / boot / kernel según corresponda y luego editar el archivo menu.lst. Entonces, este primer paso se trata de encontrar los núcleos que comparten muchos de estos sistemas operativos, ya que espero reducir la duplicación.

SeanKilleen
fuente
¿Y qué quieres tener después de agregar el núcleo? ¿Desea un sistema operativo que pueda arrancar?
phunehehe
@phunehehe, gracias! He actualizado la publicación para incluir mi objetivo general.
SeanKilleen el
Parece que está intentando volcar imágenes de LiveCD para varias distribuciones en una unidad USB y luego poder iniciarlas. ¿Es esto correcto?
Wodin
@Wodin: Básicamente, sí. LiveCD (pero con capacidad de escritura ya que estará en medios grabables), con un gestor de arranque unificado para todas las distribuciones / herramientas que quiera.
SeanKilleen

Respuestas:

4

Lo que está tratando de lograr es extender la tecnología de arranque :) Sin embargo, creo que es posible, aunque no estoy lo suficientemente informado como para dar un recorrido completo.

Primero, como se dijo antes, las distribuciones tienen requisitos muy diferentes. En segundo lugar, lo bueno, por otro lado, también puede encontrar distribuciones que necesitan requisitos mínimos.

Recomendaría usar GRUB4DOS como gestor de arranque. Consulte este enlace sobre cómo usarlo con USB (porque tiene el comando find --set root -, que es importante si tiene un dispositivo móvil como USB).

Luego tienes que decidir cuántas particiones usarás. La "instalación completa" estándar siempre está en una única partición. Entonces, si tiene una memoria USB de 8 GB y toma una partición de 4 GB (que permite una instalación mínima), estaría limitado a 2 "Instalaciones completas" diferentes de distribuciones principales como Debian o Fedora.

Sin embargo, hay algunas distribuciones de Linux pequeñas y especializadas. Por ejemplo, "Puppy Linux" es muy pequeño y tiene un modo especial de "Instalación Frugal". Viene en muchos sabores (por ejemplo, hay MacPup con intentos de implementar una Apple como Desktop, o Fatdog64, que es un Linux de 64 bits).

En este modo de "instalación frugal", solo usa exactamente 1 directorio y puede instalarse en paralelo a un Linux o Windows existente en el disco duro (o USB). Estoy seguro de que hay otras distribuciones que admiten modos similares.

Dado que Puppy Linux es pequeño (<150 MB) y suponiendo que reserve un pequeño archivo guardado para cada instalación (512 MB), puede instalar fácilmente como 10 sistemas operativos diferentes en la memoria USB. Incluso hay Linuxes más pequeños (Slitaz, Tinycore), que puedes usar.

Como ejemplo, adjunto el archivo menu.lst (GRUB4DOS) de mi instalación de PC actual. Las primeras 8 entradas son todas diferentes instalación de Puppy Linux en hd0,2 (es decir, la tercera partición en el primer disco duro), luego hay un mínimo Instalación de Debian en una pequeña partición adicional y también el Windows-XP original.

timeout=10
default=0  

  title Linux Buero (on /dev/sda3)
  root (hd0,2)
  kernel /puppy431-de/vmlinuz psubdir=puppy431-de pkeys=de ro vga=normal
  initrd /puppy431-de/initrd.gz

  title Live CD build (on /dev/sda3)
  root (hd0,2)
  kernel /puppylivecdbuild/vmlinuz psubdir=puppylivecdbuild ro vga=normal
  initrd /puppylivecdbuild/initrd.gz

  title sage developement(on /dev/sda3)
  root (hd0,2)
  kernel /Sage46dev/vmlinuz psubdir=Sage46dev pfix=nocopy ro vga=normal
  initrd /Sage46dev/initrd.gz

  title sage developement test and fun
  root (hd0,2)
  kernel /Sage-test/vmlinuz psubdir=Sage-test pfix=nocopy,noram ro vga=normal
  initrd /Sage-test/initrd.gz

  title Lupq 511
  find --set-root --ignore-floppies /lupq511/initrd.gz
  kernel /lupq511/vmlinuz psubdir="lupq511" pfix=nocopy pkeys=de ro vga=normal
  initrd /lupq511/initrd.gz 

  title Lupu 520 - New kid on the block
  find --set-root --ignore-floppies /lupu-520/initrd.gz
  kernel /lupu-520/vmlinuz psubdir="lupu-520" pfix=nocopy pkeys=de ro vga=normal
  initrd /lupu-520/initrd.gz 

  title wary beta (on /dev/sda3)
  root (hd0,2)
  kernel /wary/vmlinuz psubdir=wary ro vga=normal
  initrd /wary/initrd.gz

  title spup (on /dev/sda3)
  root (hd0,2)
  kernel /spup/vmlinuz psubdir=spup ro vga=normal
  initrd /spup/initrd.gz

  title Debian (on /dev/sda2)
  find --set-root --ignore-floppies /initrd.img
  kernel /vmlinuz root=/dev/sda2 ro
  initrd /initrd.img

  title Windows NT/2K/XP\nStart Windows if installed on HDD
  fallback 7
  find --set-root --ignore-floppies /ntldr
  chainloader /ntldr

boot

El menu.lst en su USB podría ser similar, el comando GRUB4DOS find --set-root --ignore-floppies /lupq511/initrd.gz (busca este archivo en todas las unidades) podría ser muy útil si usa USB, por lo que no tiene que usar entradas fijas para su unidad.

Con la información anterior, algunos comentarios sobre sus preguntas originales:

P: * Entiendo que la carpeta / boot / img / [SystemName] almacenará la imagen para un sistema específico, que puede usar varias (o las mismas) versiones de los núcleos de Linux almacenados en el directorio / boot / kernel (al menos, así es como me gustaría configurarlo)

R: No estoy seguro de si eso funcionará, ya que la mayoría de las distribuciones principales esperan tener el derecho exclusivo de su partición e instalar una estructura de directorio específica para sus archivos. En mi opinión, es mejor respetar la configuración predeterminada y proporcionar lo que la distribución espera, es decir, algunos necesitan una partición exclusiva, algunos estarán contentos con solo un directorio en una partición compartida. No digo que no sea posible instalar múltiples SO a 1 partición de una manera no predeterminada, pero está pidiendo problemas y, en mi opinión, no es práctico para un recién llegado de Linux. Una posible solución que menciono al final de mi publicación (instalaciones "similares a Wubi").

P: * Sin embargo, la mayoría de estos sistemas solo tienen un núcleo en sus directorios llamado "linux" (sin indicar la versión). Puedo buscar qué kernel usan todos, pero ¿cuál es el mejor lugar para copiar los kernel en / boot / kernel?

R: Creo que los núcleos deberían ir exactamente allí donde las distribuciones generalmente los tienen. No es necesario almacenarlos en una carpeta / boot / kernel separada, y tampoco recomendaría intentar compartirlos entre distribuciones. El espacio de almacenamiento es mínimo para un núcleo (como 2-3 MB). Realmente hay muchas versiones y subversiones y, a veces, incluso hay parches específicos aplicados a los núcleos de distribuciones. Complementar en un núcleo diferente / no probado es un experimento innecesario.

P: * Después de obtener los núcleos, imagino que el resto es principalmente copiar el dispositivo a / boot / img / y crear la entrada adecuada en menu.lst, ¿correcto? Puedo hacerlo sistema por sistema una vez que pueda hacer referencia a los núcleos.

R: Como se mencionó anteriormente, es mejor crear particiones separadas para aquellas distribuciones que las necesitan y mezclar las distribuciones no tan codiciosas en sus propias carpetas. Trate el núcleo, initrd y el resto de la distribución como una unidad.

Una última idea Si no desea utilizar diferentes particiones, puede probar algo como las instalaciones "WUBI" para las distribuciones que exigen una instalación completa en su propia partición. Esto significa que crea archivos grandes con sus propios sistemas de archivos ext2 / ext3 en el USB, luego los monta como "unidades" e instala el sistema operativo en él. (Lo llamo WUBI, porque esta es la aplicación más conocida).

Lo siguiente debería ser una entrada de Grub4dos menu.lst para iniciar una "instalación de Wubi".

# Add the ntfs module - just needed for Installation on a Windows Partition
insmod ntfs
# Set root (normally would be sda1, or hd0,1 Change as necessary
set root=(hd0,1)
loopback loop0 /ubuntu/disks/root.disk
set root=(loop0)
linux /boot/vmlinuz root=/dev/sda1 loop=/ubuntu/disks/root.disk ro
initrd /boot/initrd/initrd.img
boot

A partir de aquí .

Verá, hay 2 comandos "set root", el segundo después de "root.disk" que contiene Linux, está montado como loop0.

Espero poder dar algunas ideas, aunque no es un recorrido completo.

Emil WidmannEmil
fuente
Lo siento, obtuve el segundo enlace a la entrada de Grub para Wubi incorrecto (porque es mi primera publicación, mi segundo enlace estaba "protegido contra spam"). El enlace correcto es: blogold.chinaunix.net/u3/113851/showart_2311251.html
Emil WidmannEmil
1

Aquí hay dos guías:

  • Una guía en el foro de Unity Linux
  • Y otro en PClos

Creo que ambos usan particiones separadas para cada núcleo.

Las entradas en " /boot/grub/menu.lst " son así:

title Unity-2010 -- With Persistence
kernel (hd0,0)/isolinux/vmlinuz vga=788 livecd=livecd fromusb
root=Label=Unity-2010 changes_dev=LABEL=Unity-2010 acpi=on fstab=rw,noauto
initrd (hd0,0)/isolinux/initrd.gz

title Unity-2010 -- No Persistence
kernel (hd0,0)/isolinux/vmlinuz vga=788 livecd=livecd fromusb
root=Label=Unity-2010  acpi=on fstab=rw,noauto
initrd (hd0,0)/isolinux/initrd.gz
opuesto
fuente
0

Realmente depende de qué distribuciones estés poniendo allí. Algunos de ellos hacen cosas desagradables en initramfs, por lo que se vuelve difícil. Algunas distribuciones en vivo buscan una etiqueta, otras buscan uuid. No puedes proporcionar eso.

La solución no es fácil, debe construir nuevos discos ram personalizados para sus distribuciones en vivo.

Espero no haberme equivocado: D

almirante0
fuente
0

Seguramente necesitará algún tipo de espacio de usuario para cada uno de estos núcleos. (Programas, configuración, trabajos). Tradicionalmente, usaría al menos una partición para cada sistema operativo separado, y la partición GRUB se montaría como / boot (de modo que, de hecho, no tendría boot como un subdirectorio de este partición; sería el directorio raíz, con grub / como subdirectorio).

SamB
fuente