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.

      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 ๐Ÿ™

      sieg84 dijo

    Interesante a probar lo de squashfs

      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.

      demo dijo

    Muy bueno saber, gracias por tl Tip.

      Joaquin dijo

    Siempre se aprende algo nuevo. ยกExcelente!

      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.

      HO2Gi dijo

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

      Robert dijo

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

      Phorious dijo

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

      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.

         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