[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: lvm e mdadm



Il 06/09/21 09:58, Piviul ha scritto:
Il 03/09/21 16:42, gerlos ha scritto:
Inoltre è buona pratica non usare immediatamente tutto lo storage disponibile sui PV, ma anzi far crescere le dimensioni di logical volume man mano che emerge la necessità - così hai spazio sia per eventuali snapshot, sia per eventuale over provisioning che preservi lo storage.

Grazie Gerlos, in che senso "over provisioning che preservi lo storage? Ma usi l'over provisioning? Quindi hai fatto un volume logico come pool e poi i vari LV sul pool? Certamente se devo gestire macchine virtuali l'over provisioning è fondamentale ma nel caso di un file system locale... non vedo un gran vantaggio se gestisci lo spazio come dicevi cioè non assegnandolo tutto e facendo il resize alla bisogna...

Ma forse mi sono perso qualcosa.


No, sono io che ho messo troppa carne al fuoco, scusami 😅

Le motivazioni sono 3: preservare lo storage, allocarlo in modo indolore quando emerge la necessità, fare snapshot.

Partiamo dal "preservare lo storage": stavo pensando agli SSD, in particolare a quelli più vecchi, in cui era uso lasciare spazio inutilizzato per agevolare il wear-leveling. Con gli SSD più recenti questo non dovrebbe essere più un problema. Ad ogni modo lasciare blocchi liberi (a meno che non ti serva riempirli!) "aiuta" anche con gli HDD, visto che un eventuale bad block sul disco può essere riallocato dal firmware tra quelli lasciati liberi, senza conseguenze sui dati. Al giorno d'occhi penso che che sia più paranoia che prudenza 😉


Passiamo a cose più utili: l'uso dello spazio disponibile. Se partizioni direttamente il ferro, non è raro avere una partizione per /, una per /home e una per la swap.

Se dopo l'installazione ti accorgi che hai creato una partizione troppo grande per / a discapito di /home, ti tocca almeno spegnere tutto e avviare da un sistema live e ripartizionare tutto per rimediare. Similmente, quando hai fatto l'installazione potresti aver valutato male lo spazio necessario per /boot, per /var o per la swap, o le tue necessità potrebbero essere cambiate nel frattempo, e potresti dover ripartizionare.

Con LVM questo non è un problema. Basta creare dei volumi logici di dimensioni appena appena maggiori di quelle che ti servono sul momento, ed estenderli quando emerge la necessità, visto che puoi estendere i volumi con file system ext4 e xfs al volo, senza smontarli.

Esempio: disco da 1TB, al momento dell'installazione lo hai partizionato in modo tradizionale ed hai fatto una partizione da 64 GB per /, 16 GB per swap, 64 GB per /var e il resto per /home.

Dopo un po' vedi che 64 GB sono troppi per il file system root, perché usi meno di 12 GB, mentre i 64 GB di /var ti stanno stretti perché hai diverse macchine virtuali e magari ti serve più swap. Ti tocca spegnere tutto, interrompendo i servizi, *fare un backup*, ripartizionare, e sperare di averci preso questa volta.

Oppure mettiamo che aggiungi un secondo disco da 1TB perché vuoi mettere quel sistema su RAID 1: ti tocca spegnere e ricostruire tutto.

Mettiamo invece che usi LVM: il tuo primo disco da 1TB sarà un volume fisico (chiamiamolo PV1) di un gruppo di volumi chiamato VG1. In questo gruppo di volumi crei questi volumi logici:

- rootlv da 16 GB
- swaplv da 16 GB
- varlv da 32 GB
- homelv da 100 GB

Rispetto alla volta precedente stai effettivamente impegnando 16+16+32+100 = 164 GB del tuo storage, ed hai oltre 800 GB che puoi assegnare di volta in volta quando ti serve, *senza spegnere nulla*.

Per esempio, per estendere /home, /var e swap per soddisfare le tue necessità puoi fare così:

$ sudo lvextend -L +100G --resizefs /dev/VG1/varlv
$ sudo lvextend -L +100G --resizefs /dev/VG1/homelv
$ sudo lvcreate -L 64G VG1 -n swaplv2
$ sudo mkswap /dev/VG1/swaplv2
$ sudo swapon /dev/VG1/swaplv2
$ sudo swapoff /dev/VG1/swaplv
$ sudo lvremove /dev/VG1/swaplv
$ sudo lvrename /dev/VG1/swaplv2 /dev/VG1/swaplv    # così non devo correggere /etc/fstab

Come hai visto estendere i file system è facile e gli utenti non si accorgono di nulla.

La swap non la possiamo ridimensionare al volo, ma possiamo crearne una nuova e successivamente eliminare quella vecchia. Ma anche in questo caso facciamo fatto tutto in modo pulito e ordinato, senza interrompere alcun servizio e magari senza dover modificare /etc/fstab.

Mettiamo infine che hai aggiunto il secondo disco da 1TB e vuoi mettere /home sotto RAID 1. Con LVM semplicemente crei un nuovo volume fisico (chiamiamolo PV2), lo aggiungi al gruppo VG1, e converti il volume homelv con `sudo lvconvert --type raid1 -m1 VG1/homelv` *senza dover spegnere nulla*. 😲


Passiamo agli snapshot: se hai spazio libero sul gruppo di volumi, puoi fare snapshot dei volumi logici. Uno snapshot è una "fotografia" di un volume logico in un certo istante. Mentre esiste lo snapshot, LVM usa lo spazio libero sul gruppo di volumi per registrare le modifiche al volume originale (per questo ti serve spazio libero).

Per esempio puoi usare gli snapshot per fare backup coerenti del file system, visto che il contenuto non cambierà durante il processo di backup. Se vuoi fare il backup di un file system che contiene un database, ti basta interrompere il server database per il tempo necessario a creare lo snapshot (pochi secondi).

Oppure puoi usarli per esporre agli utenti delle versioni precedenti dei loro file, tenendo ad esempio degli snapshot quotidiani degli ultimi N giorni (occhio che non sono dei "veri" backup!). Oppure puoi usarli per fare delle elaborazioni di prova su un set di dati senza perdere tempo a fare copie: fai uno snapshot, elabori i dati, controlli il risultato, e se necessario ripristini lo snapshot.

Oppure puoi usare gli snapshot come "rete di sicurezza" per gli aggiornamenti di sistema: prendi uno snapshot di /, installi gli aggiornamenti, e se qualcosa non funziona come ti aspetti ripristini il sistema allo snapshot precedente (l'unico inconveniente è che non puoi ripristinare il file system root "a caldo", e nel processo devi riavviare).

Quando usi gli snapshot la cosa importante è che lo snapshot abbia dimensioni sufficienti a contenere tutti i dati che cambiano nel frattempo e che il gruppo di volumi abbia sufficiente spazio libero a contenere lo snapshot, altrimenti la magia si rompe. 😉


Spero di averti confuso le idee a sufficienza! 🤣

gerlos


Reply to: