# Loop device

En sistemas operativos Unix-like, un loop device, vnd (vnode disk) o lofi (loop file interface) es un dispositivo virtual que hace que se pueda acceder a un fichero como un dispositivo de bloques.
Antes de su uso, se tiene que conectar el loop device a un archivo existente en el sistema de ficheros. Esta asociación proporciona al usuario una interfaz que permite que se use el archivo como un dispositivo de bloque. Por tanto, si el fichero contiene todo un sistema de archivos, este puede ser montado como si fuera un disco.
Este tipo de archivos se usan a veces para almacenar imágenes ISO de discos y disquetes. Montar un archivo que contiene un sistema de archivos en un loop device hace que se pueda acceder a los archivos de ese sistema de ficheros. Aparecen en el directorio del punto de montaje.
Un loop device puede permitir ciertos tipos de manipulación de datos durante esta redirección. Por ejemplo, el dispositivo puede ser la versión sin cifrar de un archivo cifrado. En este caso, el archivo asociado con un loop device puede ser otro pseudo-dispositivo. Esto es útil principalmente cuando este dispositivo contiene un sistema de ficheros cifrado. Si se permite esto, el loop device es en este caso la versión sin cifrar del archivo cifrado original y por tanto se puede montar como si fuera un sistema de archivos normal.

## Usos

Después de montar un archivo que contiene un sistema de ficheros, se puede acceder a los archivos de este sistema mediante la interfaz habitual del sistema de archivos del sistema operativo, como leer y escribir imágenes ISO, sin ninguna necesidad de funcionalidad especial.
El montaje de un loop device tiene varios usos. Es un método apropiado para administrar y editar imágenes de sistemas de archivos, que se usan posteriormente para el funcionamiento normal del sistema. Esto incluye imágenes de CD o DVD o sistemas de instalación. También se puede usar para instalar un sistema operativo en un sistema de ficheros sin particionar el disco. Por último, proporciona una separación permanente de los datos, por ejemplo, cuando se simulan medios extraíbles en un disco duro más rápido y cómodo o encapsulando sistemas de ficheros cifrados.

## Disponibilidad

Varios sistemas operativos Unix proporcionan la funcionalidad de los loop devices bajo diferentes nombres.
En Linux, los nombres de los dispositivos están codificados en las entradas de la tabla de símbolos de sus correspondientes manejadores de dispositivo. El dispositivo se llama loop y los nodos del dispositivo se llaman habitualmente /dev/loop0, /dev/loop1... Se pueden crear con makedev, y dinámicamente con las utilidades del sistema de archivos (udev), o directamente con mknod. El comando de administración de los loop devices es losetup, que forma parte del paquete util-linux.
A veces, el loop device se denomina erróneamente loopback device, pero este término está reservado para un dispositivo de redes en sistemas operativos. El concepto de loop device es distinto.
En sistemas derivados de BSD, como NetBSD y OpenBSD, los loop devices se llaman virtual node device ("dispositivo virtual de nodos") o "vnd", y se sitúan habitualmente en /dev/vnd0, /dev/rvnd0 o /dev/svnd0… en el sistema de archivos. Para su configuración se usa el programa vnconfig.
FreeBSD siguió las mismas convenciones de otros sistemas BSD hasta la versión 5, en la que el loop device se incorporó al manejador del disco ("md"). La configuración se realiza con el comando mdconfig.
En Solaris/OpenSolaris, el loop device se llama loopback file interface o "lofi," y se sitúa en /dev/lofi/1... SunOS tiene el programa de configuración lofiadm. "lofi" permite compresión de solo lectura y cifrado de lectura y escritura. Desde verano de 1988, también hay disponible un manejador llamado fbk (File emulates Blockdevice, "archivo que simula un dispositivo de bloques") en SunOS/Solaris.
UnixWare incluye un manejador del dispositivo que se puede cargar dinámicamente, marry(7) y la utilidad marry(1M). El manejador marry permite que se trate a un fichero regular como un dispositivo. Se puede acceder al fichero regular como un dispositivo de bloques, /dev/marry/regfile, o como un dispositivo de caracteres, /dev/marry/rregfile. El comando marry también permite cifrar y descifrar un fichero regular.
Mac OS X implementa un mecanismo nativo para montar archivos de imagen como parte de su abstracción de disco de acceso aleatorio. El dispositivo aparece en /dev como los dispositivos de disco regulares; las lecturas de y las escrituras en estos dispositivos se mandan a un proceso auxiliar en modo usuario, que lee o escribe los datos en el archivo. En la interfaz de usuario, se activa automáticamente abriendo la imagen del disco. OS X puede manejar imágenes de disco (.dmg o .iso), CD-ROM o DVD en varios formatos.
En Microsoft Windows, no estuvo disponible el montaje de loop devices hasta Windows 7, donde se implementa nativamente esta funcionalidad, y está disponible mediante el comando diskpart. Sin embargo, a menudo se añade esta funcionalidad usando aplicaciones de terceros como Daemon Tools y Alcohol 120%. También se pueden usar herramientas gratuitas de VMware (Disk Mount Utility) y LTR Data (ImDisk) para conseguir una funcionalidad similar. En Windows XP y Vista, también es posible usar la posibilidad de disco duro virtual añadiendo algunos componentes de Microsoft Virtual Server 2005 R2.
En A2 BlueBottle, se puede crear un disco virtual en un archivo con VirtualDisks.Create. Se puede instalar un sistema de ficheros en estos "discos" con VirtualDisks.Install.

## Ejemplo

Montar un archivo que contiene una imagen de disco en un directorio necesita dos pasos:
* asociar el archivo con un loop device,
* montar el loop device en un directorio que actúa como punto de montaje
Estas dos operaciones se pueden realizar usando dos comandos separados o solo con el comando mount mediante opciones. El primer paso lo puede realizar comandos como losetup en Linux o lofiadm en SunOS. Por ejemplo, si example.img es un fichero regular que contiene un sistema de ficheros y /home/you/dir es un directorio de usuario de Linux, el superusuario (root) puede montar el archivo en el directorio ejecutando los siguientes dos comandos:
El segundo comando monta el dispositivo en el directorio /home/you/dir. El efecto final de ejecutar los dos comandos es que el contenido del archivo se usa como un sistema de ficheros con su raíz en el punto de montaje.
Para identificar un loop device disponible para su uso en los comandos anteriores, el superusuario puede ejecutar:
El comando mount es capaz de realizar todo el proceso:
Posteriormente, el dispositivo puede ser desmontado ejecutando el siguiente comando:
o, después de haber encontrado el número del loop con por ejemplo mount | grep "/home/you/dir" o losetup -a | grep example.img,
En una interfaz de programación de aplicaciones (API) de bajo nivel, la asociación y desasociación de un archivo con un loop device se realiza con la llamada al sistema ioctl en el loop device.