Blog ·
Cosa non contiene un backup
La stessa opzione assente significa sì su una macchina virtuale e no su un container. Ecco come la copertura di Proxmox è stata misurata anziché promessa.
Di Provibr
Se chiede a un pannello di gestione se una macchina ha un backup, la risposta di solito è sì. La domanda interessante è più stretta e assai più difficile: quali parti si trovano nell’archivio e quali no. Un container con un montaggio collegato a una cartella dell’host possiede dati che nessun vzdump toccherà mai, e un pannello che su quella configurazione dice «salvato» non è ottimista, sta facendo una promessa a nome del software di qualcun altro.
Abbiamo quindi smesso di promettere e cominciato a misurare. Ogni backup e ogni punto di ripristino porta ora un’osservazione di com’era l’ospite in quel momento, e il pannello deduce la copertura da quell’osservazione e non dal fatto che un backup sia riuscito.
La stessa assenza, due significati opposti
Il motivo per cui questo va misurato e non ragionato è una regola di comportamento di Proxmox che per i due tipi di ospite va esattamente nella direzione opposta.
In un container un punto di montaggio è nell’archivio solo se vi compare backup=1. La documentazione è esplicita: per includere un punto di montaggio nei backup occorre attivare la relativa opzione. L’assenza significa no.
In una macchina virtuale un disco è nell’archivio a meno che non vi compaia backup=0. Questo non appare in tali termini nel manuale; appare nella funzione che consegna a vzdump il suo elenco, dove il valore è letto come il contrassegno di backup del disco con uno come predefinito. L’assenza significa sì.
| Riga di configurazione | Nell’archivio? |
|---|---|
rootfs: local-lvm:vm-101-disk-0,size=8G | sì, sempre; la radice non conosce nemmeno il campo di backup |
mp0: local-lvm:vm-101-disk-1,mp=/data,backup=1 | sì |
mp0: local-lvm:vm-101-disk-1,mp=/data | no |
mp0: /srv/data,mp=/data (montaggio collegato) | no; il contenuto dei montaggi collegati non viene salvato |
mp0: /dev/sdb1,mp=/disk (montaggio di dispositivo) | no; lo stesso vale per i montaggi di dispositivo |
scsi0: local-lvm:vm-100-disk-0,size=32G | sì |
scsi1: local-lvm:vm-100-disk-1,backup=0 | no |
ide2: local:iso/debian.iso,media=cdrom | non pertinente |
efidisk0: … con bios: ovmf | sì |
efidisk0: … senza bios: ovmf | no |
tpmstate0: … | sì |
scsi2: /dev/sdb (passaggio diretto) | sì |
unused0: local-lvm:vm-100-disk-4 | no |
virtiofs0: dataset-a | no |
Le due righe in grassetto sono la stessa assenza. Le pieghi in un’unica frase e uno dei due schermi mente, senza che nessuno dei due segnali un errore.
Leggere la fonte, non l’intuizione
Tre di quelle righe sono risultate diverse da quanto il piano di questo lavoro supponeva, e tutte e tre sono state risolte leggendo Proxmox anziché discutendo.
Di un disco in passaggio diretto si era supposto che fosse un dato dell’host destinato a restare indietro, per analogia con il montaggio di dispositivo di un container. Non è così. La funzione che costruisce l’elenco di backup non guarda mai il percorso, e il passo di preparazione trasforma un identificativo di volume senza storage dietro in un dispositivo a blocchi e lo include. Sbagliare nella direzione che sembra prudente direbbe ai clienti che ci sono dati fuori dal loro archivio mentre invece vi sono dentro, cosa che pare innocua finché non si nota che impone una conferma a ogni ripristino e insegna così alle persone a passare oltre le conferme.
I dischi scollegati e le cartelle condivise dell’host semplicemente mancavano nel piano. Un unusedN è un vero dato del cliente che sta sullo storage senza bus collegato, e vzdump annota che lo salta. Un virtiofsN è una cartella dell’host e mai un volume, il che ne fa l’equivalente del montaggio collegato per una macchina virtuale. Entrambi sono buchi reali di copertura ed entrambi sarebbero stati contati come completi.
I prefissi delle chiavi di disco e le loro quantità vengono dallo stesso posto: quattro posizioni IDE, sei SATA, trentuno SCSI, sedici virtio, un disco EFI, uno stato TPM, duecentocinquantasei posizioni inutilizzate, dieci virtiofs. Una chiave fuori da quegli intervalli per Proxmox non è un disco, quindi non deve diventarlo qui in silenzio. E virtiofs viene verificato prima di virtio, perché virtiofs0 comincia con virtio: al contrario, una cartella condivisa dell’host sarebbe letta come disco e segnalata come salvata.
Sconosciuto non si chiama mai completo
Le parole sullo schermo per un ospite non misurato sono «non stabilito», per esteso: che cosa contiene un backup non è stato stabilito. Mai «completa», mai «fuori dal backup». Ci sono tre modi per arrivarci e tutti e tre sono reali: l’ospite è di un tipo che l’agente non sa leggere, l’agente è precedente alla versione che legge le configurazioni, oppure l’agente ci ha provato e non è riuscito ad accedere.
Quest’ultimo caso è il motivo per cui l’osservazione porta un contrassegno esplicito che dice che la configurazione è stata letta. Senza di esso un elenco vuoto di punti di montaggio non si distingue da un container senza montaggi aggiuntivi, salvo che il secondo non esiste: una radice c’è sempre. Un agente che non ha potuto guardare si leggerebbe altrimenti come un ospite senza nulla fuori dall’archivio, che è esattamente il guasto per cui questo lavoro esiste.
Due regole spingono nella stessa direzione. Una configurazione di container che è stata letta ma non contiene una radice è sconosciuta e non completa, perché evidentemente è stato letto qualcosa che non era una configurazione di container. E una configurazione di macchina virtuale in cui non c’è nulla che sollevi una domanda di copertura, nulla o soltanto lettori ottici, è sconosciuta per lo stesso motivo: completa significa che c’è tutto, e dirlo di zero cose è un’affermazione senza misura sotto. Il prezzo è noto e accettato, ed è che una macchina davvero senza dischi ora si legge come non stabilita e chiede una conferma al ripristino. È il lato in cui sbagliare non costa nulla.
Anche il verdetto è ordinato di proposito: dimostrabilmente fuori batte non misurato. Un container con un montaggio collegato e una riga illeggibile è parziale e non sconosciuto, perché la parte che conta è provata. La riga illeggibile non sparisce; conserva la sua riga con la sua parola.
Non pertinente non è la stessa cosa di escluso
Un lettore ottico riceve uno stato di copertura proprio, e la distinzione non è pignoleria ma l’azione che ne discende.
Escluso significa che ci sono dati del cliente fuori dall’archivio e che in Proxmox esiste una casella che lo cambia. Un lettore ottico non porta dati di questa macchina: è un’immagine di una libreria, oppure il disco di inizializzazione che viene rifatto a ogni avvio, e Proxmox lo salta prima di valutare qualsiasi altra cosa. Se un lettore ottico si chiamasse escluso, ogni macchina con un’immagine nel lettore sarebbe parziale e ogni ripristino chiederebbe una conferma su un lettore in cui non c’è nulla. Le persone imparerebbero che la conferma non significa niente, e allora non significherebbe niente.
La riga compare comunque nella tabella, con la sua parola. Una riga assente solleva il dubbio che non si sia guardato affatto, ed è proprio l’ambiguità che il contrassegno di lettura elimina.
La conferma cade dalla parte sicura
Ripristinare un archivio la cui copertura sia diversa da un «completa» misurato richiede di spuntare una casella che nomina ciò che è rimasto fuori. Anche con sconosciuta, ed è la parte deliberata: un punto di ripristino vecchio, o un archivio creato da qualcun altro, può benissimo mancare di dati dell’host, e la casella è dove il cliente impara a verificarlo per conto proprio. Solo una copertura completa e misurata la salta, perché allora non c’è davvero nulla da confermare.
La stessa frase presidia due porte, il punto di ingresso e la funzione dietro, perché uno schermo non è un confine. E il pulsante di conferma non viene disattivato mentre il pannello è aperto: un elemento disattivato non può trattenere il fuoco, quindi una finestra che disattiva chi l’ha aperta non può restituire il fuoco alla chiusura e chi naviga da tastiera finisce sul corpo del documento. Uno stato occupato e un oscuramento fanno lo stesso lavoro senza rompere questo.
Ciò che è rimasto fuori dall’archivio viene inoltre scritto come evento sul ripristino, a livello di avviso, con i punti di montaggio tra i suoi dati. Un ripristino riuscito in silenzio lasciando indietro tre cartelle dovrebbe restare rintracciabile un mese dopo da chi non era presente.
Cosa metteremmo per iscritto
- Misuri la copertura, non la deduca. «Il backup è riuscito» e «i suoi dati sono nel backup» sono due affermazioni su cose diverse.
- Verifichi se un valore predefinito è lo stesso su entrambi i lati della sua astrazione. Qui un’opzione assente significa sì per un tipo di ospite e no per l’altro, e una frase condivisa risulta falsa su esattamente uno schermo senza errori da nessuna parte.
- Legga il codice che costruisce davvero l’elenco, non solo il manuale. Tre delle nostre regole erano sbagliate finché non l’abbiamo fatto, e una nella direzione che sembra prudente.
- Dia a ciò che non è misurato una parola propria e non la lasci mai confondere con il sì o con il no.
- Dia una parola propria anche a ciò che non pone domande. Uno stato che impone una conferma priva di senso insegna a ignorare le conferme.
- Separi l’osservazione dal giudizio. L’agente riferisce ciò che ha visto; una funzione decide cosa significa, con prove accanto e senza che chi riferisce possa affermare una completezza.
Per chiarezza su cosa sia tutto questo: i backup dei clienti sono dietro un interruttore di rilascio disattivato per impostazione predefinita, nulla di ciò è acquistabile oggi, e le regole sono state verificate sulla documentazione e sul codice di Proxmox e non su un ipervisore proprio in funzione. Tre cose restano non provate o deliberatamente fuori ambito. La copertura di un singolo punto di ripristino è ereditata dall’esecuzione che lo ha prodotto anziché letta dall’archivio. I dischi di macchina virtuale con backup=0 si vedono in questa tabella e in nessun altro punto del prodotto. E una macchina davvero senza dischi si legge come non stabilita, un prezzo preferito all’alternativa.
Dal lavoro sui backup di Provibr. Perché un ripristino mai provato non è un backup è in un backup mai ripristinato, e cosa garantiscono davvero le tre modalità di vzdump è in le modalità vzdump di Proxmox: cosa garantiscono.