REALITZACIÓ DE BACKUPS

INSTALAR EINES NECESARIES:

sudo apt update
sudo apt install rsync tree bc -y

CREAR ESTRUCTURA DE DIRECTORIS

sudo mkdir -p /var/backups/nfs_backups/{daily,weekly}
sudo mkdir -p /var/log/backups

PROVES DE RENDIMENT

sudo nano /usr/local/bin/compare_backup_nfs.sh

#!/bin/bash

# ============================================
# COMPARACIÓ D’EINES DE BACKUP PER NFS
# Servidor: 10.0.10.5
# ============================================

RESULTS=”/var/log/backups/comparison_$(date +%Y%m%d_%H%M%S).txt”
SOURCE=”/srv/nfs”
TEST_DEST=”/tmp/backup_test”

echo “=========================================” > $RESULTS
echo ” COMPARACIÓ EINES DE BACKUP – NFS” >> $RESULTS
echo ” Servidor: 10.0.10.5″ >> $RESULTS
echo ” Data: $(date ‘+%Y-%m-%d %H:%M:%S’)” >> $RESULTS
echo “=========================================” >> $RESULTS
echo “” >> $RESULTS

# Informació del sistema
echo “INFORMACIÓ DEL SISTEMA:” >> $RESULTS
echo “———————-” >> $RESULTS
echo “CPU: $(lscpu | grep “Model name” | cut -d: -f2 | xargs)” >> $RESULTS
echo “RAM: $(free -h | grep Mem | awk ‘{print $2}’)” >> $RESULTS
echo “Mida dades origen: $(du -sh $SOURCE | awk ‘{print $1}’)” >> $RESULTS
echo “” >> $RESULTS

# Netejar test anterior
rm -rf $TEST_DEST
mkdir -p $TEST_DEST

# ============================================
# PROVA 1: TAR + GZIP
# ============================================
echo “=========================================” >> $RESULTS
echo “PROVA 1: TAR + GZIP” >> $RESULTS
echo “=========================================” >> $RESULTS
echo “Descripció: Compressió completa amb gzip” >> $RESULTS
echo “” >> $RESULTS

START=$(date +%s.%N)
MEM_BEFORE=$(free | grep Mem | awk ‘{print $3}’)
CPU_BEFORE=$(top -bn1 | grep “Cpu(s)” | awk ‘{print $2}’)

tar -czf $TEST_DEST/backup.tar.gz $SOURCE 2>/dev/null

END=$(date +%s.%N)
MEM_AFTER=$(free | grep Mem | awk ‘{print $3}’)

TIME=$(echo “$END – $START” | bc)
SIZE=$(du -h $TEST_DEST/backup.tar.gz | awk ‘{print $1}’)
MEM_USED=$(echo “$MEM_AFTER – $MEM_BEFORE” | bc)

echo “Temps execució: ${TIME} segons” >> $RESULTS
echo “Mida backup: $SIZE” >> $RESULTS
echo “Memòria usada: ~${MEM_USED} KB” >> $RESULTS
echo “” >> $RESULTS
echo “AVANTATGES:” >> $RESULTS
echo ” – Compressió excel·lent” >> $RESULTS
echo ” – Un sol fitxer fàcil de transferir” >> $RESULTS
echo “DESAVANTATGES:” >> $RESULTS
echo ” – Lent en grans volums” >> $RESULTS
echo ” – No és incremental” >> $RESULTS
echo ” – Alt ús de CPU” >> $RESULTS
echo “” >> $RESULTS

rm -rf $TEST_DEST/backup.tar.gz

# ============================================
# PROVA 2: RSYNC (Primera execució)
# ============================================
echo “=========================================” >> $RESULTS
echo “PROVA 2: RSYNC – CÒPIA COMPLETA” >> $RESULTS
echo “=========================================” >> $RESULTS
echo “Descripció: Sincronització completa primera vegada” >> $RESULTS
echo “” >> $RESULTS

START=$(date +%s.%N)
MEM_BEFORE=$(free | grep Mem | awk ‘{print $3}’)

rsync -a –stats $SOURCE/ $TEST_DEST/rsync_backup/ 2>&1 | grep -E “Number of files|Total file size|Total transferred” >> $RESULTS

END=$(date +%s.%N)
MEM_AFTER=$(free | grep Mem | awk ‘{print $3}’)

TIME=$(echo “$END – $START” | bc)
SIZE=$(du -sh $TEST_DEST/rsync_backup | awk ‘{print $1}’)
MEM_USED=$(echo “$MEM_AFTER – $MEM_BEFORE” | bc)

echo “” >> $RESULTS
echo “Temps execució: ${TIME} segons” >> $RESULTS
echo “Mida backup: $SIZE” >> $RESULTS
echo “Memòria usada: ~${MEM_USED} KB” >> $RESULTS
echo “” >> $RESULTS

