Manual de Borg Backup
Resumen
Este documento proporciona una guía exhaustiva sobre el uso de Borg Backup, una herramienta de copia de seguridad avanzada que se destaca por su eficiencia y seguridad en la gestión de datos. Este manual abarca todos los aspectos esenciales para implementar y utilizar Borg Backup de manera efectiva, desde la instalación y configuración hasta la gestión avanzada de backups y recuperación de datos. Borg Backup es conocido por su capacidad de deduplicación a nivel de bloque, compresión de datos y cifrado seguro, lo que lo convierte en una solución robusta para la protección de información crítica.
El manual explica detalladamente cómo aprovechar las características clave de Borg Backup, incluyendo la creación de copias de seguridad incrementales y la gestión de snapshots. Se enfoca en cómo establecer políticas de retención utilizando el comando borg prune
, y ofrece estrategias para manejar el espacio de almacenamiento mediante scripts personalizados. Aunque Borg Backup no limita automáticamente el tamaño del repositorio, el manual proporciona directrices sobre cómo implementar soluciones de monitoreo y automatización para gestionar el espacio de manera efectiva.
Además, se aborda el proceso para recuperar archivos específicos desde los snapshots, garantizando que los usuarios puedan restaurar solo los datos necesarios sin afectar el resto de la copia de seguridad. También se tratan consideraciones adicionales para la eliminación de datos obsoletos y la optimización de la gestión de backups, destacando la flexibilidad y adaptabilidad de Borg Backup para diferentes necesidades de protección de datos.
Este manual está diseñado tanto para usuarios nuevos como para aquellos con experiencia en la administración de copias de seguridad, proporcionando una referencia completa y práctica para maximizar el uso de Borg Backup y asegurar la integridad y eficiencia en la gestión de datos.
1. Borg Backup
1.a) Introducción a Borg Backup
Borg Backup es una poderosa herramienta de respaldo (backup) de datos diseñada para realizar copias de seguridad eficientes y seguras, utilizando deduplicación a nivel de bloque. Desarrollada en Python, Borg está optimizada para manejar grandes volúmenes de datos con un enfoque en la eficiencia, la seguridad y la flexibilidad. Este software de código abierto es ideal tanto para usuarios individuales como para organizaciones que necesitan gestionar copias de seguridad de datos críticos de manera efectiva.
1.b) Características Principales
-
Deduplicación Avanzada: Borg Backup utiliza deduplicación a nivel de bloque variable, lo que significa que solo almacena bloques de datos únicos. Esta técnica reduce significativamente el espacio de almacenamiento requerido, ya que los bloques idénticos entre diferentes archivos o versiones de archivos no se almacenan más de una vez. Esto es especialmente útil para realizar copias de seguridad de archivos grandes o repetitivos, optimizando el uso del espacio en el repositorio de backups.
-
Compresión de Datos: Borg admite varios algoritmos de compresión (como
zlib
,lz4
,zstd
, ylzma
), permitiendo a los usuarios elegir el equilibrio adecuado entre velocidad de compresión y ratio de compresión. Esto reduce aún más el tamaño de los backups, ahorrando espacio de almacenamiento y mejorando la eficiencia de la red durante las transferencias de datos. -
Cifrado Seguro: La seguridad es una prioridad clave en Borg Backup. Ofrece cifrado autenticado utilizando AES-256 para proteger los datos almacenados en los repositorios de backup. Con el cifrado activado, los datos de la copia de seguridad están protegidos contra accesos no autorizados, garantizando la confidencialidad e integridad de la información.
-
Compatibilidad con Repositorios Remotos: Borg permite almacenar repositorios de backups tanto localmente como en ubicaciones remotas a través de SSH. Esto facilita la creación de backups seguros y redundantes en servidores externos, ofreciendo mayor flexibilidad para la protección de datos en entornos distribuidos.
-
Recuperación Rápida de Datos: Gracias a su eficiente sistema de deduplicación y a la gestión de backups incrementales, Borg permite recuperar datos de manera rápida y sencilla. Incluso grandes cantidades de datos pueden ser restauradas rápidamente, lo que minimiza el tiempo de inactividad en caso de pérdida de datos.
-
Automatización y Scripting: Borg es compatible con cron jobs y scripts de shell, lo que permite la automatización de las tareas de backup. Esta característica es particularmente útil para configuraciones en las que se requieren copias de seguridad periódicas sin intervención manual.
1.c) Beneficios de Usar Borg Backup
-
Eficiencia en el Uso de Espacio y Red: Gracias a la deduplicación y compresión, Borg minimiza tanto el espacio en disco utilizado como el ancho de banda necesario para transferir datos.
-
Seguridad Robusta: Con cifrado autenticado y un enfoque en la seguridad, Borg garantiza que las copias de seguridad estén protegidas contra accesos no autorizados.
-
Flexibilidad y Escalabilidad: Borg es adecuado tanto para usuarios individuales como para grandes empresas, manejando desde pequeños volúmenes de datos hasta copias de seguridad masivas en entornos de múltiples servidores.
-
Simplicidad y Facilidad de Uso: Aunque Borg ofrece una potente funcionalidad, mantiene una interfaz de línea de comandos intuitiva que facilita su uso tanto a principiantes como a usuarios avanzados.
1.d) No duplica información
Gracias a su avanzado sistema de deduplicación a nivel de bloques, Borg Backup es extremadamente eficiente en el almacenamiento y manejo de archivos duplicados. No es necesario eliminar duplicados manualmente antes de hacer un backup, ya que Borg se encarga de esto automáticamente, lo que ahorra tiempo y reduce el uso de espacio en el repositorio de backups.
Borg Backup utiliza un sistema de deduplicación a nivel de bloque. Esto significa que no solo detecta y elimina archivos duplicados, sino que también identifica y elimina bloques de datos redundantes dentro de archivos distintos. Veamos cómo funciona:
-
División en Bloques: Cuando Borg procesa un archivo para respaldarlo, divide el archivo en bloques más pequeños. El tamaño de estos bloques puede variar, y Borg utiliza un algoritmo que calcula estos bloques de manera que incluso si solo cambia una pequeña parte de un archivo, solo el bloque afectado se identifica como diferente.
-
Hashing de Bloques: Cada bloque es procesado usando una función hash (SHA256 por defecto) que produce un identificador único para el contenido del bloque. Si dos bloques tienen el mismo hash, significa que su contenido es idéntico.
-
Almacenamiento de Bloques Únicos: Borg almacena solo un bloque con un hash determinado. Si otro archivo contiene uno o más bloques con el mismo hash, Borg no almacena esos bloques de nuevo. En su lugar, solo guarda referencias a los bloques ya almacenados.
-
Eficiencia en el Uso de Espacio: Debido a este mecanismo de deduplicación de bloques, si tienes dos archivos diferentes con el mismo contenido, o si tienes el mismo archivo almacenado en múltiples ubicaciones, Borg solo almacenará los bloques una vez. Esto hace que Borg sea extremadamente eficiente en el uso de espacio, especialmente cuando se manejan datos grandes con mucha redundancia, como archivos duplicados, imágenes de discos virtuales, logs, etc.
1.e) Ejemplo de Deduplicación
Supongamos que tienes dos archivos:
-
/home/usuario/archivo1.txt
-
/home/usuario/documentos/archivo2.txt
Ambos archivos tienen el mismo contenido, aunque estén en diferentes ubicaciones o tengan nombres diferentes. Borg:
-
Dividirá ambos archivos en bloques de datos.
-
Calculará los hashes de estos bloques.
-
Detectará que los hashes son idénticos.
-
Solo almacenará un conjunto de bloques y creará referencias para ambos archivos a los mismos bloques.
1.f) Implicaciones para el Backup
-
No Necesitas Eliminar Archivos Duplicados: Debido a que Borg gestiona de manera eficiente los archivos duplicados a través de su deduplicación de bloques, no necesitas utilizar una herramienta adicional para buscar y eliminar duplicados antes de hacer un backup con Borg.
-
Ahorro de Espacio: Incluso si hay una gran cantidad de archivos duplicados en diferentes carpetas o con diferentes nombres, Borg maximizará el uso del espacio disponible en el repositorio, almacenando solo los bloques únicos.
-
Eficiencia en los Backups Incrementales: En los backups incrementales, Borg solo almacena los bloques que han cambiado desde el último backup. Si no ha habido cambios en los bloques de datos, no se vuelven a almacenar.
1.g) Unidades de medida GiB, MiB y Kib
Al ahondar en los detalles técnicos de Borg Backup se encontrará que para la generación de los bloques no se utilizan las medidas Kilobyte (KB), Megabyte (MB) ni Gigabyte (GB) sino kibibyte (KiB), mebibyte (MiB), gibibyte (GiB) que son unas unidades de medida ligeramente diferentes.
La distinción entre MiB y MB es importante cuando se trata de precisión y claridad en la medición de datos:
-
Precisión en Informática: En informática, las memorias y los almacenamientos se basan en potencias de 2 debido a la arquitectura binaria de las computadoras. Por esta razón, es más preciso usar unidades como MiB, GiB, etc., que se basan en potencias de 2, en lugar de MB, GB, etc., que se basan en potencias de 10.
-
Estandarización: El estándar IEC (International Electrotechnical Commission) introdujo los términos para aclarar la diferencia y evitar confusión entre los términos basados en potencias de 10 (KB, MB, GB) y potencias de 2.
Un MiB (mebibyte) es una unidad de medida de información digital que equivale a 2^20 bytes, o 1,048,576 bytes: la potencia de 2 más parecida a 10⁶. Un MiB es igual a 1,024 KiB (kibibytes), y cada KiB es igual a 1,024 bytes. Por lo tanto, 1 MiB = 1,024 KiB * 1,024 bytes/KiB = 1,048,576 bytes.
Un MB (Megabyte) se basa en potencias de 10. Un MB es igual a 1,000 KB (kilobytes), y cada KB es igual a 1,000 bytes. Por lo tanto, 1 MB = 1,000 KB * 1,000 bytes/KB = 1,000,000 bytes.
-
Decimal:
-
KB (Kilobyte): 1 KB = 1,000 bytes = 8,000 bits.
-
MB (Megabyte): 1 MB = 1,000 KB = 1,000,000 bytes = 8,000,000 bits.
-
GB (Gigabyte): 1 GB = 1,000 MB = 1,000,000,000 bytes = 8,000,000,000 bits.
-
-
Binario:
-
KiB (Kibibyte): 1 KiB = 1,024 bytes = 8,192 bits.
-
MiB (Mebibyte): 1 MiB = 1,024 KiB = 1,048,576 bytes = 8,388,608 bits.
-
GiB (Gibibyte): 1 GiB = 1,024 MiB = 1,073,741,824 bytes = 8,589,869,056 bits.
-
2. Manual de uso de borg backup
Para una persona que haya manejado la línea de comandos anteriormente, navegando por carpetas y listando su contenido, utilizar Borg Backup es una labor bastante fácil.
2.a) Instalación de Borg Backup en Diferentes Distribuciones de Linux
Para instalar Borg Backup en diferentes distribuciones de Linux hay que seguir diferentes procedimientos según el estilo de cada una de ellas:
-
Debian/Ubuntu:
sudo apt-get install borgbackup
-
RHEL/CentOS/Fedora (DNF):
sudo dnf install borgbackup
-
Mageia (urpmi): convertirse en superusuario con
su -
y luegourpmi borgbackup
-
Arch Linux (pacman):
sudo pacman -S borg
2.b) Repositorio local
Los comandos a utilizar cuando el almacenamiento se realizará en una carpeta local son los siguientes:
-
Crear un repositorio de Borg con cifrado:
borg init --encryption=repokey /backup/repositorio
-
Crear un backup de una carpeta específica indicando la fecha de realización:
borg create /backup/repositorio::backup-YYYYMMDD /home/usuario/originales
-
Verificar el backup creado:
borg list /backup/repositorio
-
Probar la restauración del backup:
borg extract /backup/repositorio::backup-YYYYMMDD --target /ruta/de/restaura
-
Crear un backup excluyendo una subcarpeta específica
borg create --exclude '/home/usuario/originales/no_sacar_backup' /backup/repositorio::backup-YYYYMMDD /home/usuario/originales
-
Para recuperar un archivo específico de un snapshot se usa el siguiente comando:
borg extract /ruta/al/repositorio::nombre-del-snapshot /home/usuario/originales/ruta_especifica/archivo_especifico.ext
-
/ruta/al/repositorio
: Es la ruta al repositorio de Borg Backup. -
nombre-del-snapshot
: Es el nombre del snapshot que contiene el archivo. -
/home/usuario/originales/ruta_especifica/archivo_especifico.ext
: Es la ruta del archivo que deseas recuperar dentro del snapshot.
-
-
Extraer un archivo a una ubicación diferente a la original: puedes especificar la ruta de destino con el flag
--output
:borg extract --output /ruta/de/destino /ruta/al/repositorio::nombre-del-snapshot /home/usuario/originales/ruta_especifica/archivo_especifico.ext
2.c) Repositorio remoto
Supongamos que queremos realizar un backup de la carpeta /home/usuario/originales
en un equipo remoto con la IP 192.168.1.55
y el usuario backupusr
. Además, queremos excluir la subcarpeta /home/usuario/originales/no_sacar_backup
.
-
Inicializar el Repositorio Remoto (Si No Está Ya Inicializado): Si el repositorio no está inicializado en el equipo remoto, debes hacerlo primero. Este paso solo se hace una vez.
borg init --encryption=repokey ssh://backupusr@192.168.1.55:/ruta/al/repositorio
ssh://backupusr@192.168.1.55:/ruta/al/repositorio
: Indica que el repositorio se encuentra en un servidor remoto al que se accede mediante SSH con la IP 192.168.1.55 y el usuario backupusr.
-
Crear el Backup Excluyendo una Subcarpeta: Para crear un backup de la carpeta
/home/usuario/originales
excluyendo la subcarpeta/home/usuario/originales/no_sacar_backup
, utiliza el siguiente comando:borg create --exclude '/home/usuario/originales/no_sacar_backup' ssh://backupusr@192.168.1.55:/ruta/al/repositorio::backup-$(date +%Y-%m-%d) /home/usuario/originales
Explicación del comando:
-
borg create
: Comando para crear un nuevo archivo de backup. -
--exclude '/home/usuario/originales/no_sacar_backup'
: Excluye la subcarpeta especificada del backup. -
ssh://backupusr@192.168.1.55:/ruta/al/repositorio::backup-$(date +%Y-%m-%d)
: Especifica la ubicación remota del repositorio y el nombre del archivo de backup, que incluye la fecha actual. -
/home/usuario/originales
: Especifica la carpeta que se desea respaldar.
-
-
Verificar el Backup Remoto: Puedes verificar los backups almacenados en el repositorio remoto utilizando el siguiente comando:
borg list ssh://backupusr@192.168.1.55:/ruta/al/repositorio
Este comando listará todos los archivos de backup almacenados en el repositorio remoto.
-
Probar la Restauración de un Backup Remoto: Para restaurar un backup desde el repositorio remoto, utiliza el comando
borg extract
:borg extract ssh://backupusr@192.168.1.55:/ruta/al/repositorio::backup-$(date +%Y-%m-%d) --target /ruta/de/restauracion
--target /ruta/de/restauracion
: Especifica la ruta donde se restaurarán los archivos. Si no se especifica, los archivos se restaurarán en su ubicación original. -
Backup remoto utilizando compresión y excluyendo una carpeta específica:
borg create --compression lz4 --exclude '/ruta/origen/carpeta_a_excluir' usuario@servidor:/ruta/remota/del/repositorio::nombre-del-backup-$(date +%Y-%m-%d-%H-%M-%S) /ruta/archivos/originales
Desglose del Comando
-
borg create
: Comando para crear un nuevo backup. -
--compression lz4
: Opción para especificar el algoritmo de compresión. Puedes reemplazarlz4
con otros métodos de compresión disponibles (zlib
,lzma
,zstd
) según tus necesidades. -
--exclude '/ruta/origen/carpeta_a_excluir'
: Opción para excluir una carpeta específica del backup. Debes proporcionar la ruta relativa o absoluta de la carpeta que quieres excluir. -
usuario@servidor:/ruta/remota/del/repositorio
: Especifica la dirección remota del repositorio al que se realizará el backup. Reemplazausuario
con tu nombre de usuario en el servidor remoto yservidor
con la dirección IP o nombre de host del servidor./ruta/remota/del/repositorio
es la ruta en el servidor remoto donde se almacenará el backup. -
::nombre-del-backup-$(date +%Y-%m-%d-%H-%M-%S)
: Nombre del snapshot que se va a crear. La parte$(date +%Y-%m-%d-%H-%M-%S)
genera una marca de tiempo automática en el nombre del backup, asegurando que cada snapshot tenga un nombre único. -
/ruta/origen
: Ruta de la carpeta o directorio que deseas respaldar.
-
3. Consideraciones a tener en cuenta
3.a) Políticas de retención
Si deseas gestionar el ciclo de vida de tus backups y eliminar versiones antiguas basadas en políticas de retención, utiliza el comando borg prune
. Por ejemplo, para mantener solo las últimas 7 copias de seguridad:
borg prune -d 7 /ruta/al/repositorio
Esto eliminará snapshots antiguos basándose en la política de retención especificada.
3.b) Seguridad del Repositorio y Acceso SSH
Al hacer backups a un repositorio remoto mediante SSH, es fundamental garantizar la seguridad tanto del servidor remoto como del acceso SSH:
-
Acceso SSH Seguro: Asegúrate de que el servidor remoto esté configurado para aceptar solo conexiones SSH seguras. Esto implica:
-
Uso de Claves SSH: En lugar de usar contraseñas, el acceso debe configurarse con claves SSH. Las claves SSH son más seguras que las contraseñas y reducen el riesgo de ataques de fuerza bruta.
Las contraseñas se generan mediante el comando
ssh-keygen
y se transfieren al servidor remoto conssh-copy-id
. -
Restricción de Usuarios: Asegúrate de que solo usuarios autorizados puedan iniciar sesión en el servidor remoto y acceder al repositorio de backups.
-
Configuración de SSH: Configura el servidor SSH para rechazar el acceso root directo
PermitRootLogin no
y para aceptar solo autenticación basada en clavesPasswordAuthentication no
. -
Firewall y Seguridad de Red: Implementa un firewall para restringir el acceso al servidor a solo direcciones IP de confianza o ciertas subredes. Utiliza herramientas como
ufw
(Uncomplicated Firewall) oiptables
para configurar estas reglas.
-
-
Encriptación de Datos en Repositorio: Borg ofrece varios métodos de cifrado para proteger los datos almacenados en el repositorio. Utilizar
--encryption=repokey
--encryption=keyfile
es recomendable para proteger los datos de accesos no autorizados.-
repokey
: La clave de cifrado se guarda en el repositorio. -
keyfile
: La clave de cifrado se guarda en un archivo separado en la máquina local, lo que añade una capa adicional de seguridad. -
Otras opciones de encriptación pueden ser adecuadas para diferentes escenarios:
-
none
: Sin encriptación. -
keyfile
: Utiliza una clave almacenada en un archivo separado. -
repokey-blake2
: Similar a repokey, pero utiliza el algoritmo Blake2 para la encriptación. -
keyfile-blake2
: Similar a keyfile, pero utiliza el algoritmo Blake2 para la encriptación.
-
-
3.c) Redundancia y Versionado de Backups
Borg Backup es extremadamente eficiente en el manejo de datos redundantes y en el almacenamiento de múltiples versiones de archivos:
-
Deduplicación: Borg Backup utiliza deduplicación a nivel de bloques, lo que significa que solo se almacenan los bloques de datos que han cambiado desde el último backup. Esto reduce significativamente el tamaño del almacenamiento requerido y acelera los procesos de backup.
-
Versionado de Backups: Borg permite mantener múltiples versiones de backups en el repositorio. Esto es útil para recuperarse de errores recientes o para acceder a versiones anteriores de archivos que pueden haberse modificado o eliminado accidentalmente.
-
Políticas de Retención: Implementa políticas de retención para gestionar el número de versiones de backups que deseas mantener. Por ejemplo, puedes conservar los backups diarios durante una semana, los semanales durante un mes, y los mensuales durante un año. Borg no ofrece políticas de retención por sí mismo, pero puedes escribir un script o usar herramientas como
borgmatic
opika-backup
para gestionarlo.
3.d) Automatización del Proceso de Backup
Automatizar los backups es crucial para garantizar que los datos se respalden de manera regular sin intervención manual usando cron
o systemd Timer
. Configura un trabajo cron (cron job
) o un temporizador de systemd
para ejecutar los comandos de Borg a intervalos regulares. Esto podría ser diario, semanal, o con la frecuencia que se requiera. Por ejemplo, puedes editar el archivo crontab usando el comando: crontab -e
y agregar una línea como:
0 2 * * * /ruta/al/script-de-backup.sh
Esto ejecutará el script de backup todos los días a las 2:00 AM.
3.e) Notificaciones
Configura tu script para que envíe una notificación por correo electrónico después de completar un backup, ya sea exitoso o fallido. Esto te ayuda a monitorear automáticamente el estado de tus backups. O genera un archivo de bitácora y agrega un renglón con la fecha, hora y estado exitoso o fallido cada vez que se ejecute borg.
3.f) Pruebas de Restauración Regular
Realizar pruebas periódicas de restauración de backups es esencial para garantizar que puedes recuperar los datos cuando sea necesario:
3.g) Verificación de Integridad de Backups
Borg ofrece el comando borg check
que verifica la integridad de los datos en el repositorio. Ejecuta este comando regularmente para asegurarte de que los datos en el repositorio no se han corrompido.
3.h) Pruebas de Restauración Programadas
Periódicamente, realiza una restauración completa de los backups en un entorno de prueba para asegurarte de que los datos son recuperables y que el proceso de restauración funciona como se espera.
-
Monitoreo y Alertas
Implementa monitoreo y alertas para asegurarte de que siempre estés al tanto del estado de tus backups:
-
Logs y Alertas: Configura logs detallados de los procesos de backup y restaura, y utiliza herramientas de monitoreo como
Nagios
,Prometheus
oZabbix
para crear alertas si algo sale mal. -
Espacio en Disco: Monitorea el espacio disponible en el servidor donde se almacena el repositorio de backups. Asegúrate de tener suficiente espacio para acomodar múltiples versiones de backups.
-
Consideraciones de Ancho de Banda y Rendimiento
Al realizar backups a través de la red, considera el impacto en el ancho de banda y el rendimiento:
-
Compresión de Datos: Utiliza las opciones de compresión de Borg (
--compression
zlib, lz4, lzma
) para reducir la cantidad de datos que se transfieren a través de la red. -
Programación de Backups en Horas de Baja Actividad: Programa los backups durante horas de baja actividad para minimizar el impacto en el rendimiento de la red.
4. Limitaciones
4.a) No puede eliminar archivos o carpetas individuales
Borg no ofrece una manera directa de eliminar archivos o carpetas individuales que se encuentren almacenadas dentro de un snapshot. La práctica común es restaurar los datos, eliminar los archivos o carpetas no deseados y generar un nuevo repositorio.
Supongamos que quieres eliminar la carpeta /home/usuario/originales/carpeta_no_deseada
de un repositorio llamado /mnt/backup
y el snapshot que contiene la carpeta no deseada se llama old-backup
.
-
Primero, crea un nuevo snapshot excluyendo la carpeta:
borg create /mnt/backup::new-backup /home/usuario/originales --exclude '/home/usuario/originales/carpeta_no_deseada'
-
Luego, elimina el snapshot antiguo o todos los que contengan la carpeta a excluir:
borg delete /mnt/backup::old-backup
4.b) No puede manejar cuotas de disco
Borg no ofrece directamente una funcionalidad para establecer que el tamaño total del repositorio esté limitado por una cuota fija. Es decir, no se puede indicar que al llegar a un límite de 100 GB borg, de forma automática, elimine los snapshot más antiguos.
5. Conclusión
Borg Backup es una solución de respaldo de datos moderna y eficiente, ideal para usuarios y organizaciones que buscan una herramienta de backup que combine eficiencia, seguridad, y flexibilidad. Este manual proporciona una guía completa sobre cómo instalar, configurar y utilizar Borg Backup, además de cubrir las mejores prácticas para garantizar que tus datos estén siempre protegidos y fácilmente recuperables.
Licencia
Manual de Borg Backup está bajo una licencia de Creative Commons Reconocimiento-CompartirIgual 4.0 Internacional.
Ricardo Naranjo Faccini
Desarrollador WWWNació en Barranquilla, Atl, Colombia el 14 de enero de 1971
- Magíster en Ingeniería de Sistemas y Computación de la Universidad de Los Andes 1998
- Ingeniero Civil de la Universidad de Los Andes 1995
- Diplomado en docencia en Ingeniería de la Pontificia Universidad Javeriana 2008
- Gerente de la firma Skina IT Solutions, su gestión ha llevado a la empresa al nivel de exportación de software. Experto en calidad en el desarrollo de software con énfasis en el uso de herramientas libres orientadas hacia WWW.
- CTO de AuthorsGlobe, empresa participante en el MIT 100K, elegida como parte del "TOP 10" entre 300 proyectos presentados en este concurso del Massachussets Institute of Technology MIT.
- Durante el periodo 2004-2005 se desempeñó como Gerente de desarrollo de negocios NOVELL en Nexsys de Colombia.
- Ejerce docencia como catedrático en la Universidad Javeriana, al igual que lo ha realizado en la Universidad de Los Andes, Universidad de Manizales y Universidad autónoma de Bucaramanga.
- Comprometido con la divulgación del software libre y su aplicación en Colombia, ha dictado más de 60 conferencias en todo el país, co-fundador de LinuxCol, la primera comunidad de usuarios de Linux en Colombia.
- Colaborador del grupo ACIS-Linux.