Bagaimana cara me-mount image disk dari baris perintah?

40

Saya tahu cara memasang drive yang memiliki file perangkat yang sesuai di / dev, tapi saya tidak tahu bagaimana melakukan ini untuk gambar disk yang tidak mewakili perangkat fisik dan tidak memiliki analog di / dev (misalnya sebuah File ISO atau gambar disket). Saya tahu saya bisa melakukan ini di Mac OS X dengan mengklik dua kali ikon gambar disk di Finder, yang akan memasang drive secara otomatis, tetapi saya ingin dapat melakukan ini dari terminal. Saya tidak yakin apakah ada cara Unix umum melakukan ini, atau apakah ini khusus platform.

pengguna628544
sumber
1
Maksud Anda, Anda ingin melakukannya di baris perintah pada OS X? Anda menyebutkannya, tetapi mungkin lebih baik untuk menjadi eksplisit jika pertanyaannya khusus untuk os tertentu. Juga, apa jenis disk image yang Anda maksud? .iso?
ilkkachu

Jawaban:

43

Jika itu adalah gambar hard-drive dengan tabel partisi MBR, saya akan fdisk gambar untuk menemukan offset untuk partisi yang perlu saya mount.

fdisk -lu /path/disk.img

Lalu saya akan me-mount-nya lewat offset.

mount -o loop,offset=xxxx /path/disk.img /mnt/disk.img.partition

Nilai offset dalam byte, di mana fdiskmenunjukkan jumlah blok, jadi Anda harus mengalikan nilai dari kolom "Mulai" atau "Mulai" dari fdiskoutput dengan 512(atau apa pun ukuran blok) untuk mendapatkan offset untuk dipasang di.

jc__
sumber
6
losetup -Pumumnya lebih nyaman daripada metode ini: unix.stackexchange.com/a/316407/32558
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
35

Pada kebanyakan sistem GNU modern mountperintah dapat menangani itu:

mount -o loop file.iso /mnt/dir

untuk meng-unmount Anda bisa menggunakan umountperintah

umount /mnt/dir

Jika OS Anda tidak memiliki opsi ini, Anda dapat membuat perangkat loop :

losetup -f # this will print the first available loop device ex:/dev/loop0
losetup /dev/loop0 /path/file.iso #associate loop0 with the specified file
mount /dev/loop0 /mnt/dir #It may be necessary specify the type (-t iso9660)

untuk umount Anda dapat menggunakan -d:

umount /mnt/dir
losetup -d /dev/loop0

Jika file memiliki partisi, contoh gambar HD, Anda dapat menggunakan -Pparameter (tergantung pada OS Anda), itu akan memetakan partisi dalam konten file:

losetup -P /dev/loop0 /path/file.iso # will create /dev/loop0 
ls /dev/loop0p* #the partitions in the format /dev/loop0pX
a0f3dd13
sumber
Ini pada dasarnya localhost(loopback!) Untuk gambar disk.
Lightness Races with Monica
2
losetupdan mount -o loopspesifik untuk Linux. Ini tidak akan berfungsi pada distribusi GNU menggunakan kernel yang berbeda (seperti hurd, illumos atau kFreeBSD meskipun illumos dan FreeBSD akan memiliki yang setara dengan sintaks yang berbeda)
Stéphane Chazelas
Berikut adalah beberapa fungsi untuk otomatisasi lebih lanjut losetup: unix.stackexchange.com/a/430415/32558
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
6

Mencoba:

mount -o loop /path/to/file.iso /mnt

Anda dapat menambahkan, setelah loop:

  • -t msdos untuk floppy
  • -t iso9660 untuk gambar CD-ROM

Linux biasanya mencoba menebak jenis file.

Archemar
sumber
6

losetup -P otomatisasi untuk gambar multi-partisi

Bagaimana cara me-mount image disk dari baris perintah? | Unix & Linux Stack Exchange disebutkan losetup -P, dan berikut adalah beberapa fungsi Bash yang berguna untuk mengotomatiskan hal-hal lebih lanjut. 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