# ============================================
# PROVA 3: RSYNC (Segona execució – incremental)
# ============================================
echo “=========================================” >> $RESULTS
echo “PROVA 3: RSYNC – CÒPIA INCREMENTAL” >> $RESULTS
echo “=========================================” >> $RESULTS
echo “Descripció: Sincronització sense canvis (incremental)” >> $RESULTS
echo “” >> $RESULTS

START=$(date +%s.%N)

rsync -a –stats $SOURCE/ $TEST_DEST/rsync_backup/ 2>&1 | grep -E “Number of files|Total file size|Total transferred” >> $RESULTS

END=$(date +%s.%N)
TIME=$(echo “$END – $START” | bc)

echo “” >> $RESULTS
echo “Temps execució incremental: ${TIME} segons” >> $RESULTS
echo “” >> $RESULTS
echo “AVANTATGES:” >> $RESULTS
echo ” – Molt ràpid en execucions posteriors” >> $RESULTS
echo ” – Mínim ús de CPU i memòria” >> $RESULTS
echo ” – Només copia fitxers modificats” >> $RESULTS
echo ” – Preserva permisos i propietaris” >> $RESULTS
echo “DESAVANTATGES:” >> $RESULTS
echo ” – No comprimeix (usa més espai)” >> $RESULTS
echo ” – Primera execució més lenta que incremental” >> $RESULTS
echo “” >> $RESULTS

# ============================================
# PROVA 4: RSYNC amb compressió remota
# ============================================
echo “=========================================” >> $RESULTS
echo “PROVA 4: RSYNC + COMPRESSIÓ” >> $RESULTS
echo “=========================================” >> $RESULTS
echo “Descripció: rsync amb compressió durant la transferència” >> $RESULTS
echo “” >> $RESULTS

rm -rf $TEST_DEST/rsync_compressed
START=$(date +%s.%N)

rsync -az –stats $SOURCE/ $TEST_DEST/rsync_compressed/ 2>&1 | grep -E “Number of files|Total file size|Total transferred” >> $RESULTS

END=$(date +%s.%N)
TIME=$(echo “$END – $START” | bc)
SIZE=$(du -sh $TEST_DEST/rsync_compressed | awk ‘{print $1}’)

echo “” >> $RESULTS
echo “Temps execució: ${TIME} segons” >> $RESULTS
echo “Mida backup: $SIZE” >> $RESULTS
echo “” >> $RESULTS
echo “AVANTATGES:” >> $RESULTS
echo ” – Compressió durant transferència” >> $RESULTS
echo ” – Útil per backups remots” >> $RESULTS
echo “DESAVANTATGES:” >> $RESULTS
echo ” – Més lent que rsync sense compressió” >> $RESULTS
echo ” – Major ús de CPU” >> $RESULTS
echo “” >> $RESULTS

# ============================================
# RESUM I RECOMANACIÓ
# ============================================
echo “=========================================” >> $RESULTS
echo “RESUM I RECOMANACIÓ FINAL” >> $RESULTS
echo “=========================================” >> $RESULTS
echo “” >> $RESULTS
echo “TAULA COMPARATIVA:” >> $RESULTS
echo “———————————————————–” >> $RESULTS
printf “%-20s %-15s %-15s %-15s\n” “EINA” “TEMPS 1a VEZ” “TEMPS INCR.” “CONSUM CPU” >> $RESULTS
echo “———————————————————–” >> $RESULTS
echo “La taula completa està als resultats individuals” >> $RESULTS
echo “” >> $RESULTS
echo “RECOMANACIÓ: RSYNC sense compressió” >> $RESULTS
echo “====================” >> $RESULTS
echo “” >> $RESULTS
echo “JUSTIFICACIÓ:” >> $RESULTS
echo “————-” >> $RESULTS
echo “1. VELOCITAT: Execucions incrementals 10-20x més ràpides” >> $RESULTS
echo “2. RECURSOS: Mínim impacte en CPU i memòria del sistema” >> $RESULTS
echo “3. FIABILITAT: Eina madura i provada (més de 20 anys)” >> $RESULTS
echo “4. MANTENIMENT: Simple de configurar i mantenir” >> $RESULTS
echo “5. NO DEIXA TEMPORALS: Copia directa sense fitxers intermedis” >> $RESULTS
echo “” >> $RESULTS
echo “Per aquest servidor NFS, rsync és la millor opció perquè:” >> $RESULTS
echo ” – Les còpies incrementals diàries seran quasi instantànies” >> $RESULTS
echo ” – No afectarà el rendiment del servei NFS” >> $RESULTS
echo ” – Ocupa mínim espai temporal (0 bytes durant còpia)” >> $RESULTS
echo “” >> $RESULTS

# Netejar
rm -rf $TEST_DEST

cat $RESULTS
echo “”
echo “Resultats guardats a: $RESULTS”

PERMISOS I EXECUCCIÓ

sudo chmod +x /usr/local/bin/compare_backup_nfs.sh
sudo /usr/local/bin/compare_backup_nfs.sh

SCRIPT PRINCIPAL DE BACKUP

