12 de julio de 2007

Trucos ext

Ext3 no es el mejor sistema de archivos del mundo ni el más rápido -aunque a día de hoy ext4 ya está en par con XFS en los benchmarks- pero su sistema de journaling es flexible, y curioso.

Con la herramienta chattr se puede acceder a una serie de funciones poco conocidas (lsattr para visualizarlos) y aun menos utilizadas por aplicaciones, pero existentes:

  • chattr +A archivo: Desactiva la actualización del tiempo de acceso (atime) para un solo archivo. Sin tener que desactivarlo para todo el sistema de archivos.

  • chattr +a archivo: Hace que ese archivo solamente se pueda abrir para añadir datos, quien intente reescribirlo o borrar algo, no podrá.

  • chattr +c archivo: Comprime el archivo. Desgraciadamente, el soporte de compresión de ext3 no existe, asi que esto no hará nada. La compresión en ext se implementó hace mucho tiempo, pero se mantiene como parches externos. Los ultimos avances que trae la infraestructura de ecryptfs - una especie de plugins a lo reiser4, pero bien hecho - podría hacer que esta función se incluyera finalmente algún día.

  • chattr + i archivo: El archivo es totalmente inmutable: No se puede escribir datos, ni añadirles, ni borrar el archivo. Nada. No deja hacer nada sobre el archivo, excepto utilizar chattr -i para quitarle el modo inmutable.

  • chattr +j archivo: Hace que los datos del archivo se escriban a journaling y que el journaling mantenga su integridad cuando el modo de journaling es data=writeback o data=ordered (el que se utiliza por defecto). Quizás alguno piense: ¿pero no se supone que el journaling ya hace eso? No, no hace eso. El journaling consiste en escribir al disco los cambios que se van a hacer a los metadatos, no tiene en cuenta para nada los datos - excepto el modo data=ordered, que intenta mantener la coherencia datos/metadatos, aunque no escribe los datos al journaling. Es un tema más complicado de lo que parece.

  • chattr +S archivo: Todas las modificaciones a ese archivo se hacen de modo síncrono: Cuando un archivo hace write(), la llamada no retorna hasta que se han escrito los datos en el disco. Es como cuanto montas todo el sistema de archivos en modo síncrono, pero aplicado a un solo archivo.

  • chattr +D directorio: Idem que lo anterior, pero aplicado a un directorio, y a todos los archivos que contiene. No sé si tambien se aplica recursivamente a los subdirectorios.

  • chattr +u archivo: Permite que cuando un archivo sea borrado se guarden sus datos y el archivo se pueda recuperar posteriormente, pero en realidad no está implementado :P.

  • chattr +s archivo: Cuando un archivo es borrado, se escriben ceros en sus bloques. Tampoco ha sido implementado.


Más información en man chattr

1 comentario:

  1. Anónimo2:18 a. m.

    Oh excelente información, andaba buscado algo para hacer esas funciones.

    Excelente.

    ResponderEliminar