Arrancar un archivo de imagen EXT4 desde GRUB2

Arrancar un archivo de imagen EXT4 desde GRUB2

Mi amiga necesitaba un disco duro rápido, así que le regalé mi pequeño SDD de 64 GB. Este SSD tenía mi instalación de Linux. Usé dd para hacer una imagen de la partición (arranque, raíz y inicio en una partición).

Esta partición ahora se encuentra en una unidad formateada EXT4 tradicional de 500 GB.

¿Hay alguna manera de que GRUB arranque simplemente usando este archivo .img que tengo? No voy a recuperar mi SSD y no me molesto en pasar por la molestia de configurar mi instalación de Linux desde cero. He encontrado soporte de bucle invertido en GRUB para imágenes ISO. ¿Esto también es compatible con EXT4? Parece que no puedo encontrar nada específico y no quiero tirar nada a la basura.

Salud.

Respuesta1

incluso si el archivo contiene una tabla de particiones, grub2 puede arrancar desde, donde (hd0,1) es la ubicación del archivo y (bucle,1) es la partición dentro del archivo. sin embargo, esto sólo iniciará initramfs, el archivo no está realmente montado.

/etc/grub.d/40_custom

menuentry "My bootable disk image" {
    set isofile="hdd_ext4.img"
    loopback loop (hd0,1)/${isofile}
    linux (loop,1)/boot/vmlinuz-3.16.0-4-amd64 root=/dev/sda1 loop=/${isofile} ro
    initrd (loop,1)/boot/initrd.img-3.16.0-4-amd64
}

escriba su propio script de montaje, chmod a+x y cópielo en la carpeta local-premount. use initramfs-tools para crear su propio "initrd.img-3.16.0-4-amd64" y cópielo dentro del archivo de imagen. no es necesario codificar, simplemente use las variables de la entrada de grub ${ROOT} y ${loop} dentro del script.

/etc/initramfs-tools/scripts/local-premount

#!/bin/sh

modprobe loop
modprobe ext4

# mount /dev/sda1 (file location)
mkdir /host
mount -n -t ext4 -o rw,data=ordered ${ROOT} /host

# kpartx add partition devmappings for hdd_ext4.img
loop_pt=$(kpartx -av /host${loop} 2>&1 | grep loop | cut -f3 -d" ")

# mount hdd_ext4.img (image file)
mount -n -t ext4 -o loop,rw,data=ordered /dev/mapper/${loop_pt} ${rootmnt}

Nota: esto sólo funcionará si kpartx está instalado en initramfs

información relacionada