Inicializando um arquivo de imagem EXT4 a partir do GRUB2

0

Meu amigo precisava de um disco rígido rápido, então eu dei a ela meu pequeno SDD de 64GB. Este SSD tinha meu Linux instalado nele. Eu usei dd para fazer uma imagem da partição (boot, root e home em uma partição).

Esta partição está agora em uma unidade tradicional formatada em 500GB EXT4.

Existe alguma maneira de obter o GRUB para inicializar usando esse arquivo .img? Eu não estou recebendo meu SSD de volta e não posso ser incomodado para passar pelo incômodo de configurar a minha instalação do Linux a partir do zero. Eu me deparei com suporte de loopback no GRUB para imagens ISO. Isso também suporta o EXT4? Eu não consigo encontrar nada específico e não quero estragar nada.

Felicidades.

    
por sjjg 13.04.2012 / 12:41

1 resposta

0

mesmo se o arquivo contiver a tabela de partições grub2 pode, entretanto, inicializar a partir de, onde (hd0,1) é a localização do arquivo e (loop, 1) é a partição dentro do arquivo. no entanto, isso só inicializará o initramfs, o arquivo não 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
}

escreva seu próprio script de montagem, chmod a + x e copie para a pasta local-premount. use o initramfs-tools para criar seu próprio "initrd.img-3.16.0-4-amd64" e copie-o dentro do arquivo de imagem. não há necessidade de código rígido apenas use as vars da entrada do grub $ {ROOT} e $ {loop} dentro do 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: isso só funcionará se o kpartx estiver instalado no initramfs

    
por 03.03.2018 / 21:36

Tags