++ Primo Caricamento

This commit is contained in:
2026-02-13 11:32:22 +01:00
commit 4e3a4732c2
2 changed files with 394 additions and 0 deletions

172
README.md Normal file
View File

@@ -0,0 +1,172 @@
# 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.