From 6c28c6116adf200f40b7664aae58afaa4eb4b892 Mon Sep 17 00:00:00 2001 From: MacRimi <123239993+MacRimi@users.noreply.github.com> Date: Tue, 14 Jan 2025 12:49:58 +0100 Subject: [PATCH] Update storage-manager.sh --- scripts/storage-manager.sh | 80 +++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 39 deletions(-) diff --git a/scripts/storage-manager.sh b/scripts/storage-manager.sh index dabb04e..bd93d25 100644 --- a/scripts/storage-manager.sh +++ b/scripts/storage-manager.sh @@ -3,55 +3,57 @@ DUMP_DIR="/var/lib/vz/dump" STORAGE_CFG="/etc/pve/storage.cfg" -# Crear directorio de dump si no existe -mkdir -p "$DUMP_DIR" +# Función para comprobar y reparar después de la restauración +reparar_storage_cfg() { + whiptail --title "Comprobación de Almacenamientos" --msgbox "Comprobando consistencia de los volúmenes de almacenamiento..." 8 40 + + # Verificar grupos LVM + VG_LIST=$(vgs --noheadings -o vg_name) + while read -r LINE; do + if [[ "$LINE" =~ vgname ]]; then + VG_NAME=$(echo "$LINE" | awk '{print $NF}') + if ! echo "$VG_LIST" | grep -q "$VG_NAME"; then + echo "El volumen $VG_NAME no existe, eliminando entrada..." + sed -i "/vgname $VG_NAME/,/nodes/d" "$STORAGE_CFG" + fi + fi + done < "$STORAGE_CFG" + + whiptail --title "Reparación Completada" --msgbox "La comprobación de consistencia ha finalizado. Se eliminaron las entradas no válidas." 8 40 +} + +# Restaurar copia de seguridad y comprobar +restaurar_backup() { + BACKUP_FILE=$(whiptail --title "Seleccionar Copia de Seguridad" --menu "Selecciona la copia de seguridad a restaurar:" 15 60 8 $(ls "$DUMP_DIR"/storage.cfg_*.bak) 3>&1 1>&2 2>&3) + + if [ -z "$BACKUP_FILE" ]; then + whiptail --title "Error" --msgbox "No se seleccionó ninguna copia de seguridad." 8 40 + exit 1 + fi + + cp "$BACKUP_FILE" "$STORAGE_CFG" + whiptail --title "Restauración Completada" --msgbox "Se ha restaurado el archivo storage.cfg desde la copia de seguridad: $BACKUP_FILE" 8 40 + + reparar_storage_cfg +} # Menú principal -OPTION=$(whiptail --title "Gestor de storage.cfg" --menu "Selecciona una opción:" 15 60 3 \ - "1" "Reparar storage.cfg" \ - "2" "Realizar copia de seguridad" \ - "3" "Recuperar copia de seguridad" 3>&1 1>&2 2>&3) +OPTION=$(whiptail --title "Gestor de Storage.cfg" --menu "Selecciona una opción:" 15 60 3 \ + "1" "Realizar copia de seguridad del archivo storage.cfg" \ + "2" "Restaurar copia de seguridad y comprobar consistencia" \ + "3" "Reparar archivo storage.cfg si se han cambiado discos" 3>&1 1>&2 2>&3) case $OPTION in 1) - # Reparar storage.cfg - if [ -f "$STORAGE_CFG" ]; then - mv "$STORAGE_CFG" "${STORAGE_CFG}.bak" - fi - echo "# Archivo de configuración de almacenamiento reparado automáticamente" > "$STORAGE_CFG" - - VG_LIST=$(vgs --noheadings -o vg_name) - if [ -n "$VG_LIST" ]; then - for VG in $VG_LIST; do - echo -e "lvm-thin: local-lvm\n\tthinpool data\n\tvgname $VG\n\tcontent rootdir,images\n" >> "$STORAGE_CFG" - done - fi - - whiptail --title "Reparación completada" --msgbox "El archivo storage.cfg se ha reparado correctamente." 8 40 - ;; - 2) - # Realizar copia de seguridad BACKUP_FILE="${DUMP_DIR}/storage.cfg_$(date +%Y%m%d%H%M%S).bak" cp "$STORAGE_CFG" "$BACKUP_FILE" whiptail --title "Copia de Seguridad" --msgbox "Se ha creado una copia de seguridad en: $BACKUP_FILE" 8 40 ;; + 2) + restaurar_backup + ;; 3) - # Recuperar copia de seguridad - BACKUP_LIST=$(ls "$DUMP_DIR"/storage.cfg_*.bak 2>/dev/null) - if [ -z "$BACKUP_LIST" ]; then - whiptail --title "Error" --msgbox "No se encontraron copias de seguridad." 8 40 - exit 1 - fi - - BACKUP_FILE=$(whiptail --title "Seleccionar Copia de Seguridad" --menu "Selecciona la copia de seguridad a recuperar:" 15 60 8 $(for file in $BACKUP_LIST; do echo "$file $(basename "$file")"; done) 3>&1 1>&2 2>&3) - - if [ -z "$BACKUP_FILE" ]; then - whiptail --title "Error" --msgbox "No se seleccionó ninguna copia de seguridad." 8 40 - exit 1 - fi - - cp "$BACKUP_FILE" "$STORAGE_CFG" - whiptail --title "Recuperación completada" --msgbox "Se ha restaurado el archivo storage.cfg desde la copia de seguridad: $BACKUP_FILE" 8 40 + reparar_storage_cfg ;; *) exit 0