Tutorial: Sistemas de archivos Loop

¿Que es un sistema de archivos loop?

Gnu/Linux (y la gran mayoría de sistemas unix) dispone de un mecanismo que permite montar un fichero (previamente formateado) como si fuese un disco duro, normalmente sin tabla de particiones. Este cutre diagrama (hecho por mi) explica el funcionamiento de dicho mecanismo.

Diagrama de flujo que explica (grosso modo) el funcionamiento de los archivos loops en GNU/linux.

**No representa al completo el funcionamiento real.

Usos de los archivos loop

1- Montar archivos.iso

Los archivos.iso, el estándar por antonomasia en CDs y DVDs no es mas que un archivo loop cuyo sistema de archivos puede ser ISO 9960 (mas común en CDs) o UDF (mas común en DVDs). Para montarlo, haremos uso del comando mount.

mkdir iso #creamos el directorio
chmod -R 666 iso #concedemos a todos los usuarios permiso de lectura
mount imagen.iso iso/ # montamos la imagen iso (requiere root)

La limitación que tiene es que, por motivos obvios, ambos sistemas de archivos son de solo lectura.

2- Squashfs de solo lectura

Supongamos que tenemos una carpeta de imágenes y/o vídeos que esta organizada según el año en que se sacó. Obviamente, es bastante improbable que queramos modificar los datos contenidos en carpetas de años anteriores. Ahí es donde entra en juego Squashfs. Squashfs es un sistema de archivos comprimido de solo lectura, por lo que una vez hecha la imagen, no podremos modificar los datos dentro.

Así, no solo ahorraremos cantidades enormes de espacio, sino que también ocurrirá el curioso efecto de que la lectura de los archivos sera mas rápida, al tener que leer archivos mas pequeños, dado que hoy en día descomprimir un archivo es un esfuerzo mínimo para la mayoría de CPUs.

Dejando los preámbulos, para crear la imagen squashfs debemos usar el comando mksquashfs, cuya sintaxis es simple :

mksquashfs directorio 1 [directorio 2 directorio 3...] imagen.sqsfs -comp [algoritmo de compresión] -b [tamaño del bloque ]

Y aquí un ejemplo práctico :

mksquashfs fotos-2009 fotos-2010 fotos-2011 fotos-2012 fotos-2013 fotos_2009-2013.sqsfs -comp xz -bs 1M

Bien, el algoritmo elegido es xz dado que es el que mayor ratio de compresión ofrece (de los disponibles), mientras que el tamaño de bloque elegido es el máximo. lo que permite obtener mejores resultados de compresión (por defecto son 64KiB).

Ahora deberíamos poder montarlo con un simple ;

mount fotos_2009-2013.sqsfs fotos_2009-2013/

Tras comprobar que todo esta correcto podemos borrar los archivos originales o dejar el archivo como backup.

En caso de que queramos que se monte al arrancar el SO debemos añadir a la /etc/fstab una linea de este estilo :

/dir/loop.sqsh /dir/mountdir squashfs ro,defaults 0 0

Introducir datos incorrectos en el archivo /etc/fstab hará que el sistema deje de arrancar. Para asegurarnos de que todo funciona correctamente, podemos usar el comando mount -a

Ahora bien, ¿Que ocurre cuando queremos añadir o borrar archivos, o simplemente extraer estas snapshots? Pues que tenemos el comando el comando unsquashfs.

unsquashfs [opciones] snapshot.sqfs [Directorios o archivos que extraer]

Por defecto usara como directorio de extracción «squashfs-root». se puede cambiar con la opción -d

Aparte de este ejemplo, squashfs también es utilizado en :

  • Livecds
  • Sistemas embebidos
  • Servidores
  • En general, cualquier sistema de solo-lectura

3-«Swap de emergencia»

Imagina que por el motivo que sea (hibernación, compilaciones masivas… ) necesitas un extra de swap. Aquí es donde entra en juego el archivo loop, el primer paso consiste en hacer un archivo vacío de un tamaño determinado, con un tamaño de bloque determinado, esto lo hacemos con el comando dd :

dd if=/dev/zero of=loop bs=1M count=512

dd en las manos equivocadas es peor que un mono con una escopeta. Piensa antes de apretar enter

En este caso, el bloque es de un MiB y el tamaño del archivo son 512MiB. No tiene por que ser así.

Creamos y activamos la swap con este comando

mkswap loop && swapon loop

Ten en cuenta que el rendimiento de un archivo loop siempre es algo inferior al de uno físico real.

4-Haz lo que quieras

Estos solo son algunos de los ejemplos mas característicos, siéntete libre de experimentar con chroots, sistemas cifrados, sistemas loops anidados… Sus posibilidades son ilimitadas. Pero, cuidado con los comandos que ejecutas, piensa bien antes de presionar enter.

Links de interés


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   illukki dijo

    Buen post che!! Tengo unos backups gigantes por ahi y nunca se me ocurrio comprimirlos. Voy a usar esto y de paso encripto mi externo que lo llene y despues me acorde que lo iba a encriptar 🙁

  2.   sieg84 dijo

    Interesante a probar lo de squashfs

  3.   Manuel R dijo

    Buen tutorial, había leído como crear ficheros img con dd y montarlos, pero desconocía el uso de Squashfs y su compresión; aunque no permite modificar su contenido, su uso puede ser útil en situaciones como las que comentas. Gracias por compartir, saludos.

  4.   demo dijo

    Muy bueno saber, gracias por tl Tip.

  5.   Joaquin dijo

    Siempre se aprende algo nuevo. ¡Excelente!

  6.   notfrombrooklyn dijo

    Es curioso, conocía squashfs y para lo que sirve, pero nunca se me había ocurrido comprimir mis imagenes. Gracias por el tip.

  7.   HO2Gi dijo

    Impresionante, a probarlo a ver que onda.Muy buen tip

  8.   Robert dijo

    excelente tuto!!! =) …muy buen tip!!!

  9.   Phorious dijo

    Hola roader. Muy interesante el artículo, gracias por compartir.

  10.   Essaú dijo

    en Gentoo se necesita activar el soporte para SquashFS en el kernel antes de compilarlo, lo probaré a ver que tal funciona. Gracias.

    1.    Essaú dijo

      probado en Gentoo compilando el kernel para ello y excelente.
      Tan sólo corregir una pequeña errata, roader.

      En el ejemplo:

      mksquashfs fotos-2009 fotos-2010 fotos-2011 fotos-2012 fotos-2013 fotos_2009-2013.sqsfs -comp xz -bs 1M

      sobra la s de «-bs» (lo que determina el tamaño del bloque), debe quedar así:

      mksquashfs fotos-2009 fotos-2010 fotos-2011 fotos-2012 fotos-2013 fotos_2009-2013.sqsfs -comp xz -b 1M