Post

backup_nube_neptuno.sh

backup_nube_neptuno.sh

backup_nube_neptuno.sh

Este script sincroniza el arbol de datos de Nextcloud hacia un destino remoto mensual.

Uso en la infraestructura

Se usa para conservar una copia mensual del arbol de datos de Nextcloud en almacenamiento externo.

RolServicioImpacto si falla
Backup datosNextcloud filesNo hay historico mensual de ficheros
Copia externaNAS/almacenamientoEl host local es punto unico de fallo
CapacidadDestino mensualPuede llenarse si no se combina con retencion

Complementa al dump SQL: por si solo no basta para una restauracion completa.

Estado en cron

La entrada aparece comentada en micron_nextcloud:

#30 4 1 * * /ruta/origen/scripts/backup_nube_neptuno.sh

Flujo

  1. Monta un destino remoto mensual.
  2. Sincroniza /ruta/origen/nextcloud-data hacia /ruta/destino/backups-mensuales/nextcloud.
  3. Entra al directorio destino.
  4. Desmonta el destino.

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
#!/bin/bash
LOG=/var/log/backup_nube_neptuno.log

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

FECHA=D$(date +%Y%m%d)
FILEIN='nextcloud'
FILEOUT='nextcloud.'

logline "Inicia el proceso de empaque de nextcloud" > $LOG
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 3
else
  logline "Inicia la sincronizacion de paquetes" > $LOG
  rsync -r -t -p -o -g -l -H -i -s /ruta/origen/nextcloud /mnt/destino >> $LOG
  if [ $? -ne 0 ]; then
    logline "Error en rsync"
    exit 5
  else
    logline "Nos ponemos en el directorio"
    cd /mnt/destino/
    if [ $? -ne 0 ]; then
      logline "Error al mover etc"
      exit 7
    else
      logline "Desmontamos la unidad de red"
      umount -l /mnt/destino
      if [ $? -ne 0 ]; then
        logline "Error desmontando unidad"
        exit 11
      else
        logline "Proceso finalizado correctamente"
        exit 0
      fi
    fi
  fi
fi
sleep 50
exit 0

Version revisada

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env bash
set -euo pipefail

LOG="/var/log/backup_nube_neptuno_$(date +%Y%m%d).log"
ORIGEN_NEXTCLOUD="/ruta/origen/nextcloud-data"
MOUNT_DESTINO="/mnt/destino/backups-mensuales/nextcloud"
NFS_DESTINO="<HOSTNAME>:/ruta/destino/backups-mensuales/nextcloud"

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

rsync -avh "$ORIGEN_NEXTCLOUD/" "$MOUNT_DESTINO/nextcloud/" >> "$LOG" 2>&1

Recomendaciones

  • Usar --delete solo si el destino debe ser espejo exacto.
  • Usar --link-dest o snapshots si se quieren historicos eficientes.
  • Validar espacio libre antes de copiar.

Cambios y motivo

CambioMotivo
elimina cd innecesariono aporta validacion real del backup
trap para desmontarevita mounts colgados
variables origen/destinoaclara que se copia data hacia backup mensual
log unicoevita pisar el log con redirecciones > intermedias
This post is licensed under CC BY 4.0 by the author.