Booten einer EXT4-Image-Datei von GRUB2

Mein Freund brauchte eine schnelle Festplatte, also gab ich ihr meine kleine 64GB SDD. Diese SSD hatte meine Linux-Installation darauf. Ich habe dd verwendet, 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 EXT4-formatierten Laufwerk.

Gibt es eine Möglichkeit, GRUB dazu zu bringen, einfach damit zu booten?img-Datei habe ich? Ich bekomme meine SSD nicht zurück und kann mich nicht darum kümmern, meine Linux-Installation von einzurichten Kratzer. Ich bin auf Loopback-Unterstützung in GRUB für ISO-Images gestoßen. Unterstützt dies auch EXT4? Ich scheine nichts Bestimmtes finden zu können und möchte nichts verschwenden.

Cheers.

Author: sjjg, 2012-04-13

1 answers

Selbst wenn die Datei eine Partitionstabelle enthält, kann grub2 inzwischen booten, wobei (hd0, 1) der Speicherort der Datei und (loop,1) die Partition innerhalb der Datei ist. dies wird jedoch nur das initramfs booten, die Datei ist 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 Ordner local-premount. verwenden Sie initramfs-tools, um Ihre eigene "initrd.img-3.16.0-4-amd64", und kopieren Sie es in die Bild-Datei. keine Notwendigkeit, harten Code nur die vars verwenden von grub Eintrag ${ROOT} und ${loop} innerhalb des Skripts.

/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

 1
Author: alecxs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-03-03 20:36:55