Wie mounte ich ein Festplatten-Image mit mehreren Partitionen unter Linux?

23

Ich habe ein rohes SD-Karten-Image mit zwei Partitionen heruntergeladen.

Es verursachte einige Dateisystemfehler, als ich versuchte, es direkt auf eine SD-Karte zu schreiben. Ich bin nicht sicher, ob die Karte oder das Image defekt ist.

Gibt es eine Möglichkeit, dieses Bild zu untersuchen, ohne es auf eine physische Karte zu schreiben? Möchten Sie versuchen, die Partitionen separat bereitzustellen oder die Tabellen zu überprüfen?

Atilla Filiz
quelle

Antworten:

20

Sie können kpartx oder partx verwenden , um Loop-Geräte für die Partitionen im Image zu erstellen und diese dann bereitzustellen . Also entweder:

$ sudo kpartx -v -a file.iso
add map loop0p1 (253:17): 0 8382464 linear 7:1 2048
$ mount /dev/mapper/loop0p1 ./mnt_point
...  do something with the partition  ...
$ umount ./mnt_point
$ kpartx -d -v file.iso
del devmap : loop0p1
loop deleted : /dev/loop0

oder:

$ sudo partx -a -v file.iso
partition: none, disk: file.iso, lower: 0, upper: 0
Trying to use '/dev/loop0' for the loop device
/dev/loop0: partition table type 'dos' detected
range recount: max partno=1, lower=0, upper=0
/dev/loop0: partition #1 added
$ mount /dev/loop0p1 ./mnt_point
...  do something with the partition  ...
$ umount /dev/loop0p1 ./mnt_point
$ sudo partx -d -v /dev/loop0
partition: none, disk: /dev/loop0, lower: 0, upper: 0
/dev/loop0: partition #1 removed

Siehe auch Wie kann ich ein Disk-Image mounten?

Catskul
quelle
Danke @ frank-breitling. Die Bearbeitung wurde von den Rezensenten abgelehnt, bevor ich die Gelegenheit dazu hatte.
Catskul
14

losetup -Pf in util-linux> = 2.21 (Ubuntu 16.04)

sudo losetup -Pf disk.img
sudo mkdir /mnt/loop0p1
sudo mount /dev/loop0p1 /mnt/loop0p1

Siehe die losetup (8) -Manpage und auch /ubuntu/69363/mount-single-partition-from-image-of-entire-disk-device/673257#673257

losetup -P Automatisierung

Hier sind Funktionen zu automatisieren, wenn weiter. 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"
)
Ciro Santilli ist ein Schauspieler
quelle
1

Du könntest es versuchen:

mount -t Typ -o Schleife ./image / mnt

Dabei ist "type" = fs type und "image" der Name Ihrer heruntergeladenen Datei

Tog
quelle
3
Wenn Sie darüber nachdenken, funktioniert dies möglicherweise nicht mit einem Image, das mehrere Partitionen enthält.
Tog
2
Sie müssen den Offset der einzelnen Partition angeben , um sie mit etwas wie "mount -o loop, ro, offset = XXXXXXXX imagefile / mnt"
einzuhängen
1
Würde losetup nicht funktionieren, um einen Offset anzugeben?
Tog
du hast recht ... mit losetup kannst du einen Versatz für die Partition festlegen, um ein Loopback-Gerät zu erstellen, das einfach mit mount / dev / loopX / mnt
gemountet werden kann
1

Diese Antwort auf ServerFault schlägt vor:

benutze losetup um eine / dev / Schleife zu bekommen? Gerät, und verwenden Sie dann kpartx, um Entwicklungszuordnungen für die Partitionen in der Image-Datei zu erstellen.

Herr Shunz
quelle