Ich habe ein Image meiner Raspberry Pi SD-Karte erstellt mit dd
:
sudo dd if=/dev/sdf of=/home/myusername/raspberry-backup-2014-04-10.img
Die SD-Karte enthält zwei Partitionen (eine vfat, eine ext4), die automatisch gemountet werden, wenn ich die Karte einstecke.
Meine Frage: Wie kann ich diese Partitionen aus der IMG-Datei bereitstellen?
Mehr Details:
$ fdisk -l raspberry-backup-2014-04-10.img
Disk raspberry-backup-2014-04-10.img: 3974 MB, 3974103040 bytes
255 heads, 63 sectors/track, 483 cylinders, total 7761920 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000981cb
Device Boot Start End Blocks Id System
raspberry-backup-2014-04-10.img1 8192 122879 57344 c W95 FAT32 (LBA)
raspberry-backup-2014-04-10.img2 122880 7761919 3819520 83 Linux
wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error
Problem aufsudo fdisk -l /dev/loop0
behauptet: Disk / dev / loop0 keine gültige Partitionstabelle enthält.Antworten:
Um zu vermeiden, dass für jede Partition separate Images erstellt oder ein Hilfsprogramm wie dieses installiert werden muss
kpartx
, können Sie jede Partition einzeln bereitstellen, indem Sieoffset
immount
Befehl einen angeben.Untersuchen Sie zuerst die Partitionen in der Image-Datei und bestimmen Sie den Versatz mithilfe von
fdisk
:Nehmen Sie den
Start
Sektor der gewünschten Partition und multiplizieren Sie diesen Wert mit derUnits
Größe. Also, wenn Sie die zweite Partition wollen, werden Sie bekommen540672 * 512 = 276824064
.Erstellen Sie nun einen Ordner und hängen Sie die Partition ein:
Sobald Sie mit den Partitionsdaten fertig sind, können Sie Folgendes tun:
quelle
Nach einigen zusätzlichen Tests habe ich die Lösung selbst gefunden:
kpartx
Dieser Befehl erstellt
/dev/mapper/loop0p1
und/dev/mapper/loop0p2
. Danach können diese Partitionen direkt gemountet werden:quelle
Wenn Sie den Inhalt einer Partition (Dateisystem) untersuchen oder ändern möchten, hängt diese Befehlszeile das Dateisystem des SD- Karten-Dumps my_sdcard_dump.img in das Verzeichnis mount_dir ein .
quelle
Der Umgang mit einem Image einer ganzen Festplatte mit mehreren Partitionen ist recht schwierig . Linux ist nicht dafür ausgelegt, eine Partitionstabelle aus einer regulären Datei zu lesen, selbst wenn sie an ein Loopback-Gerät angehängt ist. Daher müssen Sie die Offsets der Partitionen sorgfältig identifizieren und sie an den
mount
Befehl übergeben.Am besten erstellen Sie separate Images für jede Partition:
Jetzt können Sie diese Dateien einfach so behandeln, als wären sie einzelne Partitionen auf einer Festplatte, und sie wie eine echte Festplattenpartition mounten, indem Sie sie einem Loop-Gerät zuordnen . Ein Loop-Gerät oder Loopback-Gerät ist ein virtuelles Gerät, das eine Übersetzungsschicht für Linux bereitstellt, um eine Datei als Blockgerät (wie eine Festplatte oder Partition) zu behandeln.
Die Loop-Geräte sind in der Regel
/dev/loop0
durch/dev/loop8
. Identifizieren Sie ein nicht verwendetes Loop-Gerät mit dem folgendenlosetup
Befehl:Diese Antwort zeigt ein nicht zugewiesenes Loop-Gerät an. Jetzt können wir das Loop-Gerät einer unserer Image-Dateien zuordnen:
Das Fehlen der Ausgabe dieses Befehls zeigt den Erfolg an. Jetzt
/dev/loop0
ist es für die meisten Zwecke funktional äquivalent zu/dev/sdf1
Ihrer SD-Karte und Sie können es wie gewohnt einbinden:Wiederholen Sie den Vorgang mit einem anderen Loop-Gerät, um die andere Partition einzuhängen. Wenn Sie fertig sind, heben Sie die Bereitstellung der Dateisysteme auf und heben Sie die Zuweisung der Loop-Geräte auf:
quelle