Booten einer EXT4-Image-Datei von GRUB2

Booten einer EXT4-Image-Datei von GRUB2

Meine Freundin brauchte eine schnelle Festplatte, also gab ich ihr meine kleine 64 GB-SDD. Auf dieser SSD war meine Linux-Installation installiert. Ich verwendete dd, um ein Image der Partition zu erstellen (Boot, Root und Home auf einer Partition).

Diese Partition befindet sich jetzt auf einem herkömmlichen 500 GB großen EXT4-formatierten Laufwerk.

Gibt es eine Möglichkeit, GRUB dazu zu bringen, einfach mit dieser IMG-Datei zu booten, die ich habe? Ich bekomme meine SSD nicht zurück und habe keine Lust, mir die Mühe zu machen, meine Linux-Installation von Grund auf neu einzurichten. Ich bin in GRUB auf Loopback-Unterstützung für ISO-Images gestoßen. Unterstützt diese auch EXT4? Ich kann anscheinend nichts Spezielles finden und möchte nichts wegwerfen.

Prost.

Antwort1

selbst wenn die Datei eine Partitionstabelle enthält, kann Grub2 inzwischen davon booten, wobei (hd0,1) der Speicherort der Datei ist und (loop,1) die Partition innerhalb der Datei. Dadurch wird jedoch nur das Initramfs gebootet, die Datei wird nicht wirklich gemountet.

/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
}

Schreiben Sie Ihr eigenes Mount-Skript, chmod a+x und kopieren Sie es in den lokalen Premount-Ordner. Verwenden Sie initramfs-tools, um Ihr eigenes „initrd.img-3.16.0-4-amd64“ zu erstellen und kopieren Sie es in die Image-Datei. Sie müssen es nicht fest codieren, verwenden Sie einfach die Variablen aus dem Grub-Eintrag ${ROOT} und ${loop} im Skript.

/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}

Hinweis: Dies funktioniert nur, wenn kpartx in initramfs installiert ist

verwandte Informationen