Script "sencillo" para hacer copias de respaldo (backup) de discos

Enviado por Frost el 4 Abril, 2013 - 22:47.

Buenas y santas.

Si bien entiendo que ya existen programas para hacer copias de respaldo, honestamente ni me he molestado en averiguar demasiado al respecto y me pareció más sencillo hacer un script en BASH.

Al final por esas cosas de la vida, como ignorancia sobre BASH precisamente, tardé un poco más de la cuenta en dejarlo como pretendía (no solamente por el tiempo en programarlo y empezar a usarlo, sino también por haberlo usado y generado ciertos inconvenientes...)

En fin, este es el script. Si a alguien le sirve, pues úselo. Y si alguien tiene sugerencias, ¡bienvenidas sean! cheesygrin

# !/bin/bash

# Script para hacer un backup de un USB (o cualquier dispositivo en la carpeta "/media")

# Chequeo que ingresé algún nombre, guardado en la variable "1":
: ${1:?"No ingresó ningún elemento"}

# Fecha:
fecha=`date +%F`

# Se fija si existe el dispositivo con el nombre ingresado a respaldar:
if [ -d /media/$1 ]; then

  # Se fija si hay un backup anterior
  if [ -d /media/Compartido/backup-$1-* ]; then

    # Si existe, le cambio el nombre a la fecha de hoy, si es que no fue hecha hoy:
    if [ /media/Compartido/backup-$1-* != /media/Compartido/backup-$1-$fecha ]; then

      mv /media/Compartido/backup-$1-* /media/Compartido/backup-$1-$fecha

    fi

  else

    # Si no, la crea:
    mkdir /media/Compartido/backup-$1-$fecha

  fi

  # CoPiando (cp) Recursivamente carpeta-> archivos (r), informando por dónde Va (v),
  # sólamente archivos nUevos (u)
  cp -rvu /media/$1/* /media/Compartido/backup-$1-$fecha/

# Si no se encontró el dispositivo:
else

  echo
  echo "El nombre del dispositivo ingresado no existe"
  echo
  echo "Los dispositivos disponibles son:"
  echo
  # Listo los dispositivos disponibles en la carpeta /media:
  ls /media/ -1
  echo

fi
# Fin del script

¡Salud!

Imagen de siddharta
Enviado por siddharta el 5 Abril, 2013 - 00:14.

¿Consideraste mantener los permisos actuales si el sistema de archivos destino los soporta?

Sidd.

Imagen de Frost
Enviado por Frost el 5 Abril, 2013 - 20:13.

Ups, no. Es verdad, no lo había considerado como para mostrar algo "general". En el script se ve que el backup lo hago en otra partición aparte que tengo, la cual no me genera conflictos con los permisos a mí. Talvez para otro usuario sí... pero como se trata de una computadora personal no me he hecho problema.

Gracias, Sid!

Un saludo

Imagen de AllsSecs
Enviado por AllsSecs el 8 Abril, 2013 - 15:42.

Este verano intenté hacer uno, funciona para hacer copias totales pero no estoy seguro de que las haga incrementales o diferenciales (creo que no).
Hay que mirar donde está situado, por eso de las ruta relativa de los archivos para respaldar.

#!/bin/bash

# Destinació de la còpia de seguretat
MEDI=/media/suport

# Archius/carpetes per a respaldar (ruta relativa a home)
DADES=".mozilla cicle desenvolupament documents biblioteca"

# Archiu dades incrementals
INCREMENTAL=$MEDI/suport.snap

# Nom dels archius creats
NOM=$MEDI/`date  +"%Y-%m-%d_%H:%M"`

SORTIDA=0

# Si $MEDI existeix
if [ -e $MEDI ]
then
kdialog --title "Atenció:" --passivepopup "En uns instants començarà la còpia de seguretat. No desconecte la computadora fins que finalitze l'operació" 10
sleep 15

# Confirmació de la còpia de seguretat
RESULTAT=`kdialog --title "Còpia de seguretat programada" --combobox "Seleccione tipus de còpia de seguretat per a realitzar" "Total" "Diferencial" "Incremental"`
if [ $? = 0 ]
then
cd ~
case $RESULTAT in
Total) # Còpia total
#kdialog --title "Començant:" --passivepopup "Realitzant còpia de seguretat"
BUS=`kdialog --progressbar "Realitzant còpia de seguretat" 4` # Barra de progrés
tar -jcf $NOM.tot $DADES -g $INCREMENTAL 2>>$NOM.log
qdbus $BUS close 2>>$NOM.log # Tanca la barra de progrés
;;
Diferencial) # Còpia diferencial
#kdialog --title "Començant:" --passivepopup "Realitzant còpia diferencial"
BUS=`kdialog --progressbar "Realitzant còpia de seguretat" 4` # Barra de progrés
ULTIMADATA=`ls -t -1 $MEDI/*.tot | head -n 1` 2>>$NOM.log # Data de l'últim suport diferencial
qdbus $BUS Set "" value 1 2>>$NOM.log # Actualitza la barra de progrés
tar -jcf $NOM.dif $DADES -N `date -r $ULTIMADATA +"%Y-%m-%d %H:%M"` 2>>$NOM.log
qdbus $BUS close 2>>$NOM.log # Tanca la barra de progrés
;;
Incremental) # Còpia incremental
#kdialog --title "Començant:" --passivepopup "Realitzant còpia incremental"
BUS=`kdialog --progressbar "Realitzant còpia de seguretat" 4` # Barra de progrés
tar -jcf $NOM.inc $DADES -g $INCREMENTAL 2>>$NOM.log
qdbus $BUS close 2>>$NOM.log # Tanca la barra de progrés
;;
*) # En cas de no escollir cap opció
echo "`date +"%Y-%m-%d_%H:%M"` Hi ha que escollir una opció" >> $NOM.log
;;
esac
if [ -s $NOM.log ] # En cas d'haver errors
then
kdialog --title "Còpia de seguretat" --sorry "Hi ha hagut algun tipus de problema al realitzar la còpia.\nConsulte l'archiu $NOM.log per a obtindre més detalls"
SORTIDA=1
echo -e "`date +"%Y-%m-%d_%H:%M"` Error a l'operació\n_\n" >> $NOM.log
else
kdialog --title "Còpia de seguretat" --msgbox "La còpia s'ha realitzat satisfactòriament"
fi # Fi report errors
else
kdialog --title "Còpia de seguretat programada" --msgbox "Còpia de seguretat cancel.lada"
fi # Fi confirmació de la còpia
# En cas de que $MEDI no existeixca
else
kdialog --title "Atenció" --sorry "El dispositiu \"suport\" no esà muntat i no es pot fer la còpia de seguretat"
SORTIDA=1
fi # Fi comprovació de la carpeta destí
exit $SORTIDA

No lo continué por eso de trabajar y estudar a la vez. bostezo

Imagen de Frost
Enviado por Frost el 29 Abril, 2013 - 01:54.

Hola AllSecs!

Me gustó, me gustó, eh! :-D Sobre todo el "sleep 15"... es como un "a prueba de nosotros". Lindo también ver el uso de kdialig. Yo nunca lo he investigado, a pesar de las insistencias hace un tiempo de PaliNet.

Gracias por compartir. Un saludo