resize_disk.sh
Rama main · réplica de lectura del repositorio original.
#!/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 /