5.7 KiB
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:
- Verifica che l’utente sia
root. - Acquisisce un lock file (
flock) per evitare esecuzioni concorrenti. - Salva lo spazio iniziale del filesystem
/. - Forza una scansione SCSI su tutti gli host (
/sys/class/scsi_host/host*/scan). - Se passato
--disk, usa il disco specificato (con validazioni); altrimenti cerca il primo disco di tipodisk, senza filesystem (FSTYPEvuoto) e senza partizioni. - Inizializza il disco come Physical Volume (
pvcreate). - Determina il device del mountpoint
/, il relativo LV e il VG associato. - Estende il Volume Group (
vgextend). - Estende il Logical Volume al 100% dello spazio libero (
lvextend -l +100%FREE). - Esegue il resize del filesystem in base al tipo (
ext2/ext3/ext4→resize2fs,xfs→xfs_growfs /). - 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(perext*) oppurexfs_growfs(perxfs).
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*oxfs).
In ambienti con più VG/LV o dischi multipli non inizializzati, è necessario verificare attentamente il comportamento prima dell’uso 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 conlvs. - ✅ Rilevamento disco più robusto: supporta
--diskper scelta esplicita del device target. - ✅ Compatibilità filesystem: supporto
ext*exfscon comando dedicato.
Priorità media
- ✅ Verifica dipendenze all’avvio: 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
--diskgià 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
- Introdurre parametri opzionali
--vg,--lv. - Migliorare validazioni pre-flight (es. conferma interattiva opzionale in live).
- Consentire lock path configurabile via variabile/env.
- Aggiungere validazioni extra su dischi multipath/LUN complesse.
- Mantenere
testcome 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
- Collega/aggiungi il nuovo disco alla VM/server.
- Esegui prima il test:
sudo ./auto-lvm-add-disk.sh test
- Verifica nel log che il disco selezionato sia quello atteso.
- Esegui in live:
sudo ./auto-lvm-add-disk.sh
- 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 dell’esecuzione 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.