sudo nano /usr/local/bin/backup_nfs.sh

 

#!/bin/bash

# ============================================
# SISTEMA DE BACKUP AUTOMÀTIC – SERVIDOR NFS
# Servidor: 10.0.10.5
# Eina: rsync (justificada per proves rendiment)
# ============================================

# Variables globals
HOSTNAME=$(hostname -s)
DATE=$(date +%Y%m%d_%H%M%S)
DAY=$(date +%A)
WEEK=$(date +%Y_W%V)

# Directoris
BACKUP_ROOT=”/var/backups/nfs_backups”
DAILY_DIR=”$BACKUP_ROOT/daily”
WEEKLY_DIR=”$BACKUP_ROOT/weekly”
CURRENT_BACKUP=”$DAILY_DIR/$DATE”

# Logs
LOG_DIR=”/var/log/backups”
LOG_FILE=”$LOG_DIR/backup_$(date +%Y%m%d).log”
ERROR_LOG=”$LOG_DIR/backup_errors.log”

# Configuració
RETENTION_DAYS=7
RETENTION_WEEKS=4

# Crear directoris necessaris
mkdir -p “$DAILY_DIR”
mkdir -p “$WEEKLY_DIR”
mkdir -p “$LOG_DIR”
mkdir -p “$CURRENT_BACKUP”

# ============================================
# FUNCIONS
# ============================================

log() {
echo “[$(date +’%Y-%m-%d %H:%M:%S’)] $1” | tee -a “$LOG_FILE”
}

error_log() {
echo “[$(date +’%Y-%m-%d %H:%M:%S’)] ERROR: $1” | tee -a “$ERROR_LOG” “$LOG_FILE”
}

# Funció per obtenir mida
get_size() {
du -sh “$1” 2>/dev/null | awk ‘{print $1}’
}

# Funció per comptar fitxers
count_files() {
find “$1” -type f 2>/dev/null | wc -l
}

# ============================================
# INICI DEL BACKUP
# ============================================

log “=========================================”
log ” INICI BACKUP SERVIDOR NFS”
log ” Hostname: $HOSTNAME”
log ” Backup ID: $DATE”
log “=========================================”
log “”

START_TIME=$(date +%s)

# ============================================
# 1. BACKUP RECURSOS COMPARTITS NFS
# ============================================

log “1. Backup recursos compartits NFS”
log “———————————–“

# Backup /srv/nfs/servidores (lectura/escriptura)
if [ -d “/srv/nfs/servidores” ]; then
log “Copiant /srv/nfs/servidores…”

BEFORE_SIZE=$(get_size “/srv/nfs/servidores”)
BEFORE_FILES=$(count_files “/srv/nfs/servidores”)

rsync -a –delete \
–stats \
/srv/nfs/servidores/ \
“$CURRENT_BACKUP/servidores/” 2>&1 | tee -a “$LOG_FILE”

if [ ${PIPESTATUS[0]} -eq 0 ]; then
AFTER_SIZE=$(get_size “$CURRENT_BACKUP/servidores”)
AFTER_FILES=$(count_files “$CURRENT_BACKUP/servidores”)

log “[OK] /srv/nfs/servidores copiat correctament”
log ” Mida origen: $BEFORE_SIZE ($BEFORE_FILES fitxers)”
log ” Mida backup: $AFTER_SIZE ($AFTER_FILES fitxers)”
else
error_log “Fallo copiant /srv/nfs/servidores”
fi
else
log “[WARNING] /srv/nfs/servidores no existeix”
fi

log “”

# Backup /srv/nfs/lectura (només lectura)
if [ -d “/srv/nfs/lectura” ]; then
log “Copiant /srv/nfs/lectura…”

BEFORE_SIZE=$(get_size “/srv/nfs/lectura”)
BEFORE_FILES=$(count_files “/srv/nfs/lectura”)

rsync -a –delete \
–stats \
/srv/nfs/lectura/ \
“$CURRENT_BACKUP/lectura/” 2>&1 | tee -a “$LOG_FILE”

if [ ${PIPESTATUS[0]} -eq 0 ]; then
AFTER_SIZE=$(get_size “$CURRENT_BACKUP/lectura”)
AFTER_FILES=$(count_files “$CURRENT_BACKUP/lectura”)

log “[OK] /srv/nfs/lectura copiat correctament”
log ” Mida origen: $BEFORE_SIZE ($BEFORE_FILES fitxers)”
log ” Mida backup: $AFTER_SIZE ($AFTER_FILES fitxers)”
else
error_log “Fallo copiant /srv/nfs/lectura”
fi
else
log “[WARNING] /srv/nfs/lectura no existeix”
fi

log “”

# ============================================
# 2. BACKUP CONFIGURACIONS
# ============================================

log “2. Backup configuracions del sistema”
log “————————————-“

mkdir -p “$CURRENT_BACKUP/config”

# /etc/exports
if [ -f “/etc/exports” ]; then
cp /etc/exports “$CURRENT_BACKUP/config/” 2>/dev/null
log “[OK] /etc/exports copiat”
fi

