¿Cuál es la diferencia entre mount y mount -o loop?

28

Tengo un archivo iso llamado ubuntu.iso.

Lo que pueda mountcon el comando: mount ubuntu.iso /mnt. Después del montaje, puedo ver desde la outout del comando df -h: /dev/loop0 825M 825M 0 100% /mnt.

Sin embargo, si ejecuto el comando mount -o loop ubuntu.iso /mnt, obtendré el mismo resultado.

Como sé, el dispositivo de bucle nos permite visitar el archivo iso como dispositivo, creo que es por eso que agregamos la opción -o loop. Pero puedo visitar mi archivo iso incluso si solo ejecuto mount ubuntu.iso /mnt.

Entonces no puedo ver la diferencia entre mounty mount -o loop.

Yves
fuente
También una cosa importante es que, a veces, mount no puede configurar un dispositivo de bucle invertido con las disposiciones apropiadas. Por ejemplo: mount ubuntu.iso /mntno configura un dispositivo de bucle invertido de solo lectura, y mount /image.squashfs /mntno configura un dispositivo de bucle invertido DIO( losetup --direct-io=on).
analfabeto

Respuestas:

47

Ambas versiones usan dispositivos de bucle y producen el mismo resultado; la versión corta se basa en la "inteligencia" añadida mounten los últimos años. mount -o loople dice mountexplícitamente que use un dispositivo de bucle; deja el dispositivo de bucle en sí mismo mount, que buscará un dispositivo disponible, lo configurará y lo usará. (También puede especificar el dispositivo con, p mount -o loop=/dev/loop1 . Ej .)

La inteligencia es que, cuando se le da un archivo para montar, mountusará automáticamente un dispositivo de bucle para montarlo cuando sea necesario, es decir , el sistema de archivos no se especifica o libblkiddetermina que el sistema de archivos solo es compatible con dispositivos de bloque (y, por lo tanto, un Se necesita un dispositivo de bucle para traducir el archivo a un dispositivo de bloque).

La sección del dispositivo de bucle de la mountpágina del manual tiene más detalles.

Stephen Kitt
fuente
1
No * eso * hace mucho tiempo tampoco había una opción "-o loop" en el montaje y tendría que crear manualmente el dispositivo de bucle con el comando losetup.
Edheldil
@Edheldil que depende de su noción de "hace mucho tiempo" ;-). util-linux2.11 fue compatible mount -o loopen 2001, y creo que 2.10 también lo tenía, al menos un año antes.
Stephen Kitt el
Sí, pero ¿las distribuciones estables comúnmente utilizadas en 2001 ya usaban util-linux 2.11?
rackandboneman
2
@rackandboneman Fui a cavar un poco más, y resulta que el soporte para -o loopse agregó en algún momento entre util-linux2.4 y 2.5j; Debian 1.1 tenía este último y se lanzó en junio de 1996. Por lo tanto, esta opción ha estado disponible en distribuciones durante más de veinte años.
Stephen Kitt
Una ventaja de esta inteligencia: si / cuando la nueva función de "montaje directo de archivos" de los desarrolladores de XFS (sin la necesidad de dispositivos de bucle) llegue al núcleo, mountpodrá cambiar a ese mecanismo de forma transparente (al menos durante los primeros 15 minutos hasta que Resulta que rompió el shellscript de alguien y todos tienen que volver a los dispositivos de bucle) , a diferencia de lo mount -o loopque todavía pide explícitamente el antiguo mecanismo (actual).
Grawity
9

El loopdispositivo se controla principalmente con el losteupcomando. Por lo tanto, losetup -ale ofrece información general sobre los dispositivos de bucle utilizados y los archivos adjuntos. El mountcomando solo puede montar el dispositivo de bloque . El dispositivo de bucle puede crear el dispositivo de bloque virtual a partir de un archivo (dispositivo de caracteres).

De hecho, hay una gran diferencia entre esos comandos porque en los sistemas Linux más antiguos mountno se podía reconocer el archivo como el dispositivo correcto para montar, pero durante el tiempo que el comando de montaje se completó con muchas características, por lo tanto, ahora puede decidir por sí mismo intente llamar al comando losetup y monte el resultado. Pero si tiene una imagen de disco completa sin formato iso pero, por ejemplo, con MBR al principio, el comando de montaje no puede reconocerla y tiene que encontrar la partición utilizable (por ejemplo, con el parted disk_image.raw unit B printcomando) y luego montarla con la opción completa mount comman como :

mount disk_image.raw /mntpoint/ -o loop,offset=${OFFSET_of_PARTITION}

En esta sintaxis, el dispositivo de bucle no se especificó y se supone que el sistema elige el primer libre ( /dev/loop0, /dev/loop1etc.) Entre las otras características nuevas del comando mount es que no necesita especificar el tipo de sistema de archivos del dispositivo de bloque montado (en su caso -t iso9660) si se instaló el soporte del sistema de archivos.

Schweik
fuente
7

No hay diferencia entre mount ubuntu.iso /mnty mount -o loop ubuntu.iso /mnt.

El primero se maneja de manera transparente como si hubiera usado el segundo.

Emmanuel Rosa
fuente