Lo scenario
Supponiamo di avere un Gruppo di Volumi VG contenente un volume logico LV.
Il device sarà:
/dev/VG/LV
oppure, usando i devices sotto /dev/mapper:
/dev/mapper/VG-LV
Si noti che nell’uno e nell’altro caso si tratta di link simbolici ai device veri e propri gestiti dal device mapper: /dev/dm-* .
Se si crea una snapshot LVSNAP il device relativo sarà:
/dev/VG/LVSNAP
alias
/dev/mapper/VG-LVSNAP
Se LV (e quindi LVSNAP) è partizionato (supponiamo contenga per semplicità una sola partizione), posso usare il comando kpartx per ottenere i device relativi alle partizioni.
kpartx -av /dev/mapper/VG-LVSNAP
ottenendo il device:
/dev/mapper/VG-LVSNAPp1
La situazione è usuale se LV è usato come storage per macchina virtuale, ed è stato partizionato dall’interno della stessa.
In tal caso l’uso di kpartx sulla snapshot permette di montare sul virtualizzatore ed accedere da lì al filesystem (per backup a livello di filesystem, ad esempio) sulla partizione senza impattare sul normale funzionamento della macchina virtuale.
Il problema, e la soluzione.
Se per sventura LVSNAP si riempie, lvremove sulla stessa non funziona, perchè il device /dev/mapper/VG-LVSNAP è bloccato a causa del riferimento al device relativo alla partizione: /dev/mapper/VG-LVSNAPp1.
Non è nemmeno possibile rimuovere la partizione, perchè anche kpartx -dv /dev/mapper/VG-LVSNAP va in errore.
Per uscire dallo stallo, ci viene in soccorso il comando “dmsetup remove“:
dmsetup remove /dev/mapper/VG-LVSNAPp1
che rimuove a livello di device mapper il device relativo alla partizione.
A questo punto si può dare con successo:
lvremove /dev/mapper/VG-LVSNAP