Ctrl K
ComunidadGuías…

resize_disk.sh

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/bin/bash

# ==============================================================================
# Script de Auto-Redimensionado de Disco (Hot-Resize)
# ==============================================================================
# Este script detecta si el disco físico ha crecido (ej. en Proxmox) y extiende
# automáticamente la partición y el sistema de archivos para usar todo el espacio.
#
# Requisitos: growpart (cloud-guest-utils), resize2fs
# Uso: sudo ./resize_disk.sh
# ==============================================================================

# Colores
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'

echo -e "${YELLOW}[*] Iniciando proceso de redimensionado inteligente...${NC}"

# 1. Detectar el dispositivo raiz
ROOT_DEVICE=$(findmnt / -o SOURCE -n)
echo -e "${GREEN}[+] Dispositivo raíz detectado: $ROOT_DEVICE${NC}"

# Obtener nombre del disco padre (ej. /dev/sda1 -> sda)
PARENT_DISK=$(lsblk -no pkname $ROOT_DEVICE)
PARTITION_NUM=$(echo "$ROOT_DEVICE" | grep -o '[0-9]*$')

if [ -z "$PARENT_DISK" ]; then
    echo -e "${RED}[!] Error: No se pudo determinar el disco padre.${NC}"
    exit 1
fi

FULL_PARENT_PATH="/dev/$PARENT_DISK"
echo -e "${GREEN}[+] Disco físico: $FULL_PARENT_PATH${NC}"
echo -e "${GREEN}[+] Partición a extender: #$PARTITION_NUM${NC}"

# 2. Rescanear el bus SCSI para detectar el nuevo tamaño (Hot-Plug)
echo -e "${YELLOW}[*] Rescaneando bus SCSI para detectar cambios de hardware...${NC}"
found_rescan=0
for path in /sys/class/scsi_device/*/device/rescan; do
    if [ -f "$path" ]; then
        echo 1 > "$path"
        found_rescan=1
    fi
done

# Intento alternativo por bloque
if [ -f "/sys/class/block/$PARENT_DISK/device/rescan" ]; then
    echo 1 > "/sys/class/block/$PARENT_DISK/device/rescan"
    found_rescan=1
fi

if [ $found_rescan -eq 1 ]; then
    echo -e "${GREEN}[+] Rescaneo de hardware completado.${NC}"
else
    echo -e "${RED}[!] Alerta: No se encontró ruta de rescan estándar. Intentando continuar...${NC}"
fi

# 3. Extender la tabal de particiones con growpart
echo -e "${YELLOW}[*] Intentando extender partición $PARTITION_NUM en $FULL_PARENT_PATH...${NC}"

if ! command -v growpart &> /dev/null; then
    echo -e "${RED}[!] 'growpart' no instalado. Instalando cloud-guest-utils...${NC}"
    apt-get update && apt-get install -y cloud-guest-utils
fi

OUT=$(growpart "$FULL_PARENT_PATH" "$PARTITION_NUM" 2>&1)
if [[ $OUT == *"NOCHANGE"* ]]; then
    echo -e "${GREEN}[=] La partición ya ocupa todo el espacio disponible.${NC}"
else
    echo -e "${GREEN}[+] Partición extendida correctamente.${NC}"
fi

# 4. Redimensionar el sistema de archivos (Filesystem)
echo -e "${YELLOW}[*] Redimensionando sistema de archivos...${NC}"
resize2fs "$ROOT_DEVICE"

echo -e "${GREEN}[✓] Proceso finalizado. Espacio actual:${NC}"
df -h /