Papelera de reciclaje con Samba
La papelera de reciclaje es una de esas cosas a las que uno se acostumbra facilmente por su sencillez y utilidad. Seguro que a todos nos ha pasado alguna vez eso de borrar un documento y darnos cuenta al rato de que hemos borrado la versión equivocada. Antiguamente en DOS existía el comando undelete, y aún hoy tanto en Windows como en Linux, existen herramientas que permiten recuperar archivos directamente de disco, pero ninguna de estas herramientas tienen la sencillez de uso de la papelera de reciclaje.
Cuando trabajas en un entorno de red y pasas toda la información a una ubicación de un servidor, esta funcionalidad ya no está disponible. La papelera de reciclaje no funciona con unidades de red en Windows o ubicaciones montadas con Samba en Linux, ya que únicamente permite almacenar información local. Sin embargo es posible configurar Samba para que cree algo parecido a una papelera de reciclaje en cada unidad compartida.
La configuración de esta característica es sencilla y se basa en la utilización de los módulos Virtual File System (VFS) de Samba 3. Uno de estos módulos es recycle
. Este módulo intercepta las peticiones de borrado de archivos y los mueve a otro directorio en vez de borrarlos. Este directorio sin embargo no aparecerá en la papelera de nuestro equipo, siendo necesario acceder a la carpeta directamente. Por el contrario nos ofrece bastantes características de configuración que permiten crear un sistema bastante más potente.
Para su configuración el primer paso consiste en crear el archivo /etc/samba/recycle.conf
que será utilizado como configuración por defecto de la papelera, con el siguiente contenido:
name = .recycle mode = KEEP_DIRECTORIES|VERSIONS|TOUCH maxsize = 0 exclude = *.tmp|*.TMP|*.temp|*.o|*.obj|~$*|*.~??|*.log|*.trace excludedir = /tmp|/temp|/cache noversions = *.doc|*.ppt|*.dat|*.ini directory_mode = 0700 |
En él se indica que el nombre del repositorio es «.recycle», donde se moverán los archivos eliminados. La línea con nombre mode
indica que se cree una estructura de directorios equivalente a la de los archivos que se eliminen, que se generen versiones de un archivo si se eliminan dos archivos con el mismo nombre, y que se actualice la fecha de acceso a los archivos al moverlos a la papelera. Aparte se indican un conjunto de extensiones de archivos y carpetas que no se moveran a la papelera, y un conjunto de extensiones para las que no generar versiones.
Tras esto es necesario configurar los repositorios exportados por Samba para hacer uso de la papelera configurada. Para ello editaremos el archivo /etc/samba/smb.conf
añadiendo algo como:
[Datos] ... vfs object = recycle recycle:config-file = /etc/samba/recycle.conf recycle:repository = .recycle recycle:keeptree = Yes recycle:versions = Yes |
En estas líneas se muestra como se configura la unidad compartida de nombre «Datos» para hacer uso del módulo VFS recycle y se le indica utilizar el archivo recycle.conf creado en el paso anterior. Es posible sobreescribir cualquier parámetro configurado en recycle.conf.
Finalmente es necesario reiniciar el servicio con sudo /etc/init.d/samba restart
, tras lo cual ya podemos borrar cualquier archivo y ver cómo se mueve automáticamente a la carpeta .recycle de la raíz de la unidad.
El único problema que tiene este sistema es que fácilmente podemos llegar a generar gran cantidad de archivos y versiones en las carpetas de papelera, para lo cual puede ser conveniente configurar un trabajo periódico que elimine todos los archivos que hayan sido accedidos por última vez en un número de días determinado, cosa que podemos hacer fácilmente mediante crontab y el uso de find. Por ejemplo:
56 06 * * * find /home/shares/.recycle -atime +7 -type f -exec rm {} \\; |
Muy buen aporte! Estamos aún «jugando» con las posibilidades de Samba y esto nos a venido de perlas.
Primeramente agradecer tu aporte se ve muy interesante, solo te pido de favor, podrías decirme a donde se van los archivos que se eliminan? te agradezco de antemano tu apoyo.
Hola Joster, perdona que responda tu pregunta, los datos eliminados de van al directorio oculto (.) recicler, el punto antes del nombre oculta el directorio, podrias tambien hacer esto:
«recicle:repository = Papeleda_de_reciclaje»
sin el punto antes del nombre y se creara la carpeta sin estar oculta.
Genial aporte!! Funciona OK, como trompada de mandril!
Edfectivamente, genial.
Solamente una pregunta, yo en samba comparto carpetas de diferentes niveles jerarquicos, ¿debo repetir las opciones de la papelera en cada carpeta compartida? o seria suficiente confiurar sl parrafo del smb.conf donde comparto la carpeta con mas alto nivel?