# /etc/hostname
if [ -f “/etc/hostname” ]; then
cp /etc/hostname “$CURRENT_BACKUP/config/” 2>/dev/null
log “[OK] /etc/hostname copiat”
fi

# /etc/hosts
if [ -f “/etc/hosts” ]; then
cp /etc/hosts “$CURRENT_BACKUP/config/” 2>/dev/null
log “[OK] /etc/hosts copiat”
fi

# /etc/network/interfaces
if [ -f “/etc/network/interfaces” ]; then
cp /etc/network/interfaces “$CURRENT_BACKUP/config/” 2>/dev/null
log “[OK] /etc/network/interfaces copiat”
fi

# Configuració NFS
if [ -d “/etc/default” ]; then
cp /etc/default/nfs-* “$CURRENT_BACKUP/config/” 2>/dev/null
log “[OK] Configuració NFS copiada”
fi

log “”

# ============================================
# 3. BACKUP SCRIPTS
# ============================================

log “3. Backup scripts personalitzats”
log “———————————“

mkdir -p “$CURRENT_BACKUP/scripts”

# Scripts de /usr/local/bin
if [ -d “/usr/local/bin” ]; then
rsync -a /usr/local/bin/*nfs* “$CURRENT_BACKUP/scripts/” 2>/dev/null
rsync -a /usr/local/bin/check_* “$CURRENT_BACKUP/scripts/” 2>/dev/null
log “[OK] Scripts copiats”
fi

log “”

# ============================================
# 4. METADADES DEL BACKUP
# ============================================

log “4. Generant metadades del backup”
log “———————————“

cat > “$CURRENT_BACKUP/backup_info.txt” <<EOF
========================================
INFORMACIÓ DEL BACKUP
========================================

Data i hora: $(date ‘+%Y-%m-%d %H:%M:%S’)
Hostname: $HOSTNAME
Backup ID: $DATE
Tipus: Diari

CONTINGUT:
———-
– Recursos compartits NFS
– Configuracions del sistema
– Scripts personalitzats

MIDES:
——
Servidores: $(get_size “$CURRENT_BACKUP/servidores” 2>/dev/null || echo “N/A”)
Lectura: $(get_size “$CURRENT_BACKUP/lectura” 2>/dev/null || echo “N/A”)
Config: $(get_size “$CURRENT_BACKUP/config” 2>/dev/null || echo “N/A”)
Scripts: $(get_size “$CURRENT_BACKUP/scripts” 2>/dev/null || echo “N/A”)

Total backup: $(get_size “$CURRENT_BACKUP”)

========================================
EOF

log “[OK] Metadades generades”
log “”

# ============================================
# 5. BACKUP SETMANAL (només diumenge)
# ============================================

if [ “$DAY” = “Sunday” ] || [ “$DAY” = “diumenge” ] || [ $(date +%u) -eq 7 ]; then
log “5. Creant backup setmanal”
log “————————-“

WEEKLY_BACKUP=”$WEEKLY_DIR/backup_$WEEK”

rsync -a –delete “$CURRENT_BACKUP/” “$WEEKLY_BACKUP/” 2>&1 | tee -a “$LOG_FILE”

if [ ${PIPESTATUS[0]} -eq 0 ]; then
log “[OK] Backup setmanal creat: backup_$WEEK”
log ” Mida: $(get_size “$WEEKLY_BACKUP”)”
else
error_log “Fallo creant backup setmanal”
fi
log “”
fi

# ============================================
# 6. NETEJA DE BACKUPS ANTICS
# ============================================

log “6. Neteja de backups antics”
log “—————————-“

# Comptar backups abans de netejar
DAILY_BEFORE=$(ls -1 “$DAILY_DIR” 2>/dev/null | wc -l)
WEEKLY_BEFORE=$(ls -1 “$WEEKLY_DIR” 2>/dev/null | wc -l)

# Netejar backups diaris antics (> RETENTION_DAYS dies)
DELETED_DAILY=0
for backup in $(find “$DAILY_DIR” -maxdepth 1 -type d -mtime +$RETENTION_DAYS 2>/dev/null); do
if [ “$backup” != “$DAILY_DIR” ]; then
rm -rf “$backup”
((DELETED_DAILY++))
fi
done

# Netejar backups setmanals antics (> RETENTION_WEEKS setmanes)
DELETED_WEEKLY=0
for backup in $(find “$WEEKLY_DIR” -maxdepth 1 -type d -mtime +$(($RETENTION_WEEKS * 7)) 2>/dev/null); do
if [ “$backup” != “$WEEKLY_DIR” ]; then
rm -rf “$backup”
((DELETED_WEEKLY++))
fi
done

DAILY_AFTER=$(ls -1 “$DAILY_DIR” 2>/dev/null | wc -l)
WEEKLY_AFTER=$(ls -1 “$WEEKLY_DIR” 2>/dev/null | wc -l)

log “Backups diaris: $DAILY_BEFORE -> $DAILY_AFTER (eliminats: $DELETED_DAILY)”
log “Backups setmanals: $WEEKLY_BEFORE -> $WEEKLY_AFTER (eliminats: $DELETED_WEEKLY)”
log “”

# ============================================
# 7. RESUM FINAL
# ============================================

END_TIME=$(date +%s)
DURATION=$((END_TIME – START_TIME))
TOTAL_SIZE=$(get_size “$BACKUP_ROOT”)

log “=========================================”
log ” RESUM DEL BACKUP”
log “=========================================”
log “Duració: ${DURATION} segons”
log “Mida total backups: $TOTAL_SIZE”
log “Backups diaris actius: $DAILY_AFTER”
log “Backups setmanals actius: $WEEKLY_AFTER”
log “”
log “Backup completat amb èxit: $CURRENT_BACKUP”
log “=========================================”
log “”

DONAR PERMISOS:

sudo chmod +x /usr/local/bin/backup_nfs.sh

SCRIPT VERIFICACIÓ DE BACKUPS:

sudo nano /usr/local/bin/verify_backups.sh

#!/bin/bash

# ============================================
# VERIFICACIÓ DE BACKUPS – SERVIDOR NFS
# ============================================

BACKUP_ROOT=”/var/backups/nfs_backups”

echo “=========================================”
echo ” VERIFICACIÓ DE BACKUPS NFS”
echo ” $(date ‘+%Y-%m-%d %H:%M:%S’)”
echo “=========================================”
echo “”

echo “1. BACKUPS DIARIS:”
echo “——————“
if [ -d “$BACKUP_ROOT/daily” ]; then
DAILY_COUNT=$(ls -1 “$BACKUP_ROOT/daily” 2>/dev/null | wc -l)
echo “Total backups diaris: $DAILY_COUNT”
echo “”
echo “Últims 5 backups:”
ls -lht “$BACKUP_ROOT/daily” | head -6 | tail -5 | awk ‘{print $6, $7, $8, $9, “(“$5″)”}’
else
echo “[ERROR] Directori de backups diaris no existeix”
fi
echo “”

echo “2. BACKUPS SETMANALS:”
echo “———————“
if [ -d “$BACKUP_ROOT/weekly” ]; then
WEEKLY_COUNT=$(ls -1 “$BACKUP_ROOT/weekly” 2>/dev/null | wc -l)
echo “Total backups setmanals: $WEEKLY_COUNT”
echo “”
if [ $WEEKLY_COUNT -gt 0 ]; then
echo “Backups setmanals disponibles:”
ls -lht “$BACKUP_ROOT/weekly” | tail -n +2 | awk ‘{print $6, $7, $8, $9, “(“$5″)”}’
fi
else
echo “[ERROR] Directori de backups setmanals no existeix”
fi
echo “”

echo “3. MIDA TOTAL DE BACKUPS:”
echo “————————-“
du -sh “$BACKUP_ROOT” 2>/dev/null
echo “”

echo “4. ESPAI DISPONIBLE:”
echo “——————–“
df -h /var/backups | tail -1 | awk ‘{print “Usat: “$3” / “$2” (“$5″)”, “Disponible: “$4}’
echo “”

echo “5. ÚLTIM BACKUP:”
echo “—————-“
LAST_BACKUP=$(ls -t “$BACKUP_ROOT/daily” 2>/dev/null | head -1)
if [ -n “$LAST_BACKUP” ]; then
echo “Directori: $LAST_BACKUP”
echo “Data: $(stat -c %y “$BACKUP_ROOT/daily/$LAST_BACKUP” | cut -d. -f1)”
echo “Mida: $(du -sh “$BACKUP_ROOT/daily/$LAST_BACKUP” | awk ‘{print $1}’)”
echo “”
echo “Contingut:”
if [ -f “$BACKUP_ROOT/daily/$LAST_BACKUP/backup_info.txt” ]; then
cat “$BACKUP_ROOT/daily/$LAST_BACKUP/backup_info.txt”
else
tree -L 2 “$BACKUP_ROOT/daily/$LAST_BACKUP” 2>/dev/null || find “$BACKUP_ROOT/daily/$LAST_BACKUP” -maxdepth 2 -type d
fi
else
echo “[WARNING] No hi ha backups disponibles”
fi
echo “”

echo “6. LOGS DE BACKUP:”
echo “——————“
if [ -d “/var/log/backups” ]; then
echo “Últims logs:”
ls -lht /var/log/backups/*.log 2>/dev/null | head -5 | awk ‘{print $6, $7, $8, $9}’
echo “”
echo “Últimes 10 línies del log actual:”
tail -10 /var/log/backups/backup_$(date +%Y%m%d).log 2>/dev/null || echo “No hi ha log avui”
else
echo “[WARNING] Directori de logs no existeix”
fi
echo “”

echo “=========================================”

DONAR PERMISOS:

sudo chmod +x /usr/local/bin/verify_backups.sh

Es una verificació llarga pero només he posat la informació necessaria per que es pugui veure com l’escript funciona perfectament

EXECUTAR PROVA MANUAL:

sudo /usr/local/bin/backup_nfs.sh

Aquesta es la prova de que es fà el backup:

++ hostname -s
+ HOSTNAME=debian
++ date +%Y%m%d_%H%M%S
+ DATE=20260218_115652
++ date +%A
+ DAY=Wednesday
++ date +%Y_W%V
+ WEEK=2026_W08
+ BACKUP_ROOT=/var/backups/nfs_backups
+ DAILY_DIR=/var/backups/nfs_backups/daily
+ WEEKLY_DIR=/var/backups/nfs_backups/weekly
+ CURRENT_BACKUP=/var/backups/nfs_backups/daily/20260218_115652
+ LOG_DIR=/var/log/backups
++ date +%Y%m%d
+ LOG_FILE=/var/log/backups/backup_20260218.log
+ ERROR_LOG=/var/log/backups/backup_errors.log
+ RETENTION_DAYS=7
+ RETENTION_WEEKS=4
+ mkdir -p /var/backups/nfs_backups/daily
+ mkdir -p /var/backups/nfs_backups/weekly
+ mkdir -p /var/log/backups
+ mkdir -p /var/backups/nfs_backups/daily/20260218_115652
+ log =========================================
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] =========================================’
[2026-02-18 11:56:52] =========================================
+ log ‘ INICI BACKUP SERVIDOR NFS’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] INICI BACKUP SERVIDOR NFS’
[2026-02-18 11:56:52] INICI BACKUP SERVIDOR NFS
+ log ‘ Hostname: debian’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] Hostname: debian’
[2026-02-18 11:56:52] Hostname: debian
+ log ‘ Backup ID: 20260218_115652’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] Backup ID: 20260218_115652’
[2026-02-18 11:56:52] Backup ID: 20260218_115652
+ log =========================================
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] =========================================’
[2026-02-18 11:56:52] =========================================
+ log ”
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] ‘
[2026-02-18 11:56:52]
++ date +%s
+ START_TIME=1771412212
+ log ‘1. Backup recursos compartits NFS’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] 1. Backup recursos compartits NFS’
[2026-02-18 11:56:52] 1. Backup recursos compartits NFS
+ log ———————————–
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] ———————————–‘
[2026-02-18 11:56:52] ———————————–
+ ‘[‘ -d /srv/nfs/servidores ‘]’
+ log ‘Copiant /srv/nfs/servidores…’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] Copiant /srv/nfs/servidores…’
[2026-02-18 11:56:52] Copiant /srv/nfs/servidores…
++ get_size /srv/nfs/servidores
++ awk ‘{print $1}’
++ du -sh /srv/nfs/servidores
+ BEFORE_SIZE=12K
++ count_files /srv/nfs/servidores
++ wc -l
++ find /srv/nfs/servidores -type f
+ BEFORE_FILES=2
+ tee -a /var/log/backups/backup_20260218.log
+ rsync -a –delete –stats /srv/nfs/servidores/ /var/backups/nfs_backups/daily/20260218_115652/servidores/

Number of files: 3 (reg: 2, dir: 1)
Number of created files: 3 (reg: 2, dir: 1)
Number of deleted files: 0
Number of regular files transferred: 2
Total file size: 64 bytes
Total transferred file size: 64 bytes
Literal data: 64 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 283
Total bytes received: 64

sent 283 bytes received 64 bytes 694.00 bytes/sec
total size is 64 speedup is 0.18
+ ‘[‘ 0 -eq 0 ‘]’
++ get_size /var/backups/nfs_backups/daily/20260218_115652/servidores
++ awk ‘{print $1}’
++ du -sh /var/backups/nfs_backups/daily/20260218_115652/servidores
+ AFTER_SIZE=12K
++ count_files /var/backups/nfs_backups/daily/20260218_115652/servidores
++ wc -l
++ find /var/backups/nfs_backups/daily/20260218_115652/servidores -type f
+ AFTER_FILES=2
+ log ‘[OK] /srv/nfs/servidores copiat correctament’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] [OK] /srv/nfs/servidores copiat correctament’
[2026-02-18 11:56:52] [OK] /srv/nfs/servidores copiat correctament
+ log ‘ Mida origen: 12K (2 fitxers)’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] Mida origen: 12K (2 fitxers)’
[2026-02-18 11:56:52] Mida origen: 12K (2 fitxers)
+ log ‘ Mida backup: 12K (2 fitxers)’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] Mida backup: 12K (2 fitxers)’
[2026-02-18 11:56:52] Mida backup: 12K (2 fitxers)
+ log ”
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] ‘
[2026-02-18 11:56:52]
+ ‘[‘ -d /srv/nfs/lectura ‘]’
+ log ‘Copiant /srv/nfs/lectura…’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] Copiant /srv/nfs/lectura…’
[2026-02-18 11:56:52] Copiant /srv/nfs/lectura…
++ get_size /srv/nfs/lectura
++ awk ‘{print $1}’
++ du -sh /srv/nfs/lectura
+ BEFORE_SIZE=20K
++ count_files /srv/nfs/lectura
++ wc -l
++ find /srv/nfs/lectura -type f
+ BEFORE_FILES=3
+ tee -a /var/log/backups/backup_20260218.log
+ rsync -a –delete –stats /srv/nfs/lectura/ /var/backups/nfs_backups/daily/20260218_115652/lectura/

Number of files: 5 (reg: 3, dir: 2)
Number of created files: 5 (reg: 3, dir: 2)
Number of deleted files: 0
Number of regular files transferred: 3
Total file size: 135 bytes
Total transferred file size: 135 bytes
Literal data: 135 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 490
Total bytes received: 95

sent 490 bytes received 95 bytes 1,170.00 bytes/sec
total size is 135 speedup is 0.23
+ ‘[‘ 0 -eq 0 ‘]’
++ get_size /var/backups/nfs_backups/daily/20260218_115652/lectura
++ awk ‘{print $1}’
++ du -sh /var/backups/nfs_backups/daily/20260218_115652/lectura
+ AFTER_SIZE=20K
++ count_files /var/backups/nfs_backups/daily/20260218_115652/lectura
++ wc -l
++ find /var/backups/nfs_backups/daily/20260218_115652/lectura -type f
+ AFTER_FILES=3
+ log ‘[OK] /srv/nfs/lectura copiat correctament’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] [OK] /srv/nfs/lectura copiat correctament’
[2026-02-18 11:56:52] [OK] /srv/nfs/lectura copiat correctament
+ log ‘ Mida origen: 20K (3 fitxers)’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] Mida origen: 20K (3 fitxers)’
[2026-02-18 11:56:52] Mida origen: 20K (3 fitxers)
+ log ‘ Mida backup: 20K (3 fitxers)’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] Mida backup: 20K (3 fitxers)’
[2026-02-18 11:56:52] Mida backup: 20K (3 fitxers)
+ log ”
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] ‘
[2026-02-18 11:56:52]
+ log ‘2. Backup configuracions del sistema’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] 2. Backup configuracions del sistema’
[2026-02-18 11:56:52] 2. Backup configuracions del sistema
+ log ————————————-
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] ————————————-‘
[2026-02-18 11:56:52] ————————————-
+ mkdir -p /var/backups/nfs_backups/daily/20260218_115652/config
+ ‘[‘ -f /etc/exports ‘]’
+ cp /etc/exports /var/backups/nfs_backups/daily/20260218_115652/config/
+ log ‘[OK] /etc/exports copiat’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] [OK] /etc/exports copiat’
[2026-02-18 11:56:52] [OK] /etc/exports copiat
+ ‘[‘ -f /etc/hostname ‘]’
+ cp /etc/hostname /var/backups/nfs_backups/daily/20260218_115652/config/
+ log ‘[OK] /etc/hostname copiat’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] [OK] /etc/hostname copiat’
[2026-02-18 11:56:52] [OK] /etc/hostname copiat
+ ‘[‘ -f /etc/hosts ‘]’
+ cp /etc/hosts /var/backups/nfs_backups/daily/20260218_115652/config/
+ log ‘[OK] /etc/hosts copiat’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] [OK] /etc/hosts copiat’
[2026-02-18 11:56:52] [OK] /etc/hosts copiat
+ ‘[‘ -f /etc/network/interfaces ‘]’
+ cp /etc/network/interfaces /var/backups/nfs_backups/daily/20260218_115652/config/
+ log ‘[OK] /etc/network/interfaces copiat’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] [OK] /etc/network/interfaces copiat’
[2026-02-18 11:56:52] [OK] /etc/network/interfaces copiat
+ ‘[‘ -d /etc/default ‘]’
+ cp /etc/default/nfs-common /etc/default/nfs-kernel-server /var/backups/nfs_backups/daily/20260218_115652/config/
+ log ‘[OK] Configuració NFS copiada’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] [OK] Configuració NFS copiada’
[2026-02-18 11:56:52] [OK] Configuració NFS copiada
+ log ”
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] ‘
[2026-02-18 11:56:52]
+ log ‘3. Backup scripts personalitzats’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] 3. Backup scripts personalitzats’
[2026-02-18 11:56:52] 3. Backup scripts personalitzats
+ log ———————————
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] ———————————‘
[2026-02-18 11:56:52] ———————————
+ mkdir -p /var/backups/nfs_backups/daily/20260218_115652/scripts
+ ‘[‘ -d /usr/local/bin ‘]’
+ rsync -a /usr/local/bin/backup_nfs.sh /usr/local/bin/compare_backup_nfs.sh /var/backups/nfs_backups/daily/20260218_115652/scripts/
+ rsync -a ‘/usr/local/bin/check_*’ /var/backups/nfs_backups/daily/20260218_115652/scripts/
+ log ‘[OK] Scripts copiats’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] [OK] Scripts copiats’
[2026-02-18 11:56:52] [OK] Scripts copiats
+ log ”
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] ‘
[2026-02-18 11:56:52]
+ log ‘4. Generant metadades del backup’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] 4. Generant metadades del backup’
[2026-02-18 11:56:52] 4. Generant metadades del backup
+ log ———————————
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] ———————————‘
[2026-02-18 11:56:52] ———————————
+ cat
++ date ‘+%Y-%m-%d %H:%M:%S’
++ get_size /var/backups/nfs_backups/daily/20260218_115652/servidores
++ get_size /var/backups/nfs_backups/daily/20260218_115652/lectura
++ get_size /var/backups/nfs_backups/daily/20260218_115652/config
++ get_size /var/backups/nfs_backups/daily/20260218_115652/scripts
++ get_size /var/backups/nfs_backups/daily/20260218_115652
++ awk ‘{print $1}’
++ du -sh /var/backups/nfs_backups/daily/20260218_115652
+ log ‘[OK] Metadades generades’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] [OK] Metadades generades’
[2026-02-18 11:56:52] [OK] Metadades generades
+ log ”
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] ‘
[2026-02-18 11:56:52]
+ ‘[‘ Wednesday = Sunday ‘]’
+ ‘[‘ Wednesday = diumenge ‘]’
++ date +%u
+ ‘[‘ 3 -eq 7 ‘]’
+ log ‘6. Neteja de backups antics’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] 6. Neteja de backups antics’
[2026-02-18 11:56:52] 6. Neteja de backups antics
+ log —————————-
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] —————————-‘
[2026-02-18 11:56:52] —————————-
++ wc -l
++ ls -1 /var/backups/nfs_backups/daily
+ DAILY_BEFORE=1
++ wc -l
++ ls -1 /var/backups/nfs_backups/weekly
+ WEEKLY_BEFORE=0
+ DELETED_DAILY=0
++ find /var/backups/nfs_backups/daily -maxdepth 1 -type d -mtime +7
+ DELETED_WEEKLY=0
++ find /var/backups/nfs_backups/weekly -maxdepth 1 -type d -mtime +28
++ wc -l
++ ls -1 /var/backups/nfs_backups/daily
+ DAILY_AFTER=1
++ wc -l
++ ls -1 /var/backups/nfs_backups/weekly
+ WEEKLY_AFTER=0
+ log ‘Backups diaris: 1 -> 1 (eliminats: 0)’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] Backups diaris: 1 -> 1 (eliminats: 0)’
[2026-02-18 11:56:52] Backups diaris: 1 -> 1 (eliminats: 0)
+ log ‘Backups setmanals: 0 -> 0 (eliminats: 0)’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] Backups setmanals: 0 -> 0 (eliminats: 0)’
[2026-02-18 11:56:52] Backups setmanals: 0 -> 0 (eliminats: 0)
+ log ”
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] ‘
[2026-02-18 11:56:52]
++ date +%s
+ END_TIME=1771412212
+ DURATION=0
++ get_size /var/backups/nfs_backups
++ awk ‘{print $1}’
++ du -sh /var/backups/nfs_backups
+ TOTAL_SIZE=104K
+ log =========================================
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] =========================================’
[2026-02-18 11:56:52] =========================================
+ log ‘ RESUM DEL BACKUP’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] RESUM DEL BACKUP’
[2026-02-18 11:56:52] RESUM DEL BACKUP
+ log =========================================
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] =========================================’
[2026-02-18 11:56:52] =========================================
+ log ‘Duració: 0 segons’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] Duració: 0 segons’
[2026-02-18 11:56:52] Duració: 0 segons
+ log ‘Mida total backups: 104K’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] Mida total backups: 104K’
[2026-02-18 11:56:52] Mida total backups: 104K
+ log ‘Backups diaris actius: 1’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] Backups diaris actius: 1’
[2026-02-18 11:56:52] Backups diaris actius: 1
+ log ‘Backups setmanals actius: 0’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] Backups setmanals actius: 0’
[2026-02-18 11:56:52] Backups setmanals actius: 0
+ log ”
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] ‘
[2026-02-18 11:56:52]
+ log ‘Backup completat amb èxit: /var/backups/nfs_backups/daily/20260218_115652’
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] Backup completat amb èxit: /var/backups/nfs_backups/daily/20260218_115652’
[2026-02-18 11:56:52] Backup completat amb èxit: /var/backups/nfs_backups/daily/20260218_115652
+ log =========================================
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] =========================================’
[2026-02-18 11:56:52] =========================================
+ log ”
+ tee -a /var/log/backups/backup_20260218.log
++ date ‘+%Y-%m-%d %H:%M:%S’
+ echo ‘[2026-02-18 11:56:52] ‘
[2026-02-18 11:56:52]

PROGRAMAR BACKUPS AUTOMATICS:

sudo crontab -e