Wie kann ich eine Partition aus einem von dd erstellten Image eines Blockgeräts (z. B. Festplatte) unter Linux mounten?


34

Ich habe ein Image der gesamten Festplatte mit dd erstellt . Die Plattenstruktur folgt:

kent@cow:~$ sudo fdisk -l

Disk /dev/sda: 750.1 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000b8508

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           5       90872   729929303+  83  Linux
/dev/sda2           90873       91201     2642692+   5  Extended
/dev/sda5           90873       91201     2642661   82  Linux swap / Solaris

Das Bild wurde erstellt mit:

dd if=/dev/sda of=image750.img

Wie würde ich, wenn es möglich ist, / dev / sda1 vom Image aus mounten, damit ich den Inhalt lesen kann?

Es ist keine Option, die Festplatte erneut zu klonen. Ich weiß, wie das geht, wenn ich nur die einzelne Partition selbst geklont hätte. Ich hoffe es ist mit dem aktuellen Bild noch möglich.



Antworten:


48

Heutzutage gibt es eine bessere Möglichkeit, Offsets oder kpartx nicht mehr zu verwenden:

losetup --partscan --find --show disk.img

mount /dev/loop0p1 /mnt

um loop0 freizugeben, benutze after umount:

losetup -d /dev/loop0

8
Bei meiner Ubuntu 14.04-Installation bietet losetup keine --partscan-Option.
Cutter

1
@Cutter wurde in util-linux 2.21, Ubuntu 16.04 hinzugefügt. :-)
Ciro Santilli

Nachdem ich kpartxzuerst verwendet habe, wie die Partitionen gemountet werden /dev/mapper/loop3p1, möchte ich nur darauf hinweisen, dass losetupdie Geräte wie erstellt werden /dev/loop0p1. In der Antwort steht das, aber ich habe es wahrscheinlich zehnmal durchgelesen. : /
Randy Syring

13

Ich bin heute auf dieses Problem gestoßen und wollte die Antworten aktualisieren, nur um mich daran zu erinnern. Anstatt den Versatz selbst zu berechnen, können Sie ein Tool verwenden, das bereitstellbare Geräte aus einem dd-Image bereitstellt: kpartx

http://robert.penz.name/73/kpartx-a-tool-for-mounting-partitions-within-an-image-file/

http://linux.die.net/man/8/kpartx

Im gegebenen Fall würde es sowas brauchen

sudo kpartx -a image750.img
sudo mount /dev/mapper/loop1p1 /mount/point -o loop,ro

Dabei steht loop1p1 für die erste Partition, loop1p2 für die zweite usw.


6

Sie haben den ersten Teil: fdisk -l, um den Startoffset zu finden. Nehmen Sie diese Zahl, multiplizieren Sie mit 512, und Sie erhalten die Offset-Option zum Einhängen. Also, für sda1 in deinem Fall, 5 * 512 = 2560. Dann führe den mount aus:

mount -o loop,offset=2560 -t auto /path/to/image.dd /mount/point

4

Loopmounting ist nur ein Teil der Antwort.

Weitere Informationen zum Festlegen der Partition finden Sie unter http://wiki.edseek.com/guide:mount_loopback#accessing_specific_partitions_in_the_image . Ich denke, mount -o loop, offset = 32256 /path/to/image750.img / mnt wird für Sie arbeiten. aber du solltest unbedingt das erwähnte Tutorial lesen.


der Offset sieht falsch aus; Dies entspricht einem Partitionsstart von 63 (<i> 63 * 512 = 32256 </ i>). Der Versatz in der Antwort von Baumgart sieht für diese Situation korrekter aus. Der Link ist eine gute Referenz, aber es ist eine bessere Antwort, wenn Sie sich die Zeit genommen haben, die für diesen Vorgang erforderlichen Schritte oder Befehle zusammenzufassen. Vielen Dank!
Quack Quijote

1

losetup -P Automatisierung

Die von https://superuser.com/a/684707/128124 (hinzugefügt in util-linux v2.21, hinzugefügt in Ubuntu 16.04) erwähnte Methode enthält Funktionen zur weiteren Automatisierung. Verwendung:

$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2

$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there

$ sudo losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                                                                      DIO
/dev/loop1         0      0         0  0 /full/path/to/my.img

$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0

Quelle:

los() (
  img="$1"
  dev="$(sudo losetup --show -f -P "$img")"
  echo "$dev"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    echo "$dst"
    sudo mkdir -p "$dst"
    sudo mount "$part" "$dst"
  done
)
losd() (
  dev="/dev/loop$1"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    sudo umount "$dst"
  done
  sudo losetup -d "$dev"
)

Schleifenmodul max_part config

Ordentliche Methode vor util-linux v2.21.

loop ist ein Kernelmodul, das in Ubuntu 14.04 in den Kernel integriert ist.

Wenn Sie es richtig konfigurieren, teilt Linux die Geräte automatisch für Sie auf.

cat /sys/module/loop/parameters/max_part

gibt an, wie viele Partitionen loopGeräte generieren können.

Unter 0Ubuntu 14.04 ist dies standardmäßig der Fall, weshalb keine automatische Aufteilung erfolgt.

Um es zu ändern, können wir entweder hinzufügen:

options loop max_part=31

in eine Datei in /etc/modprobeoder:

GRUB_CMDLINE_LINUX="loop.max_part=31"

zu /etc/default/grubund dann sudo update-grub.

Informationen zum Festlegen eines Modulparameters finden Sie auch unter: https://askubuntu.com/questions/51226/how-to-add-kernel-module-parameters

Wenn Sie nach einem Neustart Folgendes tun:

sudo losetup -f --show my.img

Das Image wird an ein /dev/loopXGerät angehängt und die Partitionen werden automatisch an /dev/loopXpYGeräte angehängt.

Dies ist die bequemste Methode, wenn Sie einen Neustart durchführen möchten.

Siehe auch


0

Wenn Sie ein Dateisystem im Benutzermodus wie fuse haben, dann mögen Sie Gnome in Desktop-Umgebungen und haben ein Tool wie gnome-disk-image-mounter installiert, dann ohne root durch Rechtsklick und öffnen damit.


0

Ich glaube, Loopmounting ist die Antwort -

sudo mkdir /path/to/dir/
mount -o loop example.img /path/to/dir/

Das obige sollte es unter diesem Verzeichnis einhängen.

Dies sollte es aushängen:

umount /path/to/dir
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.