¿Por qué se necesita un dispositivo de bucle?

15

Anteriormente solía crear archivos de imagen usando dd, configurar un sistema de archivos en ellos usando mkfsy mountacceder a ellos como particiones montadas. Más tarde, he visto en Internet que muchos ejemplos usan de losetupantemano para hacer una entrada de dispositivo de bucle debajo /devy luego montarlo. No podría decir por qué uno prácticamente necesitaría un archivo de imagen para comportarse como un dispositivo de bucle y tener su propia /deventrada, mientras que se puede obtener el mismo comportamiento sin toda la molestia.

Resumen: en un escenario de la vida real, ¿por qué necesitamos una /dev/loopXentrada para estar presente, cuando simplemente podemos montar la imagen fs sin ella? ¿De qué sirve un dispositivo de bucle?

corsel
fuente
99
"... mientras que se puede obtener el mismo comportamiento sin toda la molestia". - Estás equivocado allí;) - en Linux, un archivo no se puede montar sin la "molestia" de un dispositivo de bucle. Es solo que hoy en día mountes lo suficientemente inteligente como para molestarlo. (como muestra Stephen Harris en su respuesta)
marcelm
1
Posible duplicado de ¿Cuál es la diferencia entre mount y mount -o loop?
Dmitry Grigoryev

Respuestas:

22

Los montajes, por lo general, deben realizarse en dispositivos de bloque. El controlador de bucle coloca un dispositivo de bloque front-end en su archivo de datos.

Si realiza un montaje en bucle sin losetup, el sistema operativo hace uno en segundo plano.

p.ej

$ dd if=/dev/zero of=/tmp/foo bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0798775 s, 1.3 GB/s
$ mke2fs /tmp/foo
mke2fs 1.42.9 (28-Dec-2013)
....


$ losetup    
$ mount -o loop /tmp/foo /mnt1    
$ losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         1  0 /tmp/foo
$ umount /mnt1
$ losetup
$ 

Es posible que deba llamar losetupdirectamente si la imagen de su archivo tiene particiones integradas.

Por ejemplo, si tengo esta imagen:

$ fdisk -l /tmp/foo2      

Disk /tmp/foo2: 104 MB, 104857600 bytes, 204800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x1f25ff39

     Device Boot      Start         End      Blocks   Id  System
/tmp/foo2p1            2048      204799      101376   83  Linux

No puedo montar eso directamente

$ mount -o loop /tmp/foo2 /mnt1
mount: /dev/loop0 is write-protected, mounting read-only
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
       missing codepage or helper program, or other error

Pero si uso losetupy kpartxluego puedo acceder a las particiones:

$ losetup -f /tmp/foo2
$ losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /tmp/foo2
$ kpartx -a /dev/loop0
$ mount /dev/mapper/loop0p1 /mnt1
$
Stephen Harris
fuente
No necesita explícito losetup, solo use mount -o loop,offset=$((512*2048)), donde 512está el tamaño del sector, y 2048es lo que fdiskdio a partir Startde la partición.
Ruslan
Sí, esto fue solo un ejemplo de uso. En este ejemplo específico, podría ser más fácil hacer el cálculo de desplazamiento, pero puede haber casos de uso (por ejemplo, múltiples particiones que desea montar al mismo tiempo) en los que puede ser más fácil justificar losetupy kpartx. Deje que las herramientas hagan el trabajo duro :-)
Stephen Harris
18

Los sistemas de archivos esperan leer y escribir en dispositivos de bloque, pero los archivos de imagen no son dispositivos de bloque. Los dispositivos de bucle proporcionan un dispositivo de bloque encima de un archivo (u otro dispositivo de bloque, opcionalmente con reasignación).

No hay necesidad de considerar los dispositivos loop al montar las imágenes en muchos casos porque mountse encarga de todo para usted; pero los dispositivos de bucle todavía están involucrados. losetup -l -ales mostrará

Vea también ¿Cuál es la diferencia entre mount y mount -o loop ?

Stephen Kitt
fuente
Entonces, ¿se maneja implícitamente el bloqueo de dispositivos mount?
corsel
2
Sí, mountse encarga de losetupagregar, -o loopetc.
Stephen Kitt
@corsel, en la mayoría de los casos, hacer que losetup de llamada de montaje funcionen bien, pero hay excepciones como montar múltiples particiones desde una imagen de disco.
hildred
11

Parece que estás en Linux y Linux usa un nombre incorrecto para esa característica.

Inventé esa característica en 1988 en SunOS-4.0 y llamo a esa característica fbk: el archivo emula el dispositivo BlocK.

El fondo es que el controlador del dispositivo emula un dispositivo de bloque en la parte superior de un archivo sin formato. Necesita esto ya que un sistema de archivos no puede usar un archivo plano como almacenamiento de fondo para un sistema de archivos. Más bien necesita un dispositivo de bloqueo y esto es lo que fbkemula.

Desde hace un tiempo, algunas personas hicieron que el programa fuera mountun poco más inteligente y hay implementaciones de montaje que crean automáticamente una fbkinstancia para un archivo en caso de que el mountprograma detecte que el argumento que se espera que sea un dispositivo de bloque parece ser un archivo de plan.

astuto
fuente
3
Muy impresionante CV que obtuviste en tu perfil. Respeto ...
corsel
11
Tu publicación sale como algo elitista. Es posible que haya escrito la primera implementación, pero Linux usa una implementación diferente, por lo que no usa el nombre 'incorrecto', solo uno diferente del que eligió para su implementación.
Austin Hemmelgarn
44
Nunca dije que usaran el nombre correcto, solo dije que decir que estaba mal te hace sonar como un elitista obstinado.
Austin Hemmelgarn
99
El nombre de "bucle" es la abreviatura de "bucle invertido" y se refiere a la forma en que las operaciones en el dispositivo de bloque se "devuelven" al VFS. Solaris 8 introdujo un lofidispositivo ("archivo loopback") que funcionaba de manera similar; BSD los introdujo bajo el nombre vnd("disco vnode") por lo que el concepto ha tenido muchos nombres diferentes a lo largo de los años.
caf
2
Los dos problemas más difíciles en CS: coherencia de caché, nombres de identificadores y errores fuera de uno.
Jens
1

Incluso si no fuera necesario en segundo plano para montar sistemas de archivos a partir de archivos, igual lo necesitaría para cualquier configuración que use un controlador o programa que espere absolutamente un dispositivo de bloque. Piense en servidores nbd (dispositivo de bloque de red), controladores de dispositivos de bloque compuesto como mdraid, lvm, etc.

rackandboneman
fuente