Hice lo siguiente:
- creó un archivo .img vacío con dd
- lo asoció a / dev / loop0 con losetup
- creó una partición con fdisk
- formateó dicha partición con mke2fs
- Copió un sistema GNU / Linux personalizado en esa partición
Ahora me gustaría hacer que el archivo .img sea de arranque instalando grub en su directorio MBR y / boot. Mi objetivo es cargar el archivo .img con qemu. Sería mejor si se usa grub2 en lugar de grub legacy.
Gracias.
Respuestas:
Esto es con grub-pc versión 1.98 + 20100804-5ubuntu3 (Maverick Meerkat).
El instalador de grub2 puede instalarse en dispositivos de bucle invertido, pero si monta usando el mapeador de dispositivos, se confundirá y creerá que tiene un esquema LVM, fallando misteriosamente con una queja sobre una abstracción faltante.
En su lugar, debe configurar el dispositivo loopback para la partición usted mismo, con un nombre que debe coincidir con el patrón "/ dev / loop [0-9]", es decir, sin ningún designador de partición al final:
(Tenga en cuenta que si desea que grub-mkconfig / update-grub funcione en este volumen, entonces el loopback de la partición debe estar conectado al loopback del disco en / dev, y no directamente al archivo de imagen).
Como usó fdisk para particionar la imagen, tiene una tabla de partición de estilo msdos (también conocida como etiqueta) y arranca usando un BIOS. Además de poner el stage1 / boot.img en el MBR, el stage1.5 / core.img se colocará en un área de incrustación en un espacio no particionado (!) Siguiendo inmediatamente después, y debe haber espacio para esto.
El truco ahora es decirle al instalador grub2 a través de un mapa de dispositivos cómo su configuración de bucle invertido se asignará a las unidades de BIOS en la máquina virtual. (En el legado de grub1 esto se hizo directamente en el shell). Probablemente esté planeando arrancar esta imagen como el primer disco, por lo que supongo que la asignación adecuada sería:
Aquí he puesto el mapa del dispositivo dentro de la imagen del disco invitado, para que pueda generar el archivo de configuración de arranque grub.cfg:
(Tenga en cuenta que el post-instalador del paquete grub-pc ejecutará una sonda que sobrescribe el mapa del dispositivo (!), Por lo que tendrá que escribirlo después de la instalación y ejecutar grub-mkconfig / update-grub usted mismo).
Ahora ejecute el instalador desde el host , señalando la instalación del invitado:
Finalmente, desmonte todo lo configurado aquí antes de iniciar qemu en su imagen:
fuente
chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
falla porque no haygrub-mkconfig
ningún binario para ese asunto en el disco .img, y/mnt
ya está montado. Sería genial si lo tomaras paso a paso y escribieras todos los detalles / comandos.losetup -P
es otra buena manera de montar una sola partición: stackoverflow.com/a/15200862/895245/usr/sbin/grub-probe: warning: the device.map entry 'hd0,1' is invalid. Ignoring it. Please correct or delete your device.map.
Entonces esta respuesta es inútil.Muchas gracias por estas explicaciones. Integre su solución en mis propios scripts con las siguientes modificaciones (traducidas a su notación / variables):
Esto funciona al menos en Debian Squeeze. Verifique '/boot/grub/grub.cfg' para ver si es correcto.
fuente
cat > /mnt/boot/grub/device.map
hacerse en el entorno chrooteado? Si es así, el camino debería ser/boot/grub/device.map
.Suposiciones
Así es como inicié qemu en el menú de GRUB:
Entonces aparece el shell GRUB:
Si hubiera copiado un núcleo y un disco RAM en / dev / loop0p1, podría arrancarlo:
Y aquí está el shell predeterminado de Linux (porque no / sbin / init estaba disponible en este caso)
fuente