Come montare un'immagine del disco dalla riga di comando?


40

So montare un drive che ha un file di dispositivo corrispondente in / dev, ma non so come farlo per un'immagine del disco che non rappresenta un dispositivo fisico e non ha un analogico in / dev (ad es. File ISO o immagine floppy). So che posso farlo in Mac OS X facendo doppio clic sull'icona dell'immagine del disco nel Finder, che monterà automaticamente l'unità, ma vorrei poterlo fare dal terminale. Non sono sicuro se esiste un modo Unix generale per farlo, o se questo è specifico della piattaforma.


1
Vuoi dire che vuoi farlo dalla riga di comando su OS X? Lo dici, ma potrebbe essere meglio essere esplicito se la domanda è specifica per un determinato sistema operativo. Inoltre, che tipo di immagine del disco intendi? .iso?
ilkkachu,

Risposte:


43

Se fosse un'immagine del disco rigido con una tabella delle partizioni MBR, vorrei scansionare l'immagine per trovare l'offset per la partizione che devo montare.

fdisk -lu /path/disk.img

Quindi lo monterei passando l'offset.

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

Il valore di offset è in byte, mentre fdiskmostra un conteggio dei blocchi, quindi è necessario moltiplicare il valore dalla colonna "Begin" o "Start" fdiskdell'output per 512(o qualunque sia la dimensione del blocco) per ottenere l'offset su cui montare.


6
losetup -Pè generalmente più conveniente di questo metodo: unix.stackexchange.com/a/316407/32558
Ciro Santilli 15 改造 中心 法轮功 六四 事件

35

Sulla maggior parte dei moderni sistemi GNU il mountcomando può gestire questo:

mount -o loop file.iso /mnt/dir

per smontare puoi semplicemente usare il umountcomando

umount /mnt/dir

Se il tuo sistema operativo non ha questa opzione, puoi creare un dispositivo 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)

per smontare puoi usare -d:

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

Se il file ha partizioni, ad esempio un'immagine HD, è possibile utilizzare il -Pparametro (a seconda del sistema operativo in uso), mapperà le partizioni nel contenuto del file:

losetup -P /dev/loop0 /path/file.iso # will create /dev/loop0 
ls /dev/loop0p* #the partitions in the format /dev/loop0pX

Questo è fondamentalmente localhost(loopback!) Per le immagini del disco.
Corse di leggerezza con Monica

2
losetupe mount -o loopsono specifici di Linux. Non funzionerà su distribuzioni GNU usando un kernel diverso (come hurd, illumos o kFreeBSD anche se illumos e FreeBSD avranno l'equivalente con una sintassi diversa)
Stéphane Chazelas

Ecco alcune funzioni per automatizzare ulteriormente losetup: unix.stackexchange.com/a/430415/32558
Ciro Santilli 15 改造 中心 法轮功 六四 事件

6

Provare:

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

È possibile aggiungere, dopo loop:

  • -t msdos per floppy
  • -t iso9660 per l'immagine del CD-ROM

Linux di solito tenta di indovinare il tipo di file.


6

losetup -P automazione per immagini multi partizione

Come montare un'immagine del disco dalla riga di comando? | Unix e Linux Stack Exchange menzionati losetup -P, e qui ci sono alcune utili funzioni di Bash per automatizzare ulteriormente le cose. Uso:

$ 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

Fonte:

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"
)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.