Introducción
Quisiera poder decir que solamente he perdido información una vez en mi vida, pero la realidad es que han sido varias. Desde que deja de funcionar un disco duro, hasta que accidentalmente borré archivos importantes. Estas experiencias me han enseñado la importancia de tener un entorno de trabajo portátil y seguro, porque uno nunca sabe cuándo puede necesitar acceder a sus archivos desde otro lugar.

La última vez que me pasó fue particularmente dolorosa. Estaba trabajando en un proyecto importante cuando mi SSD decidió que era un buen momento para jubilarse (por que su generacion si puede) anticipadamente. Sin previo aviso, sin carta de despedida, simplemente dejó de funcionar.
Fue en ese momento que me di cuenta de que mi último backup completo tenía dos semanas de antigüedad. Dos semanas que parecían dos años cuando te das cuenta de todo lo que puedes perder. Después de llorar un poco y aceptar mi destino, decidí que nunca más me volvería a pasar.
Y no, no me refiero a hacer backups ocasionales cuando me acuerde, me refiero a automatizar completamente el proceso para que ni siquiera tenga que pensar en ello. Porque seamos honestos, si algo depende de que yo me acuerde de hacerlo manualmente, eventualmente lo voy a olvidar.
El problema del nómada moderno
Cuando hablamos de ser un "nómada digital", no me refiero únicamente a esas personas que trabajan desde playas paradisíacas con una laptop y una piña colada. Me refiero a cualquiera que necesite tener su entorno de trabajo disponible en múltiples lugares: tu casa, el trabajo, la universidad, o ese café con WiFi decente.
El verdadero desafío no es solo tener los archivos disponibles, sino tener TODO tu entorno de trabajo: configuraciones, scripts, proyectos, documentos, ese wallpaper que te costó 30 minutos encontrar, etc. Y además, necesitas que esté sincronizado, actualizado y accesible desde cualquier lugar.
Ya he hablado antes sobre la gestión de dotfiles en otro artículo, así que hoy me voy a enfocar en algo igual de importante: mantener un backup completo y automático de tu directorio home.
La solución
Después de probar varias soluciones, me decidí por una combinación que me ha funcionado perfectamente: rclone para la sincronización y Mega.nz como almacenamiento en la nube.
Por qué rclone
rclone es como el rsync de los servicios en la nube. Es una herramienta de línea de comandos que te permite sincronizar archivos con más de 40 proveedores de almacenamiento en la nube diferentes. Es rápido, eficiente, open source y lo mejor de todo: se puede automatizar completamente.
Algunas de las razones por las que me encanta rclone:
- Versatilidad: Soporta casi cualquier servicio de almacenamiento en la nube que se te ocurra
- Sincronización inteligente: Solo transfiere los archivos que han cambiado
- Configuración de exclusiones: Puedes excluir fácilmente carpetas que no necesitas respaldar
- Encriptación: Soporta encriptación del lado del cliente si te preocupa la privacidad
- Velocidad: Puede paralelizar las transferencias para máxima velocidad
Por qué Mega.nz
Mega.nz ofrece 20GB gratuitos de almacenamiento, con encriptación de extremo a extremo. Si bien es cierto que Google Drive ofrece 15GB y ya tengo un artículo sobre cómo hacer backups allá, decidí usar Mega para este propósito por varias razones:
- Más espacio gratuito: 20GB vs 15GB de Google Drive
- Privacidad: Mega tiene encriptación de extremo a extremo por defecto
- Diversificación: No poner todos los huevos en la misma canasta
- Mejor rendimiento con rclone: En mi experiencia, las transferencias son más rápidas
Script
Después de varios intentos y ajustes, terminé con un script que hace exactamente lo que necesito. Lo llamé creativamente cloudBackup porque como ya sabrás, no soy muy bueno poniendo nombres.
El script está ubicado en /usr/local/bin/cloudBackup.sh para que pueda ejecutarse desde cualquier lugar del sistema.
#!/bin/bash
set -euo pipefail
# Configuration
readonly VERSION="2.0.2"
readonly SOURCE="/home/neandertech"
DEST="mega:backup-home"
readonly EXCLUDE_FILE="${HOME}/.rclone-exclude"
LOG_DIR="${HOME}/.local/log/cloudBackup"
LOG_FILE="${LOG_DIR}/backup-$(date +%Y%m%d-%H%M%S).log"
# Color codes for terminal output
readonly COLOR_GREEN='\033[0;32m'
readonly COLOR_BLUE='\033[0;34m'
readonly COLOR_RED='\033[0;31m'
readonly COLOR_RESET='\033[0m'
# Initialize log directory
mkdir -p "${LOG_DIR}"
log_info() {
echo -e "${COLOR_BLUE}[INFO]${COLOR_RESET} ${*}"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [INFO] ${*}" >> "${LOG_FILE}"
}
log_success() {
echo -e "${COLOR_GREEN}[SUCCESS]${COLOR_RESET} ${*}"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [SUCCESS] ${*}" >> "${LOG_FILE}"
}
log_error() {
echo -e "${COLOR_RED}[ERROR]${COLOR_RESET} ${*}" >&2
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [ERROR] ${*}" >> "${LOG_FILE}"
}
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case $1 in
-r|--remote)
DEST="$2"
shift 2
;;
*)
echo "Unknown option: $1" >&2
exit 1
;;
esac
done
# Create exclusion file if it doesn't exist
if [ ! -f "${EXCLUDE_FILE}" ]; then
log_info "Creating exclusion file: ${EXCLUDE_FILE}"
cat > "${EXCLUDE_FILE}" << 'EOF'
.cache/**
.local/share/Trash/**
node_modules/**
.npm/**
.mozilla/firefox/*/Cache/**
.config/Code/Cache/**
*.tmp
*.log
.thumbnails/**
venv/**
__pycache__/**
EOF
fi
log_info "Backup started at $(date '+%Y-%m-%d %H:%M:%S')"
log_info "Source: ${SOURCE}"
log_info "Destination: ${DEST}"
# Perform backup
rclone sync "${SOURCE}" "${DEST}" \
--exclude-from="${EXCLUDE_FILE}" \
--fast-list \
--transfers=8 \
--checkers=16 \
--buffer-size=64M \
--timeout=300s \
--retries=3 \
--progress \
--stats=30s \
--stats-one-line \
--log-level=INFO \
--log-file="${LOG_FILE}"
if [ $? -eq 0 ]; then
log_success "Backup completed successfully"
log_info "Finished at $(date '+%Y-%m-%d %H:%M:%S')"
log_info "Log file: ${LOG_FILE}"
# Show storage statistics
log_info "Storage statistics:"
rclone about "${DEST}"
else
log_error "Backup failed"
log_error "Check full log at: ${LOG_FILE}"
exit 1
fi
Este script es una versión mejorada de mi post anterior sobre backups a Google Drive. Aquí están las mejoras clave:
- Añadido soporte multi-remote (puedes usarlo con Mega, Google Drive, Dropbox, etc.)
- Mejores prácticas de bash con
set -euo pipefail - Sistema de logging profesional con archivos timestamped
- Parámetros de rclone optimizados para mejor rendimiento
- Manejo robusto de errores
Desglose del script
Déjame explicarte las partes importantes del script:
1. Configuración inicial
set -euo pipefail
Esta línea hace que el script sea más robusto:
set -e: Sale inmediatamente si cualquier comando fallaset -u: Trata las variables no definidas como errorset -o pipefail: Los pipes fallan si cualquier comando en ellos falla
Esto nos permite detectar errores temprano y evitar comportamientos inesperados. Me gusta pensarlo como el try-catch de los scripts bash, al menos en la parte de "catch", lo que a su vez nos permite tener un logging más limpio y eficaz.

2. Variables
readonly VERSION="2.0.2"
readonly SOURCE="/home/neandertech"
DEST="mega:backup-home"
readonly EXCLUDE_FILE="${HOME}/.rclone-exclude"
LOG_DIR="${HOME}/.local/log/cloudBackup"
LOG_FILE="${LOG_DIR}/backup-$(date +%Y%m%d-%H%M%S).log"
- SOURCE: Tu directorio home completo
- DEST: El destino, configurable con
-rpara cambiar de remote - EXCLUDE_FILE: Archivo con las carpetas y archivos a excluir
- LOG_DIR: Directorio de logs con fallback al home del usuario
- LOG_FILE: Archivo de log único por cada ejecución con timestamp
3. Logging
El script usa funciones dedicadas para logging que escriben tanto en la terminal (con colores) como en el archivo de log. Esto facilita el debugging y el monitoreo.

4. Multi-remote
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case $1 in
-r|--remote)
DEST="$2"
shift 2
;;
esac
done
Ahora puedes especificar diferentes remotes:
cloudBackup.sh -r gdrive:backups
cloudBackup.sh -r dropbox:backup-home
5. Comando rclone sync
rclone sync "${SOURCE}" "${DEST}" \
--exclude-from="${EXCLUDE_FILE}" \
--fast-list \
--transfers=8 \
--checkers=16 \
--buffer-size=64M \
--timeout=300s \
--retries=3 \
--progress \
--stats=30s \
--stats-one-line \
--log-level=INFO \
--log-file="${LOG_FILE}"
Aquí está la magia. Déjame explicar cada flag:
- sync: Hace que el destino sea idéntico al origen
- --exclude-from: Lee las exclusiones desde un archivo
- --fast-list: Usa listado rápido para mejor rendimiento
- --transfers 8: Transfiere 8 archivos simultáneamente (más rápido)
- --checkers 16: Verifica 16 archivos simultáneamente
- --buffer-size 64M: Buffer más grande para mejores transferencias
- --timeout 300s: Timeout de 5 minutos para operaciones
- --retries 3: Reintenta hasta 3 veces en caso de fallo
- --progress: Muestra el progreso en tiempo real
- --stats 30s: Muestra estadísticas cada 30 segundos
- --stats-one-line: Estadísticas en una sola línea
- --log-level INFO: Nivel de detalle informativo
- --log-file: Guarda todo en un archivo de log
6. Verificación
El script verifica si la operación fue exitosa usando funciones de logging profesionales. También muestra el espacio usado en el remote para que sepas cuánto almacenamiento te queda.
Exclusiones
Una parte fundamental del backup es saber qué NO respaldar. No tiene sentido llenar tu espacio en la nube con cachés, archivos temporales o node_modules que pesan gigas.
Por que si, todos hemos pasado por esto:

Mi archivo .rclone-exclude se ve así:
.cache/**
.local/share/Trash/**
node_modules/**
.npm/**
.mozilla/firefox/*/Cache/**
.config/Code/Cache/**
.config/Code/CachedData/**
*.tmp
*.log
.thumbnails/**
venv/**
__pycache__/**
Qué excluir
- .cache/**: Cachés del sistema que se pueden regenerar
- .local/share/Trash/**: Tu papelera, no necesitas respaldar basura
- node_modules/**: Si trabajas con Node.js, sabes que esto puede ocupar gigas y se puede reinstalar con
npm install - .npm/**: Caché de npm
- Cachés de navegadores: Se regeneran automáticamente
- venv/**: Entornos virtuales de Python que se pueden recrear
- __pycache__/**: Archivos compilados de Python que se regeneran automáticamente
Usamos el patrón ** para excluir recursivamente todas las subcarpetas. Esto es más eficiente que solo /.
No excluyas carpetas sin pensarlo dos veces. Asegúrate de que realmente puedas recrear o no necesites esos archivos.
Configuración
Ahora viene la parte práctica. Te voy a mostrar cómo configurar todo desde cero.
1. Instalar rclone
En la mayoría de distribuciones Linux, rclone está en los repositorios:
# Debian/Ubuntu
sudo apt install rclone
# Arch Linux
sudo pacman -S rclone
# Fedora
sudo dnf install rclone
También puedes instalarlo con el script oficial:
curl https://rclone.org/install.sh | sudo bash
2. Configurar Mega.nz
Ejecuta el asistente de configuración:
rclone config
El asistente te guiará paso a paso:
- Selecciona
npara crear un nuevo remote - Dale un nombre, por ejemplo
mega - Selecciona el número correspondiente a Mega
- Ingresa tu usuario y contraseña de Mega
- Deja las opciones avanzadas por defecto (solo presiona Enter)
- Confirma la configuración
Necesitas tener una cuenta en Mega.nz. Si no la tienes, crea una en mega.nz o en el servicio que prefieras usar.
3. Archivo de exclusiones
nvim ~/.rclone-exclude
Copia el contenido que te mostré anteriormente y ajústalo a tus necesidades.
4. Script de backup
sudo nvim /usr/local/bin/cloudBackup.sh
Copia el script completo, ajusta las rutas según tu usuario y guarda.
Dale permisos de ejecución:
sudo chmod +x /usr/local/bin/cloudBackup.sh
5. Probar el script
Antes de automatizarlo, pruébalo manualmente:
sudo cloudBackup.sh
La primera ejecución tomará tiempo porque tiene que subir todo. Las siguientes serán mucho más rápidas porque solo subirá los cambios.
Automatización
Aquí es donde la magia realmente sucede. Vamos a automatizar el backup para que se ejecute sin que tengamos que acordarnos.
Opción 1: Cron
Edita el crontab:
sudo crontab -e
Agrega una línea para ejecutar el backup. Por ejemplo, todos los días a las 2 AM:
0 2 * * * /usr/local/bin/cloudBackup.sh >> /var/log/cloudBackup-cron.log 2>&1
O cada 6 horas:
0 */6 * * * /usr/local/bin/cloudBackup.sh >> /var/log/cloudBackup-cron.log 2>&1
Opción 2: Systemd timer
Si prefieres systemd (como yo), puedes crear un timer:
Crea el servicio en /etc/systemd/system/cloudBackup.service:
[Unit]
Description=Backup home directory to Mega.nz
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/cloudBackup.sh
User=root
[Install]
WantedBy=multi-user.target
Crea el timer en /etc/systemd/system/cloudBackup.timer:
[Unit]
Description=Run backup to Mega.nz daily
Requires=cloudBackup.service
[Timer]
OnCalendar=daily
OnBootSec=15min
Persistent=true
[Install]
WantedBy=timers.target
Activa y habilita el timer:
sudo systemctl daemon-reload
sudo systemctl enable cloudBackup.timer
sudo systemctl start cloudBackup.timer
Verifica que esté activo:
sudo systemctl list-timers
Recuperación
De nada sirve tener backups si no sabes cómo recuperar tus archivos. Con rclone es muy sencillo.
Recuperar todo
rclone sync mega:backup-home /home/usuario --progress
Recuperar archivo específico
rclone copy mega:backup-home/ruta/al/archivo.txt /home/usuario/recuperados/
Listar archivos
rclone ls mega:backup-home
Tamaño del backup
rclone size mega:backup-home
Seguridad
Aunque Mega tiene encriptación de extremo a extremo, aquí hay algunas recomendaciones:
- Contraseña fuerte: Usa una contraseña robusta para tu cuenta de Mega
- Autenticación de dos factores: Actívala en Mega
- Encriptación adicional: Si tienes datos muy sensibles, considera usar el módulo de encriptación de rclone
- Revisa las exclusiones: Asegúrate de no estar subiendo archivos con contraseñas o tokens
Nunca subas a la nube archivos como .env, credentials.json, claves SSH sin protección, o cualquier cosa que contenga secretos.
Casos de uso
Déjame contarte cómo este sistema me ha salvado más de una vez:
Cambio de laptop
Cuando recientemente cambié mi laptop principal por una nueva, el proceso fue ridículamente simple:
- Instalé el sistema operativo base
- Instalé rclone y configuré el remote de Mega
- Ejecuté
rclone sync mega:backup-home /home/neandertech - Esperé a que terminara la sincronización
En menos de una hora tenía mi entorno completo funcionando en la nueva máquina. Todos mis proyectos, configuraciones, documentos, todo.
Incidente del café
No fue mi café, fue el de un compañero, pero sí, una laptop murió por ahogamiento. Afortunadamente, su backup estaba actualizado de esa misma mañana. Perdió la laptop, pero no perdió ni un solo archivo.
Múltiples lugares
Como trabajo desde casa, la universidad y a veces desde la oficina, necesito tener acceso a mis archivos desde cualquier lugar. Con este sistema, solo necesito sincronizar antes de empezar a trabajar y todo está actualizado.
Comparación con Google Drive
Si ya leíste mi artículo sobre hacer backups a Google Drive con Python y cron, te estarás preguntando cuál es la diferencia. Aquí te lo explico:
Google Drive (HomeBack)
- Usa Python y la API de Google Drive
- Más complejo de configurar
- Limitado a 15GB gratuitos
- Requiere credenciales OAuth
- Perfecto si ya estás en el ecosistema de Google
Mega.nz (cloudBackup.sh)
- Usa solo bash y rclone
- Configuración más simple
- 20GB gratuitos
- Solo necesitas usuario y contraseña
- Mejor privacidad con encriptación de extremo a extremo
Personalmente, uso ambos. Google Drive para proyectos y documentos mas específicos y Mega para el backup completo de mi home. Redundancia nunca está de más.
Monitoreo
Una vez que automatizas algo, es fácil olvidarte de ello. Hasta que algo falla y te das cuenta semanas después. Para evitar eso, aquí hay algunas estrategias:
Revisar logs
Los logs ahora se guardan con timestamp en ~/.local/log/cloudBackup/:
# Ver el último log
ls -t ~/.local/log/cloudBackup/backup-*.log | head -1 | xargs tail -f
# O ver todos los logs recientes
tail -n 100 ~/.local/log/cloudBackup/backup-$(date +%Y%m%d)-*.log
Notificaciones
Puedes modificar el script para que te envíe un correo si algo falla. Si instalaste mi herramienta neocomposer, puedes usarla:
# Al final del script, si falla
if [ $? -ne 0 ]; then
echo "Backup falló" | neocomposer -s "Error en backup"
exit 1
fi
Espacio disponible
Mega te avisa cuando estás cerca del límite, pero es bueno revisar:
rclone about mega:backup-home
Conclusión
Ser un verdadero nómada digital no se trata solo de poder trabajar desde cualquier lugar, se trata de tener la tranquilidad de que tus datos están seguros sin importar qué pase con tu hardware. Un disco duro puede fallar, una laptop puede caerse, pero si tus datos están respaldados automáticamente en la nube, puedes dormir tranquilo.
Este sistema me ha funcionado perfectamente durante meses. Es simple, automatizado y confiable. No tengo que acordarme de hacer backups porque el sistema lo hace por mí. Y esa es la mejor forma de garantizar que realmente se hagan.
Si aún no tienes un sistema de backups automatizado, te invito a que implementes este o alguno similar. No esperes a perder datos importantes para darte cuenta de su importancia. Créeme, ya pasé por eso y no es nada agradable.
¿Tienes alguna otra estrategia para mantener tus datos seguros? ¿Usas algún otro servicio de almacenamiento en la nube? Déjamelo saber en los comentarios.
Referencias
"La información es poder. La información compartida es poder multiplicado."

