Wie mounte ich ein `img`, das mit / bin / dd von einer Festplatte erstellt wurde?

19

Früher habe ich ddein 80-GB- Laufwerk gesichert

dd if=/dev/sdb of=~/sdb.img

Jetzt muss ich auf einige Dateien auf diesem Laufwerk zugreifen, aber ich möchte die ".img" nicht wieder über das Laufwerk kopieren.

mount ~/sdb.img /mnt/sdbfunktioniert auch nicht. Es gibt zurück:

mount: you must specify the filesystem type

Ich habe versucht, den Dateisystemtyp mit zu finden file -s

fox@shoebox $ file -s sdb.img
sdb.img: x86 boot sector; partition 1: ID=0x12, starthead 1, startsector 63, 10233342 sectors; partition 2: ID=0xc, active, starthead 0, startsector 10233405, 72517410 sectors; partition 3: ID=0xc, starthead 0, startsector 82750815, 73545570 sectors, code offset 0xc0

Kann sdb.imgich dddas Laufwerk einbinden oder muss ich es zum Wiederherstellen verwenden?

Fuchs
quelle

Antworten:

27

Wenn Sie ddauf /dev/sdbstatt /dev/sdb1oder /dev/sdb2kopieren Sie alle die Partitionen aus dem genannten Laufwerk in eine Datei.

Sie müssen jede Partition separat mounten.


Um eine Partition aus einer Datei einzuhängen , müssen Sie zunächst herausfinden, wo sich in der Datei diese Partition befindet.

Unter Verwendung Ihrer Ausgabe von file -s sdb.imgfinden wir startsectorsfür jede Partition:

sdb.img: x86-Bootsektor; Partition 1 : ID = 0x12, Startkopf 1, Startsektor 63 , 10233342 Sektoren; Partition 2 : ID = 0xc, aktiv, Startkopf 0, Startsektor 10233405 , 72517410 Sektoren; Partition 3 : ID = 0xc, Startkopf 0, Startsektor 82750815 , 73545570 Sektoren, Code-Offset 0xc0

Partition      Startsector
1 63
2 10233405
3 82750815

Führen Sie zum Mounten einer einzelnen Partition, in der X sich der Startsektor dieser Partition befindet, Folgendes aus:

mount ~/sdb.img /mnt/sdb -o offset=$((X*512))

Um die zweite Partition zu mounten , müssen Sie Folgendes ausführen:

mount ~/sdb.img /mnt/sdb2 -o offset=$((10233405*512))

Nebenbemerkung: Stellen Sie sicher, dass dies /mnt/sdb2vorhanden ist, bevor Sie dies ausführen.

Habe Spaß!


Update: In der Antwort habe ich angenommen, dass die Sektorgröße für Ihr Bild war 512, bitte sehen Sie diese Frage, wie man das berechnet.

Stefan
quelle
Sie können die Startsektoren auch in tabellarischer Form abrufen, indem Sie file -l sdb.imgdie Antwort auf Ihre Frage verwenden: unix.stackexchange.com/questions/2668/…
student
@student: Nur eine Korrektur für zukünftige Leser: Das wäre fdisk -lnicht file -l.
Runium
Weitere Erläuterungen - Sie können die Anzahl der 512-Byte-Sektoren ermitteln, indem Sie diesem Befehl die Option -u hinzufügen fdisk -u -l sdb.img
Aaron Mason,
Wenn Ihre Version von file von standardmäßig weniger gesprächig ist, fügen Sie den -kSchalter hinzu, um die in der Antwort angezeigte Ausgabeart zu erhalten file -k FILENAME.img.
Christian Pietsch
7

Unter Linux erzeugen Mount-Befehle innerhalb der akzeptierten Antwort implizit ein Loop-Gerät. Angenommen, das vollständige Festplatten-Image verfügt über eine korrekte Partitionstabelle (die Ihr Kernel verstehen kann), möchten Sie möglicherweise losetup(8)direkt verwenden, um die mühsame Berechnung von Offsets zu vermeiden. Außerdem sind keine zusätzlichen Tools erforderlich, wie kpartxin einer anderen Antwort vorgeschlagen . Es wird im Grunde das Gleiche tun wie das Folgende:

losetup -Prf sdb.imgVerknüpft das erste freie Loop-Gerät ( -f) als readonly ( -r) mit der Image-Datei sdb.img. Die -POption zwingt den Kernel, die Partitionstabelle dieses Loop-Geräts zu durchsuchen und Loop-Geräte für jede Partition zu erstellen.

So können Sie etwas bekommen wie:

$ lsblk
NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0       7:0    0 167.7G  1 loop
├─loop0p1 259:0    0   500M  1 loop
└─loop0p2 259:1    0 167.2G  1 loop
...

Sie können jetzt jede Partition an einem gewünschten Einhängepunkt einhängen, natürlich nur lesbar.

$ mount -r /dev/loop0p1 /tmp/backup_sdb1

Alles nur lesbar zu machen, ist optional, kann aber für ein Backup-Image eine gute Sache sein.

update: -Poption wurde 2012 mit util-linux-2.21 hinzugefügt . Daher war es zum Zeitpunkt der Annahme der Antwort nicht verfügbar. Beachten Sie auch, dass dies und die anderen Antworten für Linux spezifisch sind. OpenBSD und NetBSD haben vnode-Festplatten, die von verwaltet werdenvnconfig(8) FreeBSD und Memory-Festplatten, die von FreeBSD verwaltet werden mdconfig(8).

escrl
quelle
2

Alternativ können Sie ein nettes Tool namens verwenden kpartx. Von der Manpage:

kpartx - Erstellen Sie Gerätezuordnungen aus Partitionstabellen

Dies bedeutet, dass Sie ein "Pseudo-Gerät" mit Gerätepartitionen direkt aus der img-Datei erstellen können:

$ kpartx -av sdb.img
add map loop0p1 (254:2): 0 2048 linear /dev/loop0 0
add map loop0p2 (254:3): 0 31162 linear /dev/loop0 2048
$ lsblk
.
.
.
loop0                     7:0    0  16.2M  0 loop
├─loop0p1               254:2    0     1M  0 part
└─loop0p2               254:3    0  15.2M  0 part

Dann können Sie /dev/mapper/loop0p2zum Beispiel mounten , wenn Sie die zweite Partition auf dem Image haben wollen.

Omer Dagan
quelle