Post

muevo_filesystems_neptuno.sh

muevo_filesystems_neptuno.sh

muevo_filesystems_neptuno.sh

Este script empaqueta varios filesystems de backup local y los mueve a un destino remoto mensual.

Uso en la infraestructura

Se usa para consolidar copias mensuales de configuracion, aplicaciones y datos de soporte hacia almacenamiento externo.

RolServicioImpacto si falla
Archivado mensualFilesystems de backupSolo quedan copias locales recientes
Salida externaNAS/almacenamientoMenos resiliencia ante fallo de disco local
Disparo retencionDepuracion mensualCopias antiguas pueden acumularse

Debe ejecutarse fuera de la ventana de dumps SQL para evitar mover copias a medio generar.

Ejecucion programada

30 2 1 * * /ruta/origen/scripts/muevo_filesystems_neptuno.sh

Flujo

  1. Entra en /ruta/origen/backups-locales.
  2. Comprime etc, tools y www.
  3. Monta el destino remoto mensual.
  4. Mueve cada tarball a su carpeta destino.
  5. Llama a depuro_neptuno_90.sh para depurar copias antiguas.

Script original

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/bash
LOG=/var/log/muevo_filesystems_neptuno.log

logline() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') $*" >> "$LOG"
}

FECHA=D$(date +%Y%m%d)
FILEIN='etc'
FILEOUT='etc.'
FILEIN1='tools'
FILEOUT1='tools.'
FILEIN2='www'
FILEOUT2='www.'
cd /ruta/origen/backups-locales

logline "Inicia el proceso de empaque los filesystems" > $LOG
logline "Inicia la compresion de etc"
tar cvpzf $FILEOUT$FECHA.tar.gz $FILEIN >> $LOG
if [ $? -ne 0 ]; then logline "Error al comprimir etc"; exit 3; else
logline "Inicia la compresion de tools"
tar cvpzf $FILEOUT1$FECHA.tar.gz $FILEIN1 >> $LOG
if [ $? -ne 0 ]; then logline "Error al comprimir tools"; exit 5; else
logline "Inicia la compresion de www"
tar cvpzf $FILEOUT2$FECHA.tar.gz $FILEIN2 >> $LOG
if [ $? -ne 0 ]; then logline "Error al comprimir www"; exit 7; else
logline "Montamos la unidad de red"
mount <HOSTNAME>:/ruta/destino/backups-mensuales/nextcloud /mnt/destino
if [ $? -ne 0 ]; then logline "Error montando la unidad de red"; exit 9; else
logline "Mueve etc a Neptuno"
mv etc*tar.gz /mnt/destino/etc
if [ $? -ne 0 ]; then logline "Error al mover etc"; exit 11; else
logline "Mueve tools a Neptuno"
mv tools*tar.gz /mnt/destino/tools
if [ $? -ne 0 ]; then logline "Error al mover tools"; exit 13; else
logline "Mueve var a Neptuno"
mv www*tar.gz /mnt/destino/www
if [ $? -ne 0 ]; then logline "Error al mover var"; exit 15; else
logline "Desmontamos la unidad de red"
umount /mnt/destino
if [ $? -ne 0 ]; then logline "Error desmontando unidad"; exit 17; else
/ruta/origen/scripts/depuro_neptuno_90.sh
logline "Proceso finalizado correctamente"
exit 0
fi; fi; fi; fi; fi; fi; fi; fi
exit 0

Version revisada

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env bash
set -euo pipefail

FECHA="$(date +%Y%m%d)"
ORIGEN_BASE="/ruta/origen/backups-locales"
MOUNT_DESTINO="/mnt/destino/backups-mensuales/nextcloud"
NFS_DESTINO="<HOSTNAME>:/ruta/destino/backups-mensuales/nextcloud"

for item in etc tools www; do
  tar czf "$ORIGEN_BASE/${item}.${FECHA}.tar.gz" -C "$ORIGEN_BASE" "$item"
done

mount "$NFS_DESTINO" "$MOUNT_DESTINO"
trap 'umount -l "$MOUNT_DESTINO" 2>/dev/null || true' EXIT

mv "$ORIGEN_BASE"/etc.*.tar.gz "$MOUNT_DESTINO/etc/"
mv "$ORIGEN_BASE"/tools.*.tar.gz "$MOUNT_DESTINO/tools/"
mv "$ORIGEN_BASE"/www.*.tar.gz "$MOUNT_DESTINO/www/"

/ruta/origen/scripts/depuro_neptuno_90.sh

Riesgos y mejoras

  • Validar que el mount destino existe antes de mover.
  • Evitar comodines demasiado amplios.
  • La llamada a depuracion depende de que el path del script sea correcto.
  • Si el destino esta montado por otra tarea, coordinar ventanas para no desmontarlo indebidamente.

Cambios y motivo

CambioMotivo
bucle para etc tools wwwevita repetir tres bloques casi iguales
rutas en variablesreduce errores al cambiar destino
trap de desmontajeevita dejar el destino montado si falla un mv
nombres de tarballs exactosevita comodines amplios como etc*tar.gz
This post is licensed under CC BY 4.0 by the author.