Este manual lo he sacado de mi antigua dirección, que como comenté poco a poco iré moviendo todo a la nueva, para que no se pierda y pueda seguir estando accesible. Si no lo has leído y te gusta Linux, explica cosas interesantes que todo Administrador de Sistemas debería saber.

“Veremos cómo crear un dispositivo de loopback paso a paso, con sus aplicaciones prácticas, aprovechando para explicar opciones especiales de montajes de particiones, aclarar conceptos…”


REQUISITOS:

  1. Para exprimir al máximo el artículo: Conocer el montaje de particiones, y las principales opciones del parámetro mount -o
  2. Conocer el uso del comando dd y el operador aritmético básico $((expresion))

ÍNDICE: Notepad

  1. ¿Qué es un dispositivo de Loopback?
  2. Usos prácticos
  3. Cuotas de disco duro
  4. Creando el dispositivo
  5. Últimos consejos

¿QUÉ ES UN DISPOSITIVO DE LOOPBACK?:
Este es un concepto algo difícil de entender, no os desaniméis en la definición, veréis que luego no es tan complicado (viéndolo en la práctica).
Consiste en un dispositivo especial de Linux que permite hacer referencias a un fichero o a un sistema de ficheros como si de otro dispositivo se tratase. Los datos se leen y se escriben en el fichero, en vez de en pistas del disco duro real.
Estos dispositivos se nombran /dev/loopX siendo X un dígito. Se usan para simular un dispositivo de bloques (una partición). Esta es la clave, simular una partición.

USOS PRÁCTICOS

  1. Establecer cuotas de espacio de disco duro. Se esplicará con más detalle a continuación
  2. Montar imágenes ISO antes de pasarlas a un CD para comprobar su funcionamiento
  3. Para montar una partición cifrada de forma transparente al usuario. Esto se conoce como cryptoloop, y en la actualidad ha caído en desuso, debido al nuevo sistema dm-crypt más eficaz y estable. Aun así es interesante conocerlo, para comprender mejor el segundo sistema

CUOTAS DE DISCO DURO:
Una cuota es un límite, en este caso, un límite de espacio que podremos ocupar en el disco duro. Algo así como los 2GB de Gmail.
Imaginemos que tenemos un servidor corriendo, un Apache, que sirve nuestra página web a todo Internet. Normalmente recibimos un buen promedio de visitas, pero aún así el syslog da a basto, igual que logrotate, así que los logs ocupan un espacio pero no todo. Un día, un enemigo de la empresa, un competidor, un empleado descontento… nos ataca por medio de un DoS (Denial of Service, ni siquiera Distributed). Sin embargo nuestra capacidad de logs se satura y el sistema se cae, porque no hicimos una partición a parte para estos logs. De este modo, solo la partición se hubiese saturado, y no el sistema completo.
Este suele ser uno de las situaciones típicas con las que se explica el loopback, nosotros lo veremos de una forma más casera, más asequible al usuario medio.
El entorno: Tenemos un ordenador para varias personas, cada una con su usuario y su propio home en /home/login, y como administradores de sistemas, queremos dar una situación de igualdad a todos los usuarios, en torno a cuanto espacio pueden ocupar, es decir, imponer un límite de espacio, por ejemplo 100mb, y queremos que no se pueda superar.

Drive - C

CREANDO EL DISPOSITIVO
Antes de nada, os podéis descargar un fichero txt que contiene mi sesión de consola para crear este dispositivo, puede que ayude a resolver dudas, o para tener el código recopilado.
En todos los casos, el dispositivo se creará del mismo modo. Primero vamos a crear un fichero de 100 mb, en /dev/loop/.

cd /dev/loop/
sudo dd if=/dev/zero of=carlosloop bs=1k count=$((1024*100))

Le damos formato, en este caso un reiserfs:

sudo mkfs.reiserfs -f carlosloop
Continue (y/n):y
Initializing journal – 0%….20%….40%….60%….80%….100%
ReiserFS is successfully created on carlosloop.

Nos preguntará, si queremos continuar, le damos a <> e intro. He citado la línea del journal, para explicar qué es lo que está haciendo. Los nuevos formatos como ext3 o reiserfs, funcionan con una técnica nueva conocida como jounalising.
El journal es un registro que guarda a nivel de bit lo que se debe guardar en el disco duro, y va volcando esos bufferes, si el sistema se cuelga, al reiniciar comprobará ese registro y terminará de grabar los bits que le faltasen. En cambio si usamos ext2, y sufrimos un corte de luz, nos tendremos que despedir de los datos que no se volcaron del buffer. El volvado se pude forzar manualmente con el comando sync.
El journal ocupa exactamente 33 mb, que no podremos usar para otras cosas, por lo que en realidad, 100 mb efectivos sería un dispositivo de 133mb.
Los formatos más conocidos que usan esta técnica son: ext3, reiserfs y XFS. Es por esto, que siempre al no iniciado en Linux, se le suele recomendar ext3.
Comentar también, que toda partición reserva un espacio exclusivo para el usuario root, así si hemos llenado con un usuario normal todo nuestro home, el root podrá seguir guardando ahí ficheros, ¿increíble no?
Creamos una carpeta temporal, con:

mkdir /tmp/prueba

Montamos el dispositivo como de loopback:

sudo mount -o loop,rw /dev/loop/carlosloop /tmp/prueba/

Si se monta una partición encima de otra, la que está por debajo, no es borrada, simplemente no será visible, esto es importante tenerlo en cuenta si la montamos sobre algún directorio ya existente no vacío, por ejemplo sobre /tmp. De aquí se deduce, que un posible método de ocultación de datos es montar una partición encima de lo que queremos esconder, aunque esto solo nos funcionará con usuarios inexpertos, tenedlo en cuenta.
Le damos los permisos que queramos a nuestra partición, yo usaré:

chmod 775 /tmp/prueba/

Con el comando df -h (diskfree -h humareadble) para ver el dispositivo de loop:

df -h
/dev/loop/carlosloop 100M 33M 68M 33% /tmp/prueba

El archivo /etc/mtab contiene infomación al vuelo de las particiones montadas, si hacemos un cat nos dará:

/dev/loop/carlosloop /tmp reiserfs rw,loop=/dev/loop0 0 0

Vemos que el journalising ocupa 33Megabytes, como ya he dicho, sin embargo de esos una mega es usable por el usuario, por lo que tenemos 68megas eficaces disponibles para el usuario.
Intentaré ahora desbordar el loopback para probar su efectividad, creando para ello un archivo de una mega más de tamaño al disponible (69). Primero me dirijo cd /tmp/prueba/

sudo dd if=/dev/zero of=desbordamiento bs=1k count=$((1024*69))
dd: escribiendo «desbordamiento»: No queda espacio en el dispositivo
69481+0 registros leídos
69480+0 registros escritos
71147520 bytes transferred in 1,292817 seconds (55032935 bytes/sec)

Vemos que escribe un archivo de 68 megabytes, 68 y ni uno más, el dispositivo está lleno, y ya no se podrán grabar nuevos datos.
Si queremos que una partición se conserve si reiniciamos la máquina, tendremos que añadirla a /etc/fstab, añadir en concreto la siguiente línea:

/dev/loop/carlosloop /tmp/prueba reiserfs loop,rw 0 0

Ahora desmontaremos todo el tinglado:

sudo umount /dev/loop/carlosloop
umount: /tmp/prueba: dispositivo ocupado

Como no he salido del dispositivo de loopback, no puede desmontarlo, y me salta el error dispositivo ocupado. Esto es un error muy común, así que tened cuidado de no tener ningún archivo de la partición abierto, y no estar dentro de ella, antes de desmontarla. En casos extremos se podría forcar con el modificador -f.
Lo vuelvo a hacer:

sudo umount /dev/loop/carlosloop

ÚLTIMOS CONSEJOS:
Hemos montado la partición en un directorio de prueba, pero en nuestro entorno tenemos dos opciones, montarla sobre el directorio home que queremos restringir (teniendo en cuenta que no haya nada debajo, recordad), o en otra parte del ordenador, y hacer un enlace simbólico a la partición de loopback.
Por ejemplo, podríamos montar los homes en /tmp/ (lo que significa, que una vez apagado el sistema, los archivos de borrarán y no se podrán recuperar) y hacer:

ln -s /dev/loop/carlosloop /home/carlos/

Ya está todo, explicado un poco por encima, porque el tema daría para mucho que hablar y contar, si no tienes conocimientos previos de montaje o creación de particiones, encontrarás muy buen material sobre el asunto en Internet y diferentes libros. Yo te recomiendo que leas con atención los enlaces:

  1. El blog La Coctelera suidae, que publicó un artículo, que resume las opciones más interesantes de mount -o.
  2. Un pequeño pero práctico manual de referencia para usuarios medios de Linux del equipo Zonasiete. Ideal para principiantes, y para llenar las lagunas que podamos tener sobre diferentes temas del Linux:
    Manual Linux ZonaSiete

Digo esto, porque la ventaja fundamental del particionado del disco, es que las opciones de mount se aplican a las particiones como unidades mínimas, pudiendo poner particiones como no ejecutables, sin bits suid… es decir definir unas políticas de sistema, como todo buen administrador de sistemas debería. Podremos también hacer RAID y LVM sobre ellas.
Espero que con este artículo, te pique el gusanillo, y avances otros temas por tu cuenta. Si os interesa el tema, y queréis que desarrolle algo con mayor profundidad, dejadme un comentario.

Saludos