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.