Files
lvm-disk-autoadd/README.md
2026-02-13 11:32:22 +01:00

173 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`.
1. Acquisisce un lock file (`flock`) per evitare esecuzioni concorrenti.
1. Salva lo spazio iniziale del filesystem `/`.
1. Forza una scansione SCSI su tutti gli host (`/sys/class/scsi_host/host*/scan`).
1. Se passato `--disk`, usa il disco specificato (con validazioni); altrimenti cerca il primo disco di tipo `disk`, senza filesystem (`FSTYPE` vuoto) e senza partizioni.
1. Inizializza il disco come Physical Volume (`pvcreate`).
1. Determina il device del mountpoint `/`, il relativo LV e il VG associato.
1. Estende il Volume Group (`vgextend`).
1. Estende il Logical Volume al 100% dello spazio libero (`lvextend -l +100%FREE`).
1. Esegue il resize del filesystem in base al tipo (`ext2/ext3/ext4``resize2fs`, `xfs``xfs_growfs /`).
1. 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
```bash
chmod +x auto-lvm-add-disk.sh
```
### 2) Eseguire in modalità test (dry-run)
```bash
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)
```bash
sudo ./auto-lvm-add-disk.sh --disk /dev/sdb
```
Oppure:
```bash
sudo ./auto-lvm-add-disk.sh test --disk=sdb
```
### 3) Eseguire in modalità live
```bash
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.