Săriți la conținut

Blog ·

Ce nu conține o copie de siguranță

Aceeași opțiune absentă înseamnă da pe o mașină virtuală și nu pe un container. Iată cum a fost măsurată acoperirea Proxmox în loc să fie doar promisă.

De Provibr

Dacă întrebi un panou de administrare dacă o mașină are copie de siguranță, răspunsul este de obicei da. Întrebarea interesantă este mai îngustă și mult mai grea: ce părți se află în arhivă și care nu. Un container cu o montare legată către un director al gazdei are date pe care niciun vzdump nu le va atinge vreodată, iar un panou care despre acea configurație spune „salvat” nu este optimist, ci face o promisiune în numele software-ului altcuiva.

Am încetat deci să promitem și am început să măsurăm. Fiecare copie și fiecare punct de restaurare poartă acum o observație despre cum arăta oaspetele în acel moment, iar panoul deduce acoperirea din acea observație și nu din faptul că o copie a reușit.

Aceeași absență, două sensuri opuse

Motivul pentru care asta se măsoară și nu se raționează este o regulă de comportament a Proxmox care merge exact în sens invers pentru cele două tipuri de oaspete.

La un container, un punct de montare este în arhivă doar dacă acolo scrie backup=1. Documentația este explicită: pentru a include un punct de montare în copii, trebuie activată opțiunea corespunzătoare. Absența înseamnă nu.

La o mașină virtuală, un disc este în arhivă dacă nu scrie acolo backup=0. Asta nu apare cu aceste cuvinte în manual; apare în funcția care îi predă lui vzdump lista, unde valoarea este citită ca marcajul de copiere al discului cu unu ca valoare implicită. Absența înseamnă da.

Linie de configurațieÎn arhivă?
rootfs: local-lvm:vm-101-disk-0,size=8Gda, mereu; rădăcina nici măcar nu cunoaște câmpul de copiere
mp0: local-lvm:vm-101-disk-1,mp=/data,backup=1da
mp0: local-lvm:vm-101-disk-1,mp=/datanu
mp0: /srv/data,mp=/data (montare legată)nu; conținutul montărilor legate nu este copiat
mp0: /dev/sdb1,mp=/disk (montare de dispozitiv)nu; același lucru este valabil pentru montările de dispozitiv
scsi0: local-lvm:vm-100-disk-0,size=32Gda
scsi1: local-lvm:vm-100-disk-1,backup=0nu
ide2: local:iso/debian.iso,media=cdromnu se aplică
efidisk0: … cu bios: ovmfda
efidisk0: … fără bios: ovmfnu
tpmstate0: …da
scsi2: /dev/sdb (trecere directă)da
unused0: local-lvm:vm-100-disk-4nu
virtiofs0: dataset-anu

Cele două rânduri îngroșate sunt aceeași absență. Dacă le pliezi într-o singură frază, unul dintre cele două ecrane minte, iar niciunul nu semnalează vreo eroare.

Citirea sursei, nu a intuiției

Trei dintre acele rânduri au ieșit altfel decât presupunea planul acestei lucrări, iar toate trei au fost lămurite citind Proxmox în loc să discutăm.

Despre un disc în trecere directă s-a presupus că este dată a gazdei care rămâne în urmă, prin analogie cu montarea de dispozitiv a unui container. Nu este așa. Funcția care construiește lista de copiere nu se uită niciodată la cale, iar pasul de pregătire transformă un identificator de volum fără stocare în spate într-un dispozitiv bloc și îl include. A greși în direcția care pare prudentă le-ar spune clienților că există date în afara arhivei lor care de fapt sunt înăuntru, ceea ce sună inofensiv până observi că impune o confirmare la fiecare restaurare și îi învață astfel pe oameni să treacă peste confirmări.

Discurile detașate și directoarele partajate ale gazdei pur și simplu lipseau din plan. Un unusedN este dată reală a clientului, aflată pe stocare fără magistrală atașată, iar vzdump consemnează că îl sare. Un virtiofsN este un director al gazdei și niciodată un volum, ceea ce îl face echivalentul montării legate pentru o mașină virtuală. Ambele sunt goluri reale de acoperire și ambele ar fi fost numărate drept complete.

Prefixele cheilor de disc și cantitățile lor vin din același loc: patru locuri IDE, șase SATA, treizeci și unu SCSI, șaisprezece virtio, un disc EFI, o stare TPM, două sute cincizeci și șase de locuri nefolosite, zece virtiofs. O cheie din afara acestor intervale nu este un disc pentru Proxmox, deci nu are voie să devină unul aici în tăcere. Iar virtiofs este verificat înaintea lui virtio, fiindcă virtiofs0 începe cu virtio: invers, un director partajat al gazdei ar fi citit ca disc și raportat ca salvat.

Necunoscut nu se numește niciodată complet

Cuvintele de pe ecran pentru un oaspete nemăsurat sunt „nestabilit”, pe larg: ce conține o copie nu a fost stabilit. Niciodată „completă”, niciodată „în afara copiei”. Există trei feluri de a ajunge acolo și toate trei sunt reale: oaspetele este de un tip pe care agentul nu îl poate citi, agentul este anterior versiunii care citește configurații, sau agentul a încercat și nu a putut ajunge la ea.

Ultimul caz este motivul pentru care observația poartă un marcaj explicit care spune că configurația a fost citită. Fără el, o listă goală de puncte de montare nu se distinge de un container fără montări suplimentare, doar că al doilea nu există: rădăcină există întotdeauna. Un agent care nu a putut privi s-ar citi altfel ca un oaspete fără nimic în afara arhivei, exact defecțiunea pentru care există această lucrare.

Două reguli împing în aceeași direcție. O configurație de container care a fost citită dar nu conține rădăcină este necunoscută și nu completă, fiindcă evident s-a citit altceva decât o configurație de container. Iar o configurație de mașină virtuală în care nimic nu ridică o întrebare de acoperire, nimic sau doar unități optice, este necunoscută din același motiv: complet înseamnă că totul este înăuntru, iar a spune asta despre zero lucruri este o afirmație fără măsurătoare sub ea. Prețul este cunoscut și acceptat, anume că o mașină cu adevărat fără discuri se citește acum ca nestabilită și cere o confirmare la restaurare. Aceasta este partea în care greșeala nu costă nimic.

Verdictul este de asemenea ordonat intenționat: demonstrabil în afară învinge nemăsurat. Un container cu o montare legată și o linie ilizibilă este parțial și nu necunoscut, fiindcă partea care contează este dovedită. Linia ilizibilă nu dispare; își păstrează rândul propriu cu cuvântul propriu.

Nu se aplică nu este același lucru cu exclus

O unitate optică primește o stare de acoperire proprie, iar distincția nu este pedanterie, ci acțiunea care decurge din ea.

Exclus înseamnă că există date ale clientului în afara arhivei și că în Proxmox există o bifă care schimbă asta. O unitate optică nu poartă date ale acestei mașini: este o imagine dintr-o bibliotecă sau discul de inițializare refăcut la fiecare pornire, iar Proxmox o sare înainte de a evalua orice altceva. Dacă o unitate optică s-ar numi exclusă, orice mașină cu o imagine în unitate ar fi parțială și orice restaurare ar cere o confirmare despre o unitate în care nu este nimic. Oamenii ar învăța că acea confirmare nu înseamnă nimic, și atunci nu ar mai însemna nimic.

Rândul apare totuși în tabel, cu cuvântul lui. Un rând absent ridică întrebarea dacă am privit măcar, exact ambiguitatea pe care marcajul de citire o înlătură.

Confirmarea cade în partea sigură

Restaurarea unei arhive a cărei acoperire este altceva decât un „completă” măsurat cere bifarea unei căsuțe care numește ce a rămas în afară. Inclusiv la necunoscută, iar aceasta este partea deliberată: un punct de restaurare vechi sau o arhivă creată de altcineva poate foarte bine să nu conțină date ale gazdei, iar căsuța este locul în care clientul învață să verifice singur. Doar o acoperire completă și măsurată o sare, fiindcă atunci chiar nu este nimic de confirmat.

Aceeași frază păzește două uși, punctul de intrare și funcția din spate, fiindcă un ecran nu este o graniță. Iar butonul de confirmare nu este dezactivat cât timp panoul este deschis: un element dezactivat nu poate păstra focalizarea, deci o fereastră care își dezactivează propriul declanșator nu poate returna focalizarea la închidere, iar cine navighează de la tastatură ajunge pe corpul documentului. O stare de ocupat și o estompare fac aceeași treabă fără să strice asta.

Ce a rămas în afara arhivei este în plus scris ca eveniment pe restaurare, la nivel de avertisment, cu punctele de montare în datele lui. O restaurare care a reușit în tăcere lăsând în urmă trei directoare trebuie să rămână găsibilă o lună mai târziu de cineva care nu a fost de față.

Ce am nota

  1. Măsurați acoperirea, nu o deduceți. „Copia a reușit” și „datele dumneavoastră sunt în copie” sunt două afirmații despre lucruri diferite.
  2. Verificați dacă o valoare implicită este aceeași de ambele părți ale abstracției. Aici o opțiune absentă înseamnă da pentru un tip de oaspete și nu pentru celălalt, iar o frază comună este falsă pe exact un ecran, fără eroare nicăieri.
  3. Citiți codul care construiește lista cu adevărat, nu doar manualul. Trei dintre regulile noastre erau greșite până am făcut-o, iar una în direcția care pare prudentă.
  4. Dați lucrului nemăsurat un cuvânt propriu și nu îl lăsați niciodată să se confunde cu da sau cu nu.
  5. Dați un cuvânt propriu și lucrului care nu ridică nicio întrebare. O stare care impune o confirmare lipsită de sens îi învață pe oameni să ignore confirmările.
  6. Separați observația de judecată. Agentul raportează ce a văzut; o funcție decide ce înseamnă, cu teste alături și fără ca raportorul să poată afirma o completitudine.

Ca să fie limpede ce este asta: copiile clienților stau în spatele unui comutator de lansare oprit implicit, nimic din toate acestea nu se poate cumpăra astăzi, iar regulile au fost verificate față de documentația și codul Proxmox și nu față de un hipervizor propriu în funcțiune. Trei lucruri rămân nedovedite sau deliberat în afara ariei. Acoperirea unui punct de restaurare anume este moștenită de la rularea care l-a produs în loc să fie citită din arhivă. Discurile de mașină virtuală cu backup=0 se văd în acest tabel și nicăieri altundeva în produs. Iar o mașină cu adevărat fără discuri se citește ca nestabilită, un preț preferat alternativei.

Din lucrul pe copii de siguranță la Provibr. De ce o restaurare netestată nu este o copie se află în o copie care nu a fost niciodată restaurată, iar ce garantează cu adevărat cele trei moduri vzdump se află în modurile vzdump din Proxmox: ce garantează.

Începeți cu o gazdă și un agent

Creați un cont, instalați agentul cu o singură comandă și conectați primul dumneavoastră host Proxmox. Perioada de probă durează 14 zile și nu cere date de plată.