Bagaimana me-mount image disk multi-partisi di Linux?

23

Saya mengunduh gambar kartu SD mentah yang memiliki dua partisi.

Ini menyebabkan beberapa kesalahan sistem file ketika saya mencoba dd langsung ke kartu SD. Saya tidak yakin apakah kartunya cacat atau gambar.

Apakah ada cara untuk memeriksa gambar ini tanpa menulisnya ke kartu fisik? Suka mencoba me-mount partisi secara terpisah atau memeriksa tabel?

Atilla Filiz
sumber

Jawaban:

20

Anda dapat menggunakan kpartx atau partx untuk membuat perangkat loop untuk partisi pada gambar, dan kemudian mount mereka. Jadi:

$ 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

atau:

$ 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

Lihat juga Bagaimana saya bisa memasang gambar disk?

Catskul
sumber
Terima kasih @ frank-breitling. Sunting ditolak oleh pengulas sebelum saya sempat membahasnya.
Catskul
14

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

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

Lihat halaman manual losetup (8) dan juga /ubuntu/69363/mount-single-partition-from-image-of-entire-disk-device/673257#673257

losetup -P otomatisasi

Berikut adalah fungsi untuk mengotomatisasi jika lebih jauh. Pemakaian:

$ 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

Sumber:

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 新疆 改造 中心 法轮功 六四 事件
sumber
1

Kamu bisa mencoba:

mount -t ketik -o loop ./image / mnt

di mana "type" = tipe fs dan "image" adalah nama file yang Anda unduh

Mantel
sumber
3
Berpikir tentang itu, itu mungkin tidak berfungsi dengan gambar yang mengandung banyak partisi.
Tog
2
Anda harus menentukan offset partisi tunggal yang akan di-mount dengan sesuatu seperti "mount -o loop, ro, offset = XXXXXXXXfilefile / mnt"
Mr Shunz
1
Tidakkah losetup bekerja untuk menentukan offset?
Tog
Anda benar ... dengan losetup Anda dapat mengatur offset ke partisi untuk membuat perangkat loopback yang dapat dengan mudah dipasang dengan mount / dev / loopX / mnt
Mr Shunz
1

Jawaban pada ServerFault ini menyarankan:

gunakan losetup untuk mendapatkan / dev / loop? perangkat, kemudian gunakan kpartx di atasnya untuk membuat pemetaan dev untuk partisi dalam file gambar.

Tuan Shunz
sumber