2005/04/09 Archivos

sábado 09/04/2005 02:14:16

Nuevos drivers de sistema de archivos

Coincidiendo con la última actualización de kernel que he realizado (2.6.10), me he dejado llevar por la euforia y me he puesto a investigar dos drivers nuevos de sistema de archivos: pktcdvd y squasfs.

El primero de ellos permite escribir en paquetes de 2K sobre discos ópticos regrabables, a saber, CD-RW, DVD-RW y DVD+RW. El segundo me interesó por la obvia preocupación de los que estamos acostumbrados a quedarnos, invariablemente, sin espacio en disco; este driver permite mantener un sistema de archivos (eso sí, de sólo lectura) en un dispositivo de bloques o en un fichero comprimido. De este modo podría comprimir selectivamente partes poco usadas, montarlas para lectura y así no desperdiciar tanto espacio.

Grabando directamente en discos +/-RW

Era algo que estaba esperando desde hace tiempo: usar los discos regrabables directamente, borrando y añadiendo a mi antojo, sin preocupación y sin abrir k3b u otros. Primero configuré el núcleo para compliar pktcdvd como módulo y después me bajé las, hasta ahora desconocidas, udftools. En el directorio /usr/src/linux/Documentation/cdrom encontré un simple pero suficiente manual de cómo hacerlo, packet-writing.txt. Allí cuenta que, una vez formateado el disco (los CD-RW con cdrwtool y con dvd+rw-format los DVD+/-RW) hay que ejecutar la órden pktsetup dev_name /dev/cdrom. Sin embargo, me parecía un poco tedioso tener que ejecutar dos órdenes cada vez que quisiese montar el disco para escritura, así que pensé en algún modo de hacerlo todo a la vez. Ahí va mi método:

  • Preparar puntos de montaje distintos para discos grabables y no grabables: en mi caso ya tenía cdrom, así que creé cdram.
  • Preparar la entrada de fstab para un montaje rápido:
    /dev/pktcdvd/cdram0 /mnt/cdram udf noatime,defaults,noauto 0 0
    	
    No hace falta especificar rw, ya que es por defecto, y el noatime está recomendado para minimizar las escrituras.
  • El super-truco: crear (como root) el fichero /sbin/mount.udf con el siguiente contenido:
    #!/bin/sh
    dev=${1/*\/}
    pktsetup $dev /dev/dvd
    mount -i $*
    	


Voilá: según el manual de mount, cuando se monte un disco udf se ejecutará el guión /sbin/mount.udf; este guión preparará el disposivo de bloques cdram0 a partir de /dev/dvd, de modo que mount pueda montarlo según la entrada de fstab anterior. De todos modos el método no es perfecto: si usas DVD+RW, puede que se copien datos, pero el disco no esté finalizado. Efectivamente, la primera vez que lo escribas debes esperar a que se copien todos los datos y, antes de desmontar el disco, para mayor seguridad, ejecutar pktsetup -d cdram0, ya que la finalización del disco puede estar pendiente. Como regla general siempre es bueno hacer ésto antes de desmontarlo.

Comprimiendo directorios selectivamente

Aunque es una pena que squashfs no tenga soporte de escritura, sí que soluciona un problema de espacio, lo que es importante en el caso en que directorio a comprimir no se escribe casi nunca. Después de configurar el núcleo, compilar e instalar el módulo squasfs, me bajé el paquete squashfs-tools, que contiene el necesario mksquasfs. Es muy fácil de usar, pero se explica mejor con un ejemplo:

  • Crear un fichero comprimido: usando mksquasfs especificamos el directorio que queremos comprimir y como destino un nombre de archivo.
    $ mksquasfs mimúsica mimusica.squashfs
    	
  • Cuando termine, renombramos el directorio recién comprimido.
    $ mv mimúsica mimúsica.orig
    	
  • Creamos un directorio vacío, desde donde se montará el nuevo subsistema.
    $ mkdir mimúsica
    	
  • Montamos el fichero comprimido bajo el directorio recién creado:
    $ mount mimusica.squasfs mimúsica -t squasfs -o loop,ro
    	
  • Ahora, por precaución antes de eliminar el directorio original, podemos comparar los contenidos a ver si todo fue bien:
    $ diff -r mimúsica mimúsica.orig
    	
  • Si todo fue bien, ya podemos eliminar el directorio original completamente, ya que lo tenemos comprimido y en línea:
    $ rm -r mimúsica.orig
    	
  • Para que este directorio se monte al arrancar, habrá que incluir la siguiente línea en fstab:
    /home/miscosas/mimusica.squashfs /home/miscosas/mimúsica squasfs auto,defaults,ro 0 0
    	
    Por ejemplo.


Claro que todos estos pasos pueden simplificarse creando un guión para hacerlo todo de un tirón, lo que no supondría demasiada dificultad.

Algo curioso e interesante es que, si bien no es posible remplazar archivos (se añadirían con un número de versión) sí es posible añadir ficheros con mksquasfs y/o directorios al fichero comprimido incluso estando en línea, aunque, claro está, hasta que no se monta de nuevo el sistema no se verán los cambios.

Las pruebas aportadas para la versión 2.1 indican que es más rápido y comprime más que zisofs y cloop, pero pruébalo tú mismo.

Publicado por Roberto Aragón | Enlace permanente | Categorías: GNU/Linux