¿Cómo montar una imagen de disco desde la línea de comando?


40

Sé cómo montar una unidad que tiene un archivo de dispositivo correspondiente en / dev, pero no sé cómo hacer esto para una imagen de disco que no representa un dispositivo físico y no tiene un análogo en / dev (por ejemplo, un Archivo ISO o una imagen de disquete). Sé que puedo hacer esto en Mac OS X haciendo doble clic en el icono de la imagen del disco en Finder, que montará la unidad automáticamente, pero me gustaría poder hacerlo desde el terminal. No estoy seguro de si hay una forma general de Unix de hacer esto, o si esto es específico de la plataforma.


1
¿Quieres decir que quieres hacerlo en la línea de comandos en OS X? Lo mencionas, pero podría ser mejor ser explícito si la pregunta es específica de un determinado sistema operativo. Además, ¿a qué tipo de imagen de disco te refieres? .¿Yo asi?
ilkkachu

Respuestas:


43

Si se tratara de una imagen de disco duro con una tabla de partición MBR, buscaría la imagen en el disco para encontrar el desplazamiento de la partición que necesito montar.

fdisk -lu /path/disk.img

Luego lo montaría pasando el desplazamiento.

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

El valor de desplazamiento está en bytes, mientras que fdiskmuestra un recuento de bloques, por lo que debe multiplicar el valor de la columna "Inicio" o "Inicio" de la fdisksalida por 512(o cualquiera que sea el tamaño del bloque) para obtener el desplazamiento para montar.


66
losetup -Pgeneralmente es más conveniente que este método: unix.stackexchange.com/a/316407/32558
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

35

En el sistema GNU más moderno, el mountcomando puede manejar eso:

mount -o loop file.iso /mnt/dir

para desmontar puedes usar el umountcomando

umount /mnt/dir

Si su sistema operativo no tiene esta opción, puede crear un dispositivo de bucle :

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)

para desmontar puedes usar -d:

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

Si el archivo tiene particiones, por ejemplo, una imagen HD, puede usar el -Pparámetro (dependiendo de su sistema operativo), asignará las particiones en el contenido del archivo:

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

Esto es básicamente localhost(loopback!) Para imágenes de disco.
Lightness compite con Monica el

2
losetupy mount -o loopson específicos de Linux. No funcionará en distribuciones de GNU usando un kernel diferente (como hurd, illumos o kFreeBSD, aunque illumos y FreeBSD tendrán el equivalente con una sintaxis diferente)
Stéphane Chazelas

Estas son algunas funciones para automatizar aún más losetup: unix.stackexchange.com/a/430415/32558
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

6

Tratar:

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

Puede agregar, después de loop:

  • -t msdos para disquete
  • -t iso9660 para imagen de CD-ROM

Linux generalmente intenta adivinar el tipo de archivo.


6

losetup -P automatización para imágenes de múltiples particiones

¿Cómo montar una imagen de disco desde la línea de comando? El | Se menciona el intercambio de pila de Unix y Linuxlosetup -P , y aquí hay algunas funciones prácticas de Bash para automatizar aún más las cosas. 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

Fuente:

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"
)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.