Jak zamontować obraz dysku z wiersza poleceń?

39

Wiem jak zamontować dysk, który ma odpowiedni plik urządzenia w / dev, ale nie wiem jak to zrobić dla obrazu dysku, który nie reprezentuje fizycznego urządzenia i nie ma analogowego w / dev (np. Plik ISO lub obraz dyskietki). Wiem, że mogę to zrobić w systemie Mac OS X, klikając dwukrotnie ikonę obrazu dysku w Finderze, co spowoduje automatyczne zamontowanie napędu, ale chciałbym móc to zrobić z terminala. Nie jestem pewien, czy istnieje ogólna metoda uniksowa, czy jest to specyficzne dla platformy.

użytkownik628544
źródło
1
Czy masz na myśli, że chcesz to zrobić w wierszu polecenia w systemie OS X? Wspominasz o tym, ale lepiej być wyraźnym, jeśli pytanie dotyczy konkretnego systemu operacyjnego. Jaki masz na myśli obraz dysku? .iso?
ilkkachu

Odpowiedzi:

42

Gdyby to był obraz dysku twardego z tabelą partycji MBR, fdisk obraz by znaleźć przesunięcie dla partycji, którą muszę zamontować.

fdisk -lu /path/disk.img

Potem zamontowałbym go z przesunięciem.

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

Wartość przesunięcia wyrażona jest w bajtach, natomiast fdiskpokazuje liczbę bloków, dlatego należy pomnożyć wartość z kolumny „Początek” lub „Początek” danych fdiskwyjściowych przez 512(lub niezależnie od wielkości bloku), aby uzyskać przesunięcie do zamontowania.

jc__
źródło
6
losetup -Pjest ogólnie wygodniejszy niż ta metoda: unix.stackexchange.com/a/316407/32558
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
35

W większości nowoczesnych systemów GNU mountpolecenie może obsłużyć:

mount -o loop file.iso /mnt/dir

aby odmontować, wystarczy użyć umountpolecenia

umount /mnt/dir

Jeśli twój system operacyjny nie ma tej opcji, możesz utworzyć urządzenie pętlowe :

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)

do umountowania możesz użyć -d:

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

Jeśli plik ma partycje, na przykład obraz HD, możesz użyć -Pparametru (w zależności od systemu operacyjnego), zamapuje on partycje w treści pliku:

losetup -P /dev/loop0 /path/file.iso # will create /dev/loop0 
ls /dev/loop0p* #the partitions in the format /dev/loop0pX
a0f3dd13
źródło
Jest to w zasadzie localhost(loopback!) Dla obrazów dysków.
Lekkość ściga się z Monicą
2
losetupi mount -o loopsą specyficzne dla systemu Linux. Nie będzie działać na dystrybucjach GNU przy użyciu innego jądra (np. Hurd, illumos lub kFreeBSD, chociaż illumos i FreeBSD będą miały odpowiedniki o innej składni)
Stéphane Chazelas
Oto kilka funkcji do dalszej automatyzacji losetup: unix.stackexchange.com/a/430415/32558
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
6

Próbować:

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

Możesz dodać po loop:

  • -t msdos na dyskietkę
  • -t iso9660 dla obrazu CD-ROM

Linux zwykle próbuje odgadnąć typ pliku.

Archemar
źródło
6

losetup -P automatyzacja obrazów z wieloma partycjami

Jak zamontować obraz dysku z wiersza poleceń? | Wspomniano o wymianie stosów Uniksa i Linuksalosetup -P , a oto kilka przydatnych funkcji Bash do dalszej automatyzacji. Stosowanie:

$ 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

Źródło:

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
źródło