I tant! Afegim l’opció E) Imatge del sistema que ho copia tot (arrel / sencera, exclòs només els sistemes virtuals com /proc, /sys, /dev…). Necessita sudo, perquè hi ha fitxers de sistema que l’usuari normal no pot llegir.
Aquí tens l’script actualitzat sencer:
#!/bin/bash
#====================================================#
# BACKUP_MUT.SH - Còpia de seguretat i restauració #
# Compatible amb Deepin / Ubuntu / Debian #
#====================================================#
USUARI="$USER"
CASA="$HOME"
DATA="$(date +%Y-%m-%d_%H%M%S)"
CARPETA_BACKUPS="$CASA/Backups"
capcalera() {
clear
echo "=========================================="
echo " BACKUP_MUT - BACKUP I RESTAURACIÓ"
echo "=========================================="
echo
}
tria_origen() {
echo "Tria el directori ORIGEN:"
echo " A) $CASA (tot el directori d'usuari)"
echo " B) $CASA/Documents"
echo " C) $CASA/Pictures"
echo " D) $CASA/Downloads"
echo " E) Imatge del sistema (ho copia tot)"
echo " S) Firefox i sistema"
echo " R) Especificar ruta manualment"
echo
read -p "Opció [A/B/C/D/E/S/R]: " o
case "$o" in
a|A) ORIGEN="$CASA" ;;
b|B) ORIGEN="$CASA/Documents" ;;
c|C) ORIGEN="$CASA/Pictures" ;;
d|D) ORIGEN="$CASA/Downloads" ;;
e|E) ORIGEN="__IMATGE__" ;;
s|S) ORIGEN="__SISTEMA__" ;;
r|R) read -p "Introdueix la ruta completa del directori: " ORIGEN ;;
*) ORIGEN="" ;;
esac
}
tria_desti() {
echo
echo "Tria el DESTÍ de la còpia:"
echo " 1) $CARPETA_BACKUPS (disc intern)"
echo " 2) Unitat externa / USB (/media/$USUARI)"
echo " 3) Especificar ruta manualment"
read -p "Opció [1-3]: " d
case "$d" in
2) echo " Unitats detectades: $(ls /media/$USUARI 2>/dev/null)"
read -p " Nom de la unitat: " disc
DESTI="/media/$USUARI/$disc/Backups" ;;
3) read -p "Ruta completa de destí: " DESTI ;;
*) DESTI="$CARPETA_BACKUPS" ;;
esac
mkdir -p "$DESTI" 2>/dev/null
}
fer_backup() {
echo "--- MODE BACKUP ---"
echo
tria_origen
if [ -z "$ORIGEN" ]; then
echo "Opció no vàlida."
return 1
fi
tria_desti
if [ "$ORIGEN" = "__IMATGE__" ]; then
echo
echo "ATENCIO: Es copiarà TOT el sistema (excepte /proc, /sys,"
echo "/dev, /run, /media, /mnt i /tmp)."
echo "Calen permisos d'administrador (sudo) i pot trigar força."
echo "Comprova que el destí tingui prou espai lliure!"
echo
read -p "Vols continuar? [s/N]: " conf
if [ "$conf" != "s" ] && [ "$conf" != "S" ]; then
echo "Operació cancel·lada."
return 1
fi
if ! sudo -v; then
echo "Error: no s'han obtingut permisos d'administrador."
return 1
fi
FITXER="$DESTI/imatge_sistema_$DATA.tar.gz"
sudo tar -czpf "$FITXER" \
--directory=/ \
--exclude=./proc \
--exclude=./sys \
--exclude=./dev \
--exclude=./run \
--exclude=./media \
--exclude=./mnt \
--exclude=./tmp \
--exclude=./lost+found \
--exclude=".${DESTI}" \
.
elif [ "$ORIGEN" = "__SISTEMA__" ]; then
# Perfil de Firefox (deb o Flatpak) + llista de paquets instal·lats
FF="$CASA/.mozilla/firefox"
[ -d "$FF" ] || FF="$CASA/.var/app/org.mozilla.firefox/.mozilla/firefox"
LLISTA="/tmp/llista_paquets_$DATA.txt"
dpkg --get-selections > "$LLISTA" 2>/dev/null # Deepin = Debian
FITXER="$DESTI/backup_firefox_sistema_$DATA.tar.gz"
tar -czf "$FITXER" "$FF" "$LLISTA"
else
if [ ! -e "$ORIGEN" ]; then
echo "Error: '$ORIGEN' no existeix."
return 1
fi
NOM="$(basename "$ORIGEN")"
FITXER="$DESTI/backup_${NOM}_$DATA.tar.gz"
tar -czf "$FITXER" -C "$(dirname "$ORIGEN")" "$NOM" \
--exclude="Backups" \
--exclude=".cache" \
--exclude=".local/share/Trash"
fi
if [ $? -eq 0 ]; then
echo
echo "Còpia de seguretat creada correctament:"
echo " $FITXER ($(du -h "$FITXER" | cut -f1))"
else
echo "Error: no s'ha pogut crear la còpia."
fi
}
restaurar() {
echo "--- MODE RESTAURACIÓ ---"
echo
echo "On vols buscar les còpies?"
echo " 1) $CARPETA_BACKUPS (disc intern)"
echo " 2) Especificar carpeta manualment"
read -p "Opció [1-2]: " o
CARPETA="$CARPETA_BACKUPS"
[ "$o" = "2" ] && read -p "Carpeta: " CARPETA
echo
echo "Còpies disponibles:"
ls -1 "$CARPETA"/*.tar.gz 2>/dev/null | cat -n
echo
read -p "Número de la còpia a restaurar: " num
FITXER="$(ls -1 "$CARPETA"/*.tar.gz 2>/dev/null | sed -n "${num}p")"
if [ ! -f "$FITXER" ]; then
echo "Error: no s'ha trobat la còpia."
return 1
fi
# Cas especial: imatge completa del sistema
case "$(basename "$FITXER")" in
imatge_sistema*)
echo
echo "ATENCIO: Es sobreescriuran els fitxers del sistema actual."
echo "Recomanat fer-ho des d'un Live USB."
read -p "Vols continuar? [s/N]: " conf
if [ "$conf" = "s" ] || [ "$conf" = "S" ]; then
sudo tar -xzpf "$FITXER" -C / && echo "Imatge del sistema restaurada."
else
echo "Operació cancel·lada."
fi
return 0
;;
esac
read -p "On vols restaurar-ho? [$CASA]: " DEST
[ -z "$DEST" ] && DEST="$CASA"
mkdir -p "$DEST"
if tar -xzf "$FITXER" -C "$DEST"; then
echo "Restauració completada a: $DEST"
echo "(Els fitxers queden dins la seva subcarpeta original)"
else
echo "Error durant la restauració."
fi
}
#==================== PROGRAMA PRINCIPAL ====================
while true; do
capcalera
echo "1) Fer còpia de seguretat (backup)"
echo "2) Restaurar còpia de seguretat"
echo "3) Sortir"
echo
read -p "Tria una opció [1-3]: " op
case "$op" in
1) fer_backup ;;
2) restaurar ;;
3) echo "Adéu!"; exit 0 ;;
*) echo "Opció no vàlida" ;;
esac
echo
read -p "Prem ENTER per continuar..."
done
Per actualitzar el teu fitxer:
nano ~/.local/bin/backup_mut.sh # (enganxa el codi nou, Ctrl+O per desar, Ctrl+X per sortir) backup_mut.sh
Notes sobre l’opció E:
- Et demanarà la contrasenya de
sudoabans de començar. - Pot trigar molt de temps (depèn de la mida del disc) i el fitxer serà gran; millor desar-lo en un disc extern amb prou espai.
- S’exclouen
/proc,/sys,/dev,/run,/media,/mnti/tmpperquè són sistemes virtuals o temporals que no s’han de copiar. - El fitxer
.tar.gzresultant serà de propietat root (es crea amb sudo), però el podràs llegir i restaurar sense problemes. - La restauració de la imatge completa es fa sobre
/i demana confirmació; idealment s’hauria de fer des d’un Live USB.