Ich habe ein Image meiner gesamten Festplatte erstellt mit
dd if=/dev/sda of=/media/external_media/sda.img
Das Problem ist nun, dass ich ein ext4-Dateisystem mounten möchte, das sich auf dieser Festplatte befand, aber
mount -t ext4 -o loop /media/external_media/sda.img /media/sda_image
führt offensichtlich zu einem Superblock-Fehler, da das Image die gesamte Festplatte (MBR, andere Partitionen) enthält und nicht nur die Partition, die ich brauche. Ich schätze also, ich sollte einen Weg finden, das Festplatten-Image im Ordner anzuzeigen /dev/
...
Weiß jemand, wie das geht?
PS: Ich kann dd
das Image jederzeit auf der Originalfestplatte sichern, aber das wäre sehr umständlich (ich habe das Betriebssystem aktualisiert und möchte es so lassen, wie es ist).
Antwort1
Holen Sie sich das Partitionslayout des Images
$ 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 Images zum Partitionsstart
Sektorgröße*Start= (im Fall) 512 * 56 =28672
Mounten Sie es auf /dev/loop0 unter Verwendung des Offsets
sudo losetup -o 28672 /dev/loop0 sda.img
Jetzt befindet sich die Partition auf/Entwickler/Loop0. Du kannstfsckes, montieren Sie es usw.
sudo fsck -fv /dev/loop0
sudo mount /dev/loop0 /mnt
Aushängen
sudo umount /mnt
sudo losetup -d /dev/loop0
Antwort2
Update für Ubuntu 16.04:Mit der Neuen losetup
ist das nun einfacher:
sudo losetup -Pf disk_image.raw
Den Rest der Antwort finden Sie für ältere Versionen von Ubuntu.
Eine einfache Lösung ist die VerwendungAbonnieren: Es ermittelt das Partitionslayout und ordnet jedes einem Blockgerät zu. Danach müssen Sie nur noch das gewünschte Gerät mounten.
Öffnen Sie Terminal, suchen Sie das Disk-Image und geben Sie diesen 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
Dadurch wird loop0p1
und loop0p2
unter erstellt /dev/mapper
. In der Ausgabe können Sie die Größe der Partitionen sehen, was Ihnen bei der Identifizierung hilft. Sie können die gewünschte Partition mit folgendem mounten:
$ sudo mount /dev/mapper/loop0p2 /mnt
Alternativ wird das Blockgerät von Nautilus erkannt und Sie können es über die Seitenleiste mounten:
Wenn Sie fertig sind, unmounten Sie das gemountete Gerät und entfernen Sie die Gerätezuordnung:
$ sudo umount /mnt
$ sudo kpartx -d disk_image.raw
Antwort3
Bearbeiten: arbeitet mitutil-linux >=2.21. Zum Zeitpunkt des Schreibens dieses Artikels wird Ubuntu mit der Version2.20nur
AusMann verliert:
-P, --partscan
force kernel to scan partition table on newly created loop device
Also lauf einfach
$ sudo losetup -f --show -P /path/to/image.img
um Geräteknoten für jede Partition Ihres Disk-Images auf dem ersten unbenutzten Loop-Gerät zu erstellen und auf stdout auszugeben. Wenn Sie /dev/loop0
ein Gerät verwenden, wird zumindest das erstellt /dev/loop0p1
, was Sie wie gewohnt mounten können.
Antwort4
losetup -P
Automatisierung
losetup -P
ist die beste Methode ab Ubuntu 16.04, wie erwähnt unterhttps://askubuntu.com/a/496576/52975, hier sind 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"
)
Loop-Modul max_part-Konfiguration
Dies ist eine gute Methode vor dem 16.04.
loop
ist ein Kernelmodul, das in den Kernel von Ubuntu 14.04 integriert ist.
Bei richtiger Konfiguration 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.
Dies ist 0
unter Ubuntu 14.04 die Standardeinstellung, weshalb keine automatische Aufteilung erfolgt.
Um es zu ändern, können wir entweder hinzufügen:
options loop max_part=31
in eine Datei im /etc/modprobe
, oder:
GRUB_CMDLINE_LINUX="loop.max_part=31"
zu /etc/default/grub
und dann sudo update-grub
.
Wie Sie einen Modulparameter festlegen, wird auch hier beschrieben:Wie füge ich Kernelmodulparameter hinzu?
Wenn Sie nach einem Neustart Folgendes tun:
sudo losetup -f --show my.img
Es mountet das Image auf einem /dev/loopX
Gerät und mountet die Partitionen automatisch auf /dev/loopXpY
Geräten.
Wenn Sie einen Neustart durchführen möchten, ist dies die bequemste Methode.
Siehe auch
- https://unix.stackexchange.com/questions/9099/reading-a-filesystem-from-a-whole-disk-image
- https://superuser.com/questions/117136/wie-kann-ich-eine-Partition-von-dd-mounten-erstellt-ein-image-von-einem-block-gerät-eg-hdd-u
- Einzelne Partition aus dem Image der gesamten Festplatte (des gesamten Geräts) mounten
- https://stackoverflow.com/questions/1419489/loopback-mounting-individual-partitions-from-within-a-file-that-contains-a-parti