ยฟ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.
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
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
- 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
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
- Squashfs wikipedia
- Man mksquashfs
- Man unsquashfs
- iso 9960 wikipedia
- UDF wikipedia
- VFS wikipedia
- Loop wikipedia
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 ๐
Interesante a probar lo de squashfs
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.
Muy bueno saber, gracias por tl Tip.
Siempre se aprende algo nuevo. ยกExcelente!
Es curioso, conocรญa squashfs y para lo que sirve, pero nunca se me habรญa ocurrido comprimir mis imagenes. Gracias por el tip.
Impresionante, a probarlo a ver que onda.Muy buen tip
excelente tuto!!! =) …muy buen tip!!!
Hola roader. Muy interesante el artรญculo, gracias por compartir.
en Gentoo se necesita activar el soporte para SquashFS en el kernel antes de compilarlo, lo probarรฉ a ver que tal funciona. Gracias.
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