Kapacitetsteamet (eller som vi kallar det internt â kaptir) introducerades redan under Veeam Backup and Replication 9.5 Update 4 under namnet Archive Tier. IdĂ©n bakom det Ă€r att ge möjlighet att flytta backuper som har fallit utanför det sĂ„ kallade operationella Ă„terstĂ€llningsfönstret till objektlagring. Detta hjĂ€lpte till att frigöra diskutrymme för anvĂ€ndare som hade ont om det. Denna funktion kallades Move Mode.
För att utföra denna relativt enkla (som det verkar) ÄtgÀrd krÀvdes det att tvÄ villkor uppfylls: alla punkter frÄn den flyttade backupen mÄste ligga utanför det ovan nÀmnda operationella ÄterstÀllningsfönstret, vilket anges tydligt i anvÀndargrÀnssnittet. Och för det andra: kedjan mÄste vara i sÄ kallad "förseglad form" (sealed backup chain eller Inactive Backup Chain). Det betyder att det inte sker nÄgra förÀndringar i kedjan över tid.
Men i VBR v10 kompletterades konceptet med nya funktioner â Copy Mode, Sealed Mode och en grej med det svĂ„ra namnet Immutability dök upp.
Det Àr om dessa fascinerande saker vi kommer att prata idag. Först om hur det fungerade i VBR9.5u4 och sedan om förÀndringarna i den tionde versionen.

Och förlÄt mig sprÄkvÄrdare, men det finns för mÄnga termer som Àr omöjliga att översÀtta.
SÄ hÀr kommer det att vara fullt av anglicismer.
Och mÄnga gifar.
Och bilder.
- Utan minsta sorg. Artikelns författare.
Som det var
SÄ, vi börjar med att diskutera operationella ÄterstÀllningsfönstret och sealed backup (eller som de kallas i dokumentationen Inactive Backup Chain). Utan förstÄelsen av dessa tvÄ gÄr det inte att förklara vidare.
Som vi ser pÄ bilden har vi en viss backupkedja med datablokkar, som ligger pÄ Performance tier av SOBR-repositoriet, som Àr kopplat till Capacity Tier. VÄrt operationella backupfönster Àr tre dagar.
DÀrmed förseglade den skapade .vbk-filen kedjan som har ett fönster instÀllt pÄ tre dagar. Och det betyder att man lugnt kan börja flytta till kapacitetstier allt som Àr Àldre Àn dessa tre dagar.

Men vad menades egentligen med en sealed kedja och vad kunde skickas till kapacitetstier i update 4?
För Forward Incremental Àr kÀnnetecknet för att kedjan Àr förseglad att en ny full backup skapas. Och det spelar ingen roll hur denna fulla backup erhÄlls: bÄde syntetiska fullbackuper och aktiva fullbackuper rÀknas.
I fallet Reverse Àr det alla filer som inte faller inom det operationella fönstret.
I fallet Forward increment med rollbacks Àr det alla rollbacks och .vbk, om det finns en annan .vbk pÄ performance extenten.

Nu ska vi titta pÄ alternativet att arbeta med Backup Copy-kedjor. HÀr bevarades endast det som omfattades av GFS-retention. Eftersom allt som finns i nyare backup copy-kedjor kan pÄ olika sÀtt ha Àndrats.

Nu ser vi under huven. DÀr sker en process som kallas dehydrering - att lÀmna tomma backupfiler pÄ extenten och flytta block frÄn dessa filer till capacity tier. För att optimera denna process anvÀnds en sÄ kallad dehydrering-index som gör att vi inte behöver kopiera block som redan har kopierats till capacity tier.
LÄt oss se hur detta ser ut med ett exempel: lÄt oss anta att vi har en .vbk som har gÄtt ut frÄn det operationella fönstret och tillhör en förseglad kedja. Det betyder att vi har full rÀtt att flytta den till capacity tier. NÀr vi flyttar skapas en metadatas fil i capacity tier och blocken frÄn den flyttade filen. I metadatafilen pÄ lÀnkivÄ beskrivs av vilka block vÄr fil bestÄr. I bilden bestÄr vÄr första fil av blocken a, b, c och i metadata finns lÀnkar till dessa block. NÀr vi fÄr en andra .vbk-fil, redo att flytta och bestÄende av block a, b och d, förstÄr vi genom att analysera dehydrering-index att vi bara behöver flytta block d. Dess metadatafil kommer att innehÄlla lÀnkar till de tvÄ tidigare blocken och ett nytt.

DÀrför kallas processen för att fylla dessa tomma block med data för rehydrering. HÀr anvÀnds redan sitt eget rehydrering-index som baseras pÄ den Àldsta .vbk-filen pÄ den lokala performance extenten. Det vill sÀga, om anvÀndaren vill ÄterstÀlla en fil frÄn capacity tier, skapar vi först en index över blocken frÄn den Àldsta fulla backupen och flyttar endast de saknade blocken frÄn capacity tier. I det visade fallet, för att rehydrera FullBackup1.vbk enligt rehydrering-indexet saknar vi endast block C, som vi hÀmtar frÄn capacity tier. Om capacity tier Àr en molnlagringslösning sparar detta enorma pengar.
HÀr kan det verka som att denna teknik Àr identisk med den som anvÀnds i WAN Accelerators, men det Àr bara en illusion. I acceleratorer sker en global deduplicering, medan hÀr anvÀnds lokal deduplicering inom varje fil baserat pÄ ett visst offset. Detta beror pÄ skillnaden i de uppgifter som ska lösas: hÀr behöver vi kopiera stora filer av fullstÀndiga sÀkerhetskopior, och enligt vÄra undersökningar ger en sÄdan dedupliceringsalgoritm bÀttre resultat Àven om det gÄr lÄng tid mellan dem.

Men fler index till indexens gud! Det finns ocksÄ ett index för ÄterstÀllning av data! NÀr vi pÄbörjar ÄterstÀllningen av en maskin som ligger i ett kapacitetsterrÀng, lÀser vi bara de unika databloken som inte finns i prestandaterrÀng.

Som det blev
Detta avslutar introduktionen. Den Àr ganska detaljerad, men som nÀmnts ovan gÄr det inte att förklara hur de nya funktionerna fungerar utan dessa detaljer. SÄ utan fler förord övergÄr vi till det första.
KopieringslÀget
Ăven om det till stor del bygger pĂ„ existerande teknologier, bĂ€r det med sig en helt annan logik för anvĂ€ndning.Â
MÄlet med detta lÀge Àr att sÀkerstÀlla att all data som finns pÄ det lokala utrymmet har en kopia i kapacitetsterrÀngen.
Om vi jÀmför Move och Copy-lÀgena direkt, ser det ut sÄ hÀr:
- Flyttning kan endast ske för en lÄst kedja. I kopieringslÀget transporteras allt, oavsett vad som hÀnder i sÀkerhetskopieringsjobbet.
- Flyttning aktiveras nÀr filer gÄr utanför fönstret för operationell sÀkerhetskopiering, medan kopiering aktiveras sÄ snart sÀkerhetskopieringsfilen blir tillgÀnglig.
- Ăvervakning av nya data för kopiering sker kontinuerligt, medan flyttning aktiverades var fjĂ€rde timme.
Vid framstÀllningen av det nya lÀget föreslÄr jag att vi börjar med enkla exempel och gÄr mot mer komplicerade.
I det mest grundlÀggande fallet dyker det helt enkelt upp nya filer med inkrement, och vi kopierar dem till kapacitetsterrÀngen. Oavsett vilket lÀge som anvÀnds i sÀkerhetskopieringsjobbet, oavsett om det hör till den lÄsta delen av kedjan eller inte, oavsett om vÄrt operationella fönster har löpt ut. Vi tog bara och kopierade.
Processen bakom detta Àr fortfarande dehydrering pÄ det sÀtt som beskrivits ovan. I kopieringslÀge ser den Àven till att vi inte kopierar block som redan finns i vÄrt objektlager. Den enda skillnaden Àr att om vi i flyttlÀge ersatte riktiga filer med platshÄllarfiler, sÄ rör vi dem inte hÀr utan lÀmnar allt som det Àr. I övrigt Àr detta precis samma dehydreringindex som noggrant försöker spara dina pengar och tid.

FrĂ„gan uppstĂ„r â om man tittar pĂ„ anvĂ€ndargrĂ€nssnittet finns det möjlighet att vĂ€lja bĂ„da alternativen samtidigt. Hur kommer ett sĂ„dant kombinerat lĂ€ge att fungera?

LÄt oss reda ut detta.
Inledningen Àr standard: en backupfil skapas och kopieras direkt. En inkrement skapas och kopieras ocksÄ. Detta fortsÀtter tills vi inser att filer har passerat vÄrt operationella fönster och en innesluten kedja har uppstÄtt. Vid denna punkt utför vi dehydrationsoperationen och ersÀtter dessa filer med platshÄllare. Naturligtvis kopierar vi ingenting tillbaka till kapacitetstjÀrnan.
All denna spÀnnande logik styrs av bara en kryssruta i grÀnssnittet: Copy backups to object storage as soon as they are created.

Men varför behöver vi detta kopieringslÀge?
Det Ă€r Ă€nnu bĂ€ttre att omformulera frĂ„gan sĂ„ hĂ€r â vilka risker skyddar vi oss ifrĂ„n med hjĂ€lp av det? Vilket problem hjĂ€lper det oss att lösa?
Svaret Àr uppenbart: sjÀlvklart handlar det om datarÀddning. Om vi har en fullstÀndig kopia av lokala data i objektlagret, sÄ spelar det ingen roll vad som hÀnder med vÄr produktion, vi kan alltid ÄterstÀlla data frÄn filer som finns i den hypotetiska Amazon.
DÀrför lÄt oss gÄ igenom möjliga scenarier, frÄn det enklaste till det mer komplexa.
Den enklaste olyckan som kan drabba oss Àr nÀr en av filerna i backupkedjan blir otillgÀnglig.
En mer sorglig historia Àr om en av extensorna i vÄrt SOBR-repositorium har gÄtt sönder.
Det blir Ànnu vÀrre nÀr hela SOBR-repositoriet har blivit otillgÀngligt, men kapacitetstjÀrnan fungerar.
Och allt Ă€r verkligen dĂ„ligt â det Ă€r nĂ€r backupservern dör och din första impuls Ă€r att försöka springa till den kanadensiska grĂ€nsen pĂ„ tio minuter.

Och nu lÄt oss gÄ igenom varje situation separat.
NÀr vi förlorade en (ja, och till och med flera) backupfiler, rÀcker det med att starta processen för att skanna om lagret, och den förlorade filen ersÀtts av en tom fil. Med hjÀlp av Äterhydratiseringsprocessen (som nÀmnts i inledningen av artikeln) kan anvÀndaren ladda ner data frÄn kapacitetslagret till det lokala lagret.

Nu blir situationen mer komplicerad. Anta att vÄr SOBR bestÄr av tvÄ extenter som arbetar i prestandalÀge, vilket innebÀr att vÄra .vbk och .vib Àr fördelade över dem med ganska ojÀmn tÀckning. Vid en viss tidpunkt blir en av extenterna otillgÀnglig, och anvÀndaren behöver snabbt ÄterstÀlla en maskin vars data delvis ligger just pÄ denna extention.
AnvÀndaren startar ÄterstÀllningsguiden, vÀljer en punkt att ÄterstÀlla till, och i processen inser guiden att alla nödvÀndiga data för ÄterstÀllning inte finns lokalt och dÀrför mÄste laddas ner frÄn kapacitetslagret. Under tiden kommer de block som finns kvar pÄ det lokala lagret inte att laddas ner frÄn molnet. Tack vare restore-indexet (ja, det nÀmndes ocksÄ i inledningen av artikeln).

En underkategori av detta fall Àr att hela SOBR-lagret blivit otillgÀngligt. I sÄ fall har vi inget att kopiera frÄn de lokala lagren, och alla block laddas ner frÄn molnet.
Och den mest intressanta situationen Àr att backupservern har kraschat. HÀr finns det tvÄ alternativ: administratören Àr duktig och har gjort konfigurationsbackups, eller sÄ har administratören sjÀlv varit en elak Puppa och inte gjort en konfigurationsbackup.
I det första fallet rÀcker det med att pÄ nÄgot sÀtt installera en ren version av VBR och ÄterstÀlla dess databas frÄn backup med hjÀlp av de inbyggda verktygen. I slutet av denna process kommer allt att ÄtergÄ till det normala. Eller sÄ kommer ÄterstÀllningen att ske enligt nÄgot av de ovan nÀmnda scenarierna.
Men om administratören Àr sin egen fiende, eller om backupkonfigurationen drabbas av en sagolik otur, kommer vi inte att överge dem Ät sitt öde. För detta fall har vi infört en ny procedur som kallas Import Object Storage. Denna procedur möjliggör att hoppa över den manuella ÄterstÀllningen av SOBR-repositoriet och kopplingen av kapacitetstiran med efterföljande skanning, och helt enkelt lÀgga till objektlagring i Vima-grÀnssnittet och starta Import Storage Repository- proceduren. Det enda som kan stÄ i vÀgen mellan dig och dina backuper Àr en begÀran om att ange ett lösenord om dina backuper har krypterats.
Detta var allt om Copy Mode, och vi gÄr vidare till
Sealed Mode
Det grundlÀggande syftet Àr att inga nya backuper fÄr skapas pÄ den valda delen av SOBR-repositoriet. Fram till version 10 hade vi bara Maintenance Mode, dÀr all verksamhet med repositoriet var helt förbjuden. Det var en hÄrd kÀrnprocess som stÀngde lagringen, dÀr endast knappen Evacuate var tillgÀnglig, vilket en gÄng förde bort backuperna till en annan del.
Sealed Mode Àr en slags 'mjuk' version: vi förhindrar skapandet av nya backuper och tar gradvis bort gamla enligt den valda retentionen, men förlorar inte möjligheten att ÄterstÀlla frÄn de lagrade punkterna. Mycket anvÀndbart nÀr maskinens livslÀngd nÀrmar sig sitt slut och den behöver bytas ut, eller nÀr den helt enkelt behöver frigöras för nÄgot viktigare, och det finns ingen möjlighet att flytta allt pÄ en gÄng. Eller sÄ kan det vara omöjligt att ta bort.
DÀrför Àr arbetsprincipen ganska enkel: man mÄste förbjuda alla skrivoperationer (skapande av nya data), och lÀmna lÀsningar (ÄterstÀllningar) och radering (retention).
BÄda lÀgena kan anvÀndas samtidigt, men man mÄste ocksÄ beakta att Maintenance har högre prioritet.
Som exempel övervÀger vi en SOBR bestÄende av tvÄ delar. Anta att vi under de första fyra dagarna skapat backuper i lÀget Forward Forever Incremental, och sedan stÀnger vi den ena delen. Detta leder till att vi initierar skapandet av en ny aktiv full ÄterstÀllning pÄ den andra tillgÀngliga delen. Om vÄr retention Àr fyra, dÄ nÀr hela kedjan som ligger pÄ den stÀngda delen överskrider dess grÀnser, kan den utan betÀnkligheter tas bort.

Det finns situationer dÀr raderingen sker tidigare. Till exempel Àr detta fallet med Forward incremental med periodiska fulla sÀkerhetskopior. Om vi har skapat fulla sÀkerhetskopior de första tvÄ dagarna, och pÄ torsdag bestÀmmer vi oss för att stÀnga lagringsutrymmet, sÄ nÀr vi pÄ fredag skapar en ny fullstÀndig sÀkerhetskopiering kommer filen frÄn mÄndag att raderas eftersom det vid denna tidpunkt inte finns nÄgra beroenden. Och sjÀlva punkten Àr inte beroende av nÄgon annan. DÀrefter vÀntar vi tills fyra punkter har skapats pÄ det tillgÀngliga utrymmet och raderar de tre kvarstÄende, som inte kan raderas oberoende av varandra.

Det Àr enklare med Reverse Incremental. I det fallet Àr de Àldsta punkterna oberoende och kan raderas utan problem. SÄ snart det nya .vbk har skapats pÄ det nya utrymmet, kommer de gamla .vrb att raderas en och en.
För övrigt, varför skapar vi varje gÄng en ny .vbk: om vi inte gör det och fortsÀtter den gamla inkrementella kedjan, skulle den gamla .vbk hÀnga kvar för en oÀndligt lÄng tid i vilket lÀge som helst, vilket hindrar radering. DÀrför fattades beslutet att sÄ snart utrymmet stÀngs, skapar vi en fullstÀndig sÀkerhetskopiering pÄ ett ledigt utrymme.

SvÄrare Àr situationen med kapacitetstira.
Först ser vi pÄ copy mode. Anta att vi har skapat sÀkerhetskopior aktivt i fyra dagar, och sedan stÀngdes kapacitetstiran. Vi raderar ingenting, utan tÄlamod vÀntar vi pÄ retentionen, varefter vi raderar data frÄn kapacitetstiran.
UngefĂ€r samma sak hĂ€nder i move mode â vi vĂ€ntar pĂ„ retentionen, raderar det gamla i det lokala lagret och raderar det som lagras i objektlagret.

Ett intressant exempel med Forever forward incremental. Vi stÀller retentionen till tre punkter och börjar göra sÀkerhetskopior frÄn mÄndag, som pÄlitligt kopieras till molnet. Efter att lagringen stÀngts fortsÀtter sÀkerhetskopiorna att skapas, vilket upprÀtthÄller tre punkter, men de data som lagras i kapacitetstiran förblir beroende och kan inte raderas. DÀrför vÀntar vi till torsdag nÀr vÄr .vbk gÄr utanför retentionen, och först dÄ raderar vi hela den sparade kedjan.

Och en liten kommentar: alla exempel hÀr visas med en maskin. Om ni har flera i sÀkerhetskopian kommer retentionen att skilja sig beroende pÄ om en Aktiv Full har gjorts eller inte.
Detta Ă€r, i princip, allt. SĂ„ vi gĂ„r vidare till den mest hardcore-funktionen â
Immutability
Precis som med de tidigare punkterna, börjar vi med att förklara vilket problem denna funktion löser. SÄ snart vi laddar upp vÄra sÀkerhetskopior för lagring, uppstÄr en stark önskan att garantera deras sÀkerhet, det vill sÀga att fysiskt förbjuda deras radering och all modifiering under den angivna retentionstiden. Detta inkluderar administratörer, Àven under deras root-konton. Detta gör det möjligt att skydda dem mot oavsiktlig eller avsiktlig skada. Den som arbetar med AWS kan ha stött pÄ en liknande funktion kallad Object Lock.
LÄt oss nu titta pÄ lÀget i allmÀnna ordalag, och sedan dyka djupare in i detaljerna. I vÄrt exempel kommer Immutability att aktiveras för vÄr kapacitetstier med en retention pÄ fyra dagar. Och i sÀkerhetskopian aktiveras kopieringslÀget.
Immutability interagerar inte med den allmÀnna retentionen. Till exempel lÀgger det inte till nÄgra extra punkter eller liknande. Under fyra dagar kan personen inte ta bort sÀkerhetskopiornas filer. Om en sÀkerhetskopia görs pÄ mÄndag, kan filen tas bort först pÄ fredag.

Alla tidigare förklarade koncept av dehydrering, index och metadata fortsĂ€tter att fungera pĂ„ exakt samma sĂ€tt. Men med ett villkor â blocket sĂ€tts inte bara för datan, utan ocksĂ„ för metadata. Detta görs ifall en listig angripare skulle besluta att radera vĂ„r metadata-databas, sĂ„ att datablocken inte förvandlas till en meningslös binĂ€r röra.

Och nu Àr det ett utmÀrkt tillfÀlle att förklara vÄr blockgenereringsteknik. Eller block generation. För detta kommer vi att betrakta situationen som ledde till dess uppkomst.
LĂ„t oss ta en tidslinje pĂ„ sex dagar och markera tiden för förvĂ€ntad utgĂ„ng av immutability lĂ€ngst ner. Vi skapar en fil pĂ„ den första dagen som bestĂ„r av datablocket a och dess metadata. Om immutability Ă€r instĂ€llt pĂ„ tre dagar, Ă€r det rimligt att anta att data kommer att lĂ„sas upp och tas bort pĂ„ den fjĂ€rde dagen. PĂ„ den andra dagen lĂ€gger vi till en ny file2 som bestĂ„r av block b med samma instĂ€llningar. Block a bör fortfarande tas bort pĂ„ den fjĂ€rde dagen. Men pĂ„ den tredje dagen hĂ€nder nĂ„got hemskt â en fil File3 skapas som bestĂ„r av det nya blocket d och en lĂ€nk till det gamla blocket a. Detta innebĂ€r att immutability-flagg för block a mĂ„ste stĂ€llas om till en ny period, som flyttas till den sjĂ€tte dagen. Och hĂ€r uppstĂ„r problemet â i verkliga sĂ€kerhetskopior av sĂ„dana block uppstĂ„r en stor mĂ€ngd. För att förlĂ€nga deras immutability-period mĂ„ste vi hela tiden göra en stor mĂ€ngd förfrĂ„gningar. Detta blir i praktiken en nĂ€stan oĂ€ndlig daglig process, eftersom vi med stor sannolikhet kommer att hitta stora högar av deduplicerade block vid varje kopiering. Vad innebĂ€r detta stora antal förfrĂ„gningar för leverantörer av objektlagring? RĂ€tt! En enorm rĂ€kning i slutet av mĂ„naden.

Och för att inte fakturera sina Àlskade kunder med stora summor för inget, har mekanismen block generation skapats. Detta Àr en tillÀggsperiod som vi lÀgger till den befintliga immutability-perioden. I exemplet nedan Àr en sÄdan period tvÄ dagar. Men detta Àr bara för exemplet. I verkligheten anvÀnds en egen formel som ger ungefÀr tio ytterligare dagar vid en mÄnads lÄs.
Vi fortsĂ€tter att övervĂ€ga samma situation, men med blockgenerering. Den första dagen skapar vi filen file1 frĂ„n block a och metadata. Vi sammanstĂ€ller generationsperioden och oförĂ€nderliga data â vilket innebĂ€r att filen kan tas bort först pĂ„ sjĂ€tte dagen. Om vi pĂ„ andra dagen skapar File2, som bestĂ„r av block b och en lĂ€nk till block a, hĂ€nder inget med den förvĂ€ntade borttagningsdatumet. Den förblev som tidigare pĂ„ sjĂ€tte dagen. Vi försöker sĂ„ledes spara pengar pĂ„ antalet förfrĂ„gningar. Den enda situation dĂ€r tidsperioden kan flyttas Ă€r om generationsperioden har gĂ„tt ut. Om det pĂ„ tredje dagen nya File3 innehĂ„ller en lĂ€nk till block a, kommer generation 2 att lĂ€ggas till eftersom Gen1 redan har gĂ„tt ut. Det förvĂ€ntade borttagningsdatumet för block a flyttas dĂ„ till Ă„ttonde dagen. Detta gör att vi dramatiskt kan minska antalet förfrĂ„gningar för att förlĂ€nga livslĂ€ngden för deduplicerade block, vilket sparar mycket pengar för kunderna.

SjĂ€lva teknologin Ă€r tillgĂ€nglig för S3-anvĂ€ndare och S3-kompatibel hĂ„rdvara, vars tillverkare garanterar att deras implementationer inte skiljer sig frĂ„n Amazons. DĂ€rför svarar vi pĂ„ den berĂ€ttigade frĂ„gan om varför Azure inte stöds â de har en liknande funktion, men den fungerar pĂ„ kontonivĂ„, inte pĂ„ enskilda objekt. Förresten, i sjĂ€lva Amazon finns objektlokalisering i tvĂ„ lĂ€gen: compliance och governance. I det andra fallet finns möjligheten kvar för den högsta administratören av alla administratörer och roten av alla rötter, trots objektlokaliseringen, att radera data. I compliance-lĂ€get Ă€r allt spikat för alltid och ingen kan ta bort sĂ€kerhetskopior, inte ens Amazons administratörer (enligt deras officiella uttalanden). Vi stöder just det lĂ€get.
Och, traditionellt, lite anvÀndbara lÀnkar:
- Om i alla detaljer.
- All information om i bÀsta skick
- Till i detalj
KĂ€lla: habr.com
