2026-02-13 11:39:12 +01:00
2026-02-13 11:39:12 +01:00
2026-02-13 11:32:22 +01:00

LVM Disk Auto Add

Script Bash per rilevare automaticamente un nuovo disco vuoto, aggiungerlo a LVM e aumentare il filesystem di root (/).

⚠️ Attenzione: questo script modifica in modo distruttivo la configurazione storage (inizializza il disco con pvcreate). Usalo solo se sai esattamente cosa stai facendo.

Cosa fa

Lo script auto-lvm-add-disk.sh esegue questa sequenza:

  1. Verifica che lutente sia root.
  2. Acquisisce un lock file (flock) per evitare esecuzioni concorrenti.
  3. Salva lo spazio iniziale del filesystem /.
  4. Forza una scansione SCSI su tutti gli host (/sys/class/scsi_host/host*/scan).
  5. Se passato --disk, usa il disco specificato (con validazioni); altrimenti cerca il primo disco di tipo disk, senza filesystem (FSTYPE vuoto) e senza partizioni.
  6. Inizializza il disco come Physical Volume (pvcreate).
  7. Determina il device del mountpoint /, il relativo LV e il VG associato.
  8. Estende il Volume Group (vgextend).
  9. Estende il Logical Volume al 100% dello spazio libero (lvextend -l +100%FREE).
  10. Esegue il resize del filesystem in base al tipo (ext2/ext3/ext4resize2fs, xfsxfs_growfs /).
  11. Mostra un riepilogo finale e scrive il log in extend-lvm.log.

Requisiti

  • Linux con LVM già configurato.
  • Filesystem root supportato: ext2, ext3, ext4, xfs.
  • Accesso root.
  • Utility richieste: lsblk, df, awk, grep, findmnt, lvs, pvcreate, vgextend, lvextend, flock.
  • Utility resize: resize2fs (per ext*) oppure xfs_growfs (per xfs).

Limitazioni importanti

Lo script assume implicitamente che:

  • il mountpoint / sia su un Logical Volume LVM;
  • il disco da aggiungere sia chiaramente identificabile come “nuovo e vuoto”;
  • il filesystem root sia tra quelli supportati (ext* o xfs).

In ambienti con più VG/LV o dischi multipli non inizializzati, è necessario verificare attentamente il comportamento prima delluso in produzione.

Audit rapido dello script (stato attuale)

Esito: script migliorato con hardening sui punti più critici.

Priorità alta

  • Selezione target VG/LV più sicura: ora usa il device del mountpoint / e ricava il VG con lvs.
  • Rilevamento disco più robusto: supporta --disk per scelta esplicita del device target.
  • Compatibilità filesystem: supporto ext* e xfs con comando dedicato.

Priorità media

  • Verifica dipendenze allavvio: controllo esplicito dei comandi richiesti.
  • Lock anti-esecuzione concorrente: esecuzione esclusiva con flock.
  • Migliore robustezza shell: aggiunto set -o pipefail.

Priorità bassa

  • Parametrizzazione avanzata: opzioni CLI per specificare VG/LV e mountpoint (oltre a --disk già presente).
  • Conferma interattiva in LIVE (con bypass --yes) per ridurre errori operativi.
  • Log path assoluto (es. /var/log/extend-lvm.log) per evitare dipendenza dalla directory corrente.

Roadmap minima consigliata

  1. Introdurre parametri opzionali --vg, --lv.
  2. Migliorare validazioni pre-flight (es. conferma interattiva opzionale in live).
  3. Consentire lock path configurabile via variabile/env.
  4. Aggiungere validazioni extra su dischi multipath/LUN complesse.
  5. Mantenere test come default operativo in ambienti sensibili.

Utilizzo

1) Dare permessi di esecuzione

chmod +x auto-lvm-add-disk.sh

2) Eseguire in modalità test (dry-run)

sudo ./auto-lvm-add-disk.sh test

In questa modalità i comandi vengono solo loggati ([TEST]) e non eseguiti.

2-bis) Specificare il disco esplicitamente (consigliato in produzione)

sudo ./auto-lvm-add-disk.sh --disk /dev/sdb

Oppure:

sudo ./auto-lvm-add-disk.sh test --disk=sdb

3) Eseguire in modalità live

sudo ./auto-lvm-add-disk.sh

In modalità live i comandi vengono eseguiti ([RUN]).

Log

Il log viene scritto nel file:

  • extend-lvm.log

Ogni riga include timestamp e stato ([TEST], [RUN], messaggi info/errore).

Esempio flusso operativo consigliato

  1. Collega/aggiungi il nuovo disco alla VM/server.
  2. Esegui prima il test:
    • sudo ./auto-lvm-add-disk.sh test
  3. Verifica nel log che il disco selezionato sia quello atteso.
  4. Esegui in live:
    • sudo ./auto-lvm-add-disk.sh
  5. Controlla output finale e spazio disponibile con:
    • df -h /

Troubleshooting

ERRORE: eseguire come root

Esegui lo script con sudo o come utente root.

ERRORE: nessun disco nuovo trovato

Possibili cause:

  • il disco non è visibile al sistema (controlla lsblk),
  • non è vuoto,
  • contiene partizioni,
  • non è stato completato il rescan lato hypervisor/controller.

ERRORE: il device root (...) non risulta un Logical Volume LVM

Il mountpoint / non è su LVM oppure il mapping device non è leggibile tramite lvs.

ERRORE: filesystem root non supportato

Il filesystem su / non è tra ext2/ext3/ext4/xfs.

ERRORE: comando richiesto non trovato

Installa il pacchetto che contiene il comando mancante (tool LVM, util-linux o e2fsprogs/xfsprogs a seconda del filesystem).

ERRORE: script già in esecuzione (lock: ...)

È già presente un'altra esecuzione attiva. Attendi la fine del processo precedente o verifica lock stale.

Sicurezza operativa

  • Testare sempre prima in ambiente di staging.
  • Effettuare backup/snapshot prima dellesecuzione live.
  • Evitare esecuzione concorrente dello script.
  • Verificare manualmente disco target in ambienti critici.

Exit code

  • 0: esecuzione completata.
  • 1: errore (es. non root, nessun disco trovato, o comando fallito).

File del progetto

  • auto-lvm-add-disk.sh script principale.
  • README.md documentazione.
Description
No description provided
Readme 30 KiB
Languages
Shell 100%