Ho cancellato un file all’interno di una mia VM su Proxmox.
Non ne avevo bisogno, salvo poi scoprire che in realtà mi sarebbe tornato utile qualche giorno dopo.
VM e container vanno in backup una volta al giorno, quindi il recupero non costituiva nulla di così drammatico. L’idea era: non spengo la macchina in produzione, la lascio andare, nel frattempo cerco di recuperare quel file, il tutto senza accendere la VM recuperata da backup, per evitare di dare fastidio a quella di produzione.
Lavorare senza PBS
Non ho ancora messo in piedi Proxmox Backup Server, in quel caso sarebbe stato tutto nettamente più semplice. Lo farò, per forza, devo solo trovare il tempo utile per potermi studiare la soluzione, e pensare che la macchina è già in piedi grazie allo script messo a disposizione da Proxmox VE Scripts (ma sto tenendo spento il LXC fino a quando non sarò capace di padroneggiarlo).
Lo scenario è quindi tutto sommato semplice: recupero del backup intero della macchina, da tenere spento, con un ID (e un nome macchina) ovviamente differente per non dare fastidio alla VM di produzione. Le operazioni le ho fatte in parte da interfaccia web di Proxmox, in parte via terminale direttamente sul nodo Proxmox, montando il disco della VM in modalità sola lettura e copiando poi i dati necessari verso un altro server (quello di produzione, appunto).
La VM recuperata aveva nel mio caso ID 444.
Per prima cosa ho controllato la configurazione della macchina (lanciando un qm config 444), con un output che dovrebbe assomigliare a questo:
scsi0: vmstorage:vm-444-disk-0,size=18G
Questo significa che il disco della VM si trovava nello storage vmstorage ed era identificato come vm-444-disk-0.
Verifica del volume della VM
Per individuare il volume logico associato alla VM basta lanciare un lvs | grep 444.
Nel mio specifico caso era vm-444-disk-0 vmstorage. Ho poi verificato anche il device relativo al disco tramite ls -la /dev/vmstorage/vm-444-disk-0 trovando che si trattava di un link simbolico verso un device mapper (/dev/vmstorage/vm-444-disk-0 -> ../dm-28).
Nel frattempo, per portarmi avanti, mi sono creato un mountpoint di appoggio che avrei usato per montare il disco della VM recuperata, un più che sufficiente mkdir /mnt/RECUPERO.
Installazione di kpartx e mappatura delle partizioni disco
kpartx non fa solitamente parte dei tool predefiniti di Proxmox, ti servirà quindi installarlo (apt install kpartx). A installazione terminata ti basterà lanciare un kpartx -av /dev/vmstorage/vm-444-disk-0. Salvo anomalie avrai un output somigliante a questo:
add map vmstorage-vm--444--disk--0p1 (252:29): 0 37746688 linear 252:28 2048
Questo indicava che era stata rilevata un’unica partizione, disponibile come /dev/mapper/vmstorage-vm--444--disk--0p1.
Montaggio del disco in Read-Only
A questo punto puoi montare la partizione in sola lettura nella directory creata in precedenza:
mount -o ro,noload /dev/mapper/vmstorage-vm--444--disk--0p1 /mnt/RECUPERO/
Le opzioni usate sono:
- ro: monta il filesystem in sola lettura;
- noload: evita il replay del journal, utile soprattutto con filesystem ext4.
Verifica quindi che il mount sia andato a buon fine (ls -la /mnt/RECUPERO/).
Ora puoi fare quello che serve, recupera i dati, portali altrove. Al termine, ricorda di smontare il disco (umount /mnt/RECUPERO) e – se non ti serve più come immagino – eliminarlo del tutto.
In conclusione
Questa procedura mi ha permesso di montare il disco di una VM Proxmox spenta in modalità read-only, esplorare il filesystem e recuperare i dati necessari senza avviare la macchina virtuale.
È una soluzione tutto sommato semplice (non quanto passare da PBS, ma a questo manca la difficoltà e l’effort di mettere e tenere poi in piedi lo stesso PBS), efficace e molto utile quando una VM non parte più o – più semplicemente – per recuperare uno o più file come nel mio “caso d’uso“.
Se hai dubbi, l’area commenti è a tua totale disposizione! 🙂👋
#KeepItSimple