Descripción
crad-move-to-storage.py es una herramienta de Core-Admin que automatiza el proceso de mover carpetas del sistema a la partición /storage utilizando bind mounts. Esto permite liberar espacio en particiones pequeñas (como /, /tmp o /var) aprovechando el espacio disponible en /storage.
Instalación
Sintaxis
crad-move-to-storage.py --folder CARPETA [opciones]
Opciones
┌──────────────────────┬───────────────────────────────────────────┐
│ Opción │ Descripción │
├──────────────────────┼───────────────────────────────────────────┤
│ -f, --folder CARPETA │ Carpeta a mover (requerido). Debe ser una ruta absoluta │
├──────────────────────┼───────────────────────────────────────────┤
│ -d, --dry-run │ Modo simulación: muestra los pasos sin ejecutarlos │
├──────────────────────┼───────────────────────────────────────────┤
│ -v, --verbose │ Modo verbose: muestra información detallada de debug │
├──────────────────────┼───────────────────────────────────────────┤
│ -y, --yes │ Salta la confirmación interactiva │
├──────────────────────┼───────────────────────────────────────────┤
│ -h, --help │ Muestra la ayuda │
└──────────────────────┴───────────────────────────────────────────┘
Nomenclatura de carpetas en /storage
El script transforma la ruta origen reemplazando las barras / por guiones -:
┌───────────────────────────┬───────────────────────────────────┐
│ Origen │ Destino en /storage │
├───────────────────────────┼───────────────────────────────────┤
│ /tmp │ /storage/tmp │
├───────────────────────────┼───────────────────────────────────┤
│ /var/beep │ /storage/var-beep │
├───────────────────────────┼───────────────────────────────────┤
│ /var/lib/mysql │ /storage/var-lib-mysql │
├───────────────────────────┼───────────────────────────────────┤
│ /var/lib/firewall-manager │ /storage/var-lib-firewall-manager │
└───────────────────────────┴───────────────────────────────────┘
Flujo de ejecución
El script ejecuta los siguientes pasos en orden:
- Validación de prerequisitos
- Verifica ejecución como root
- Comprueba que la carpeta origen existe
- Verifica que /storage existe
- Comprueba que la carpeta no está ya montada desde /storage
- Verifica disponibilidad de rsync
- Detección de procesos afectados
- Ejecuta lsof para identificar procesos usando la carpeta
- Muestra advertencia sobre servicios que necesitarán reinicio
- Confirmación del usuario
- Muestra resumen de la operación
- Solicita confirmación explícita (salvo con --yes)
- Creación de carpeta destino
- Crea la carpeta en /storage con mkdir -p
- Preserva permisos y propietario de la carpeta original
- Sincronización de datos
- Ejecuta rsync -avz para copiar todos los datos
- Desmontaje de carpeta original
- Utiliza umount -l (lazy unmount) para desmontar sin afectar procesos
- Modificación de /etc/fstab
- Crea backup automático: /etc/fstab.backup.YYYY-MM-DD_HH-MM-SS
- Comenta las entradas existentes (UUID o device)
- Añade nuevas líneas de bind mount
- Recarga de systemd
- Ejecuta systemctl daemon-reload
- Montaje del bind mount
- Monta la nueva configuración
- Limpieza de carpeta original
- Desmonta temporalmente
- Elimina datos originales para liberar espacio
- Vuelve a montar
- Verificación
- Crea archivo de prueba para verificar el bind mount
- Muestra estado del montaje y permisos
- Recordatorio de reinicio
- Lista los servicios detectados que pueden necesitar reinicio
Ejemplos de uso
Modo dry-run (simulación)
Antes de ejecutar cambios reales, es recomendable usar --dry-run:
>> crad-move-to-storage.py --folder /tmp --dry-run
Salida:
============================================================
crad-move-to-storage.py
============================================================
Moving '/tmp' to /storage with bind mount
MODE: DRY-RUN (no changes will be made)
============================================================
STEP: Validating prerequisites...
STEP: Checking affected processes...
[DRY-RUN] Would run: lsof -n | grep /tmp
STEP: Creating storage folder...
[DRY-RUN] Would create: mkdir -p /storage/tmp
STEP: Synchronizing data...
[DRY-RUN] Would run: rsync -avz /tmp/ /storage/tmp/
...
Mover /tmp a /storage
>> crad-move-to-storage.py --folder /tmp
Este comando:
- Mueve /tmp a /storage/tmp
- Configura automáticamente /var/tmp para usar el mismo destino
- Ambas carpetas compartirán /storage/tmp
Mover carpeta sin confirmación
>> crad-move-to-storage.py --folder /var/beep --yes
Mover carpeta con salida detallada
>> crad-move-to-storage.py --folder /var/lib/mysql --verbose
Combinación de opciones
>> crad-move-to-storage.py --folder /tmp --yes --verbose
Casos especiales
/tmp y /var/tmp
Cuando se mueve /tmp, el script automáticamente:
- Detecta y desmonta también /var/tmp si está montado
- Comenta las entradas de fstab para ambos
- Añade bind mounts para ambos apuntando a /storage/tmp
- Monta y verifica ambos
Resultado en /etc/fstab:
/storage/tmp /tmp none defaults,bind,noatime,nodiratime 0 0
/storage/tmp /var/tmp none defaults,bind,noatime,nodiratime 0 0
Carpetas con montajes UUID
Si la carpeta tiene un montaje por UUID, el script lo comenta manteniendo un registro:
# Commented by crad-move-to-storage.py - 2026-01-17 20:40:28
# UUID=46586e96-9389-4cd9-bd8b-d45dfbbbbe59 /tmp ext4 defaults 0 2
/storage/tmp /tmp none defaults,bind,noatime,nodiratime 0 0
Formato de entrada en fstab
Las entradas añadidas siguen este formato:
none defaults,bind,noatime,nodiratime 0 0
Opciones de montaje:
- defaults - Opciones estándar
- bind - Indica que es un bind mount
- noatime - No actualiza tiempo de acceso (mejora rendimiento)
- nodiratime - No actualiza tiempo de acceso en directorios
Backup y recuperación
Backup automático
El script crea automáticamente un backup de /etc/fstab antes de modificarlo:
/etc/fstab.backup.2026-01-17_20-40-28
Recuperación manual
Si necesitas revertir los cambios:
# 1. Restaurar fstab
>> cp /etc/fstab.backup.2026-01-17_20-40-28 /etc/fstab
# 2. Recargar systemd
>> systemctl daemon-reload
# 3. Desmontar bind mounts
>> umount /tmp
>> umount /var/tmp # si aplica
# 4. Montar particiones originales
>> mount -a
Rollback automático
Si el script falla después de modificar fstab, intenta automáticamente:
- Restaurar fstab desde el backup
- Ejecutar systemctl daemon-reload
- Informar al usuario para verificación manual
Servicios a reiniciar
Después de mover una carpeta, los servicios que la utilizaban pueden necesitar reinicio. El script muestra un recordatorio al final:
============================================================
REMINDER: Services that may need restart
============================================================
- mysqld
- php-fpm
- java
============================================================
Reinicio manual:
systemctl restart mysql php7.4-fpm php8.1-fpm
Requisitos
- Ejecución como root
- Directorio /storage existente y montado
- Comando rsync disponible
- Módulos core_admin_common (command, support)
Verificación post-ejecución
Después de ejecutar el script, verifica:
# Ver montajes activos
>> mount | grep storage
# Ver espacio en disco
>> df -h | grep -E “(storage|tmp)”
# Verificar permisos (para /tmp debe ser drwxrwxrwt)
>> ls -ld /tmp /var/tmp
# Ver entradas en fstab
>> grep -v “^#” /etc/fstab | grep storage
Notas importantes
- Ejecutar primero en dry-run: Siempre usar --dry-run antes de ejecutar cambios reales
- Backup de datos críticos: Aunque el script hace rsync, considera tener backups adicionales
- Ventana de mantenimiento: Planifica la ejecución durante períodos de baja actividad
- Reinicio de servicios: Los servicios que usan la carpeta necesitarán reinicio
- Espacio en /storage: Verificar que hay espacio suficiente antes de ejecutar