Montieren Sie eine einzelne Partition vom Image der gesamten Festplatte (Gerät)

96

Ich habe mit

ein Image meiner gesamten Festplatte erstellt
dd if=/dev/sda of=/media/external_media/sda.img

Nun möchte ich ein ext4-Dateisystem mounten, das sich auf dieser Platte befindet, aber

mount -t ext4 -o loop /media/external_media/sda.img /media/sda_image

gibt offensichtlich einen Superblockfehler, da das Image die ganze Platte (MBR, andere Partitionen) nicht nur die Partition enthält, die ich brauche. Ich denke, ich sollte einen Weg finden, das Disk-Image im Ordner /dev/ erscheinen zu lassen ...

Weiß jemand, wie man das macht?

PS: Ich kann immer dd das Bild auf den ursprünglichen Datenträger zurück, aber das wäre sehr unpraktisch (Ich aktualisierte das Betriebssystem und ich möchte es so behalten, wie es ist)

    
Nicola Feltrin 19.10.2011, 18:36
quelle

7 Antworten

123

Ruft das Partitionslayout des Bilds ab

$ sudo fdisk -lu sda.img
...
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
...
  Device Boot      Start         End      Blocks   Id  System
sda.img1   *          56     6400000     3199972+   c  W95 FAT32 (LBA)

Berechnen Sie den Offset vom Start des Bildes zum Start der Partition

Sektorgröße * Start = (im Fall) 512 * 56 = 28672

Hängen Sie es an / dev / loop0 mit dem Offset

an
sudo losetup -o 28672 /dev/loop0 sda.img

Jetzt befindet sich die Partition auf / dev / loop0 . Sie können es fsck , mounten es usw.

sudo fsck -fv /dev/loop0
sudo mount /dev/loop0 /mnt

Unmount

sudo umount /mnt
sudo losetup -d /dev/loop0
    
arrange 19.10.2011, 21:55
quelle
87

Update für Ubuntu 16.04: Mit dem neuen losetup ist das jetzt einfacher:

sudo losetup -Pf disk_image.raw

Siehe den Rest der Antwort für ältere Versionen von Ubuntu.

Eine einfache Lösung ist die Verwendung von kpartx : Es ermittelt das Partitionslayout und ordnet sie jedem Blockgerät zu. Danach müssen Sie nur noch den gewünschten montieren.

Öffnen Sie das Terminal, suchen Sie das Disk-Image und geben Sie folgenden Befehl ein:

$ sudo kpartx -av disk_image.raw 
add map loop0p1 (252:2): 0 3082240 linear /dev/loop0 2048
add map loop0p2 (252:3): 0 17887232 linear /dev/loop0 3084288

Dies erstellt loop0p1 und loop0p2 unter /dev/mapper . Von der Ausgabe können Sie die Größen der Partitionen sehen, die Ihnen helfen, sie zu identifizieren. Sie können das gewünschte Gerät mit folgenden Optionen mounten:

$ sudo mount /dev/mapper/loop0p2 /mnt

Alternativ wird das Blockgerät von Nautilus erkannt und Sie können es von der Seitenleiste aus montieren:

Wenn Sie fertig sind, hängen Sie die angehängte Datei ab und entfernen Sie die Gerätezuordnung:

$ sudo umount /mnt
$ sudo kpartx -d disk_image.raw
    
Joni 02.10.2013 14:12
quelle
21

Bearbeiten : Funktioniert mit util-linux & gt; = 2.21 . Zum Zeitpunkt des Schreibens wird Ubuntu nur mit Version 2.20 ausgeliefert

Von man losetup :

       -P, --partscan
          force kernel to scan partition table on newly created loop device

Also mach einfach

$ sudo losetup -f --show -P /path/to/image.img

Erstellen Sie Geräteknoten für jede Partition Ihres Festplatten-Image auf dem ersten unbenutzten Loop-Gerät und drucken Sie es auf stdout. Wenn Sie /dev/loop0 device verwenden, wird mindestens /dev/loop0p1 erstellt, das Sie wie gewohnt mounten können.

    
Ludovic Ronsin 11.07.2014 19:29
quelle
6

Versuchen Sie gnome-disk-image-mounter :

gnome-disk-image-mounter sda.img

Keine sudo erforderlich. Es wird wie bei USB-Laufwerken bei /media/your_user_name/partition_name gemountet.

    
Mihai Capotă 24.07.2015 00:02
quelle
5

losetup -P Automatisierung

losetup -P ist die beste Methode, die in Ubuntu 16.04 beginnt, wie in Pfandrecht erwähnt, hier sind Funktionen, die weiter automatisiert werden können . 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=""
  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"
  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

Das ist eine vernünftige Methode vor dem 16.04.

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 loop Geräte generieren können.

Es ist standardmäßig 0 unter Ubuntu 14.04, weshalb keine automatische Aufteilung stattfindet.

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

options loop max_part=31

zu einer Datei in /etc/modprobe oder:

GRUB_CMDLINE_LINUX="loop.max_part=31"

bis /etc/default/grub und dann sudo update-grub .

Wie man einen Modulparameter einstellt, wird ebenfalls behandelt unter: Wie Kernelmodulparameter hinzugefügt werden ?

Nach einem Neustart, wenn Sie tun:

sudo losetup -f --show my.img

Das Image wird auf einem /dev/loopX -Gerät gemountet und die Partitionen werden automatisch auf /dev/loopXpY devices gemountet.

Das ist also die bequemste Methode, wenn Sie bereit sind, neu zu starten.

Siehe auch

quelle
4

Verwenden Sie losetup, um das gesamte Festplatten-Image anzuhängen.

# sudo losetup /dev/loop2 sda.img

Verwenden Sie dann mdadm, um ein MD-Gerät zu erstellen, und Block-Geräte werden für alle Partitionen erstellt.

# sudo mdadm --build --level=0 --force --raid-devices=1 /dev/md2 /dev/loop2
mdadm: array /dev/md2 built and started.

Jetzt sollten Sie die Partitionsgeräte sehen.

nile-172-b0fef38-76:/mnt/sdb1 # ls -l /dev/md2*
brw-rw---- 1 root disk   9, 2 Oct 10 12:37 /dev/md2
brw-rw---- 1 root disk 259, 0 Oct 10 12:37 /dev/md2p1
    
Mike Bappe 10.10.2014 14:45
quelle
2

Der einfachste Weg ist meiner Meinung nach mount -o loop,offset=... wie erwähnt in dieser Antwort auf StackOverflow . Die Idee ist wie folgt:

fdisk -l $IMAGE
# calculate the offset in bytes
mount -o loop,offset=$OFFSET $IMAGE $MOUNTPOINT

Die Methode ist am besten, da das Loop-Gerät nicht gelöscht werden muss, nachdem Sie die gemountete Partition umgebunden haben.

Um die Aufgabe weiter zu vereinfachen (was oft nötig ist), können Sie mit meinem Skript mountimg alles für Sie tun. Holen Sie es sich einfach von Pfandrecht und verwende so:

mountimg /media/external_media/sda.img 2 /media/sda_image

Sie können auch den Dateisystemtyp und alle anderen zusätzlichen Mount-Optionen angeben, wenn Sie möchten:

mountimg /media/external_media/sda.img 2 /media/sda_image -t vfat -o codepage=866,iocharset=utf-8

Wenn Sie mit der Partition fertig sind, einfach umount it:

umount /media/sda_image
    
Alexander Amelkin 11.11.2016 11:13
quelle

Tags und Links