ZFS-datasæt¶
Siden ZFS tager sikkerhedskopier af ZFS-datasæt. Et element er ét datasæt sammen med alle datasæt under det. Til hver sikkerhedskopi tager BombVault ét ZFS-snapshot af hele træet, så hvert datasæt i det fanges i samme øjeblik. Derefter læser det filerne i hvert datasæt fra det snapshot, gemmer dem med restic på samme måde som en mappe og fjerner snapshottet lige bagefter. Sikkerhedskopierne er deduplikerede, du kan gennemse hver enkelt, og enkelte filer kan gendannes.
BombVault bruger aldrig zfs send til datasæt, ruller aldrig et datasæt tilbage og sletter aldrig et.
Krav¶
- SSH-forbindelsen til denne server. ZFS-datasæt bruger samme nøgle, vært og bruger som VM-sikkerhedskopier. Virker VM-sikkerhedskopier allerede, virker dette også. Ellers følg guiden til VM-sikkerhedskopi over SSH på GitHub. Skabelonfelterne hedder Host SSH: Address, Host SSH: Port og Host SSH: User.
- Kommandoen
zfspå den vært. Unraid 6.12 og nyere og TrueNAS SCALE har den. - Host Data mappet som
/mntmed Access Mode Read/Write - Slave. Det er skabelonens standard. Snapshottet af et datasæt dukker først op i datasættets mappe.zfs/snapshot, efter at BombVault er startet, så containeren skal modtage de monteringer, værten laver senere. - Datasættene monteret under
/mnt. På Unraid ligger pools under/mnt/<pool>, så det er allerede tilfældet.
Slå domænet til under Indstillinger, Generelt (ZFS-datasæt). ZFS-siden viser så kortet Forbindelse til denne server. Det tester SSH-forbindelsen, nævner den bruger og vært, det forbinder til, og siger, hvad der mangler, når noget mangler. Værtsintegrationstjekket (/spike) viser samme resultat.
Elementer og underdatasæt¶
Åbn Tilføj datasæt på ZFS-siden. Listen kommer fra serveren. Vælg det datasæt, der ligger øverst i det, du vil sikkerhedskopiere, for eksempel cache/appdata, og elementet dækker det og alle datasæt under det.
- Nye underdatasæt kommer selv med. Et datasæt, der senere oprettes under elementet, sikkerhedskopieres ved næste kørsel, og den kørsel nævner det som nyt. Dets første sikkerhedskopi læser det helt én gang; derefter læses kun ændringer.
- Du kan udelade enkelte underdatasæt. Slå et fra i elementets indstillinger, så udelades det sammen med alt under det. Et udeladt underdatasæt, der ikke længere findes på serveren, markeres som sådan og kan fjernes fra listen.
- Underdatasæt, der ikke kan læses, springes over, aldrig i stilhed. Kørslen oplister dem, elementet viser, hvor mange der blev sprunget over, og dækningskortet på oversigten tæller hvert af dem som ubeskyttet. Kørslen sikkerhedskopierer alligevel alt andet og fejler ikke på grund af et oversprunget underdatasæt. Årsagerne står i tabellen over årsagskoder: et datasæt, der ikke er monteret, har
canmount=off, etlegacy- eller intet monteringspunkt, en krypteringsnøgle, der ikke er indlæst, slået snapshotadgang fra eller et monteringspunkt, BombVault ikke kan se. - Et oversprunget datasæt tager ikke sine underdatasæt med. Et datasæt med
canmount=off, der kun rummer andre datasæt, springes over (vist som "kun struktur"), og dets monterede underdatasæt sikkerhedskopieres. Et krypteret datasæt, hvis nøgle ikke er indlæst, springes over sammen med de underdatasæt, der deler dets nøgle. - Underdatasæt, der er VM-diske eller systemdata, starter slået fra i tilføjelsesdialogen, med årsagen ved siden af kontakten. Tilføjer du en hel pool, skal du bekræfte det i en dialog, der oplister, hvad den indeholder.
Volumener¶
Et volumen (zvol) indeholder en virtuel disk i stedet for filer, og ZFS-siden sikkerhedskopierer aldrig et.
- Et volumen, som en VM bruger, sikkerhedskopieres med den VM på siden VMs.
- Et volumen, som ingen VM bruger (et iSCSI-extent, en disk du har koblet fra), sikkerhedskopieres ikke af BombVault. Tilføjelsesdialogen og ZFS-siden tæller disse volumener og siger det. En senere version vil sikkerhedskopiere dem.
Volumener i et elements træ springes over og nævnes ved hver kørsel.
Dockers lager¶
Med Dockers ZFS-lagerdriver er hvert billedlag et datasæt med et legacy-monteringspunkt. Tilføjelsesdialogen samler dem i én linje pr. overordnet datasæt. Et træ med mere end 20 sådanne datasæt kan ikke blive et element: Så længe der findes et snapshot af det, kan Docker ikke fjerne billedlag. Tilføj i stedet datasættene under det, for eksempel appdata.
Elementer overlapper aldrig¶
Et datasæt kan kun høre til ét element. BombVault afviser et nyt element, der ligger inde i et eksisterende eller ville indeholde et. For at slå flere underelementer sammen til ét overordnet element skal du først slette underelementerne og vælge at beholde deres sikkerhedskopier og derefter tilføje det overordnede. Hvert datasæt beholder sin historik under sit eget navn, så næste sikkerhedskopi fortsætter, hvor de gamle elementer slap, og læser ikke alt igen.
Stop containere og kør kommandoer omkring snapshottet¶
Et snapshot af en kørende database er som et pludseligt strømsvigt: Databasen kommer sig som regel, men den skal gøre det. Hvert element kan gøre to ting ved det, og begge dækker kun øjeblikket for snapshottet, ikke hele sikkerhedskopien.
- Stop disse containere for snapshottet. BombVault stopper de angivne containere, tager snapshottet og starter dem igen med det samme. Containere på samme afhængighedsniveau stopper parallelt, de afhængige først, så hele vinduet varer som regel nogle få sekunder; kørslen viser, hvor længe. Sikkerhedskopien læser derefter det frosne snapshot, mens apps allerede kører igen. Kun containere, der kørte, stoppes.
- En kommando før og efter snapshottet. Den kører inde i en container efter eget valg, for eksempel for at dumpe en database ind i datasættet lige før snapshottet uden at stoppe noget. Fejler kommandoen før snapshottet, fejler sikkerhedskopien, og der tages intet snapshot. En kommando efter snapshottet, der fejler, vises på kørslen, men får ikke sikkerhedskopien til at fejle.
Hvad der sker, når noget går galt:
- Kan en container ikke stoppes, starter BombVault dem, det allerede har stoppet, og sikkerhedskopien fejler med containerens navn. Det falder aldrig tilbage på et snapshot af kørende apps.
- Stoppet venter, til en igangværende containersikkerhedskopi er færdig (op til 30 minutter ved en manuel kørsel, op til sikkerhedskopiens tidsgrænse ved en planlagt), så de to aldrig stopper og starter samme container på én gang.
- Før den første container stopper, skriver BombVault ned, hvilke det stopper. Bliver BombVault dræbt inden for vinduet, starter det de containere igen næste gang det starter, sender en notifikation, og elementet viser en rød note for hver container, det ikke kunne starte.
De automatiske databasedumps (se Funktioner) kører med en containers egen sikkerhedskopi på siden Containers, ikke med et ZFS-element. En database, hvis container kun sikkerhedskopieres gennem sit datasæt, får intet dump, så giv den en kommando her.
En container kan stå på denne liste og på siden Containers på samme tid. Dens data gemmes så to gange, i to repositories, og Fuld sikkerhedskopi stopper den to gange. Elementet gør opmærksom på det.
Gendannelse¶
Åbn Sikkerhedskopier på elementet, vælg sikkerhedskopien og derefter datasættet. Som standard er det elementets øverste datasæt.
- Gendan ind i datasættet. Filer fra sikkerhedskopien skrives ind i datasættets monteringspunkt. Filer med samme navn overskrives, andre bliver liggende. Datasættet rulles aldrig tilbage eller erstattes. BombVault tjekker, at datasættet er monteret, synligt og skrivbart, én gang før det starter og igen lige før det skriver. Hvor et underdatasæt er monteret inde i det, skrives intet: Underdatasættet beholder sine filer, sin ejer og sine rettigheder og gendannes fra sin egen sikkerhedskopi.
- Gendan til en mappe. Vælg en mappe under
/mnt. BombVault tjekker, at mappen ligger på en monteret pool eller share, og at der er plads nok. Det virker uden SSH-forbindelsen og for datasæt, der ikke længere findes. - Til et nyt datasæt. Angiv et datasæt, der ikke findes endnu. BombVault opretter det med ZFS-egenskaberne fra sikkerhedskopien og gendanner ind i det, se Gendan som nyt datasæt.
- Vælg filer (avanceret): skriv kun de filer og mapper, du vælger, tilbage i datasættet.
- Alle datasæt i denne sikkerhedskopi (avanceret): hvert datasæt i træet i sin egen undermappe af den mappe, du vælger. Datasæt, der blev sprunget over i den sikkerhedskopi, nævnes.
- Fra en anden server: Siden Gendannelse gendanner fra en anden BombVaults repository, altid til en mappe: alle datasæt i én sikkerhedskopi, hvert i sin egen undermappe, eller ét datasæt i træet, helt eller valgte filer.
Elementets liste over containere, der skal stoppes, tilbydes også ved gendannelse ind i datasættet. De containere forbliver stoppet under hele gendannelsen, og containersikkerhedskopier venter imens.
Sikkerhedssnapshottet¶
Før det skriver ind i et datasæt, tager BombVault et ZFS-snapshot af netop det datasæt med navnet bombvault-prerestore-<tid>. Det er slået til som standard; at slå det fra kræver en ekstra bekræftelse. Kan snapshottet ikke tages, gendannes intet.
BombVault sletter aldrig selv et sikkerhedssnapshot. Elementet oplister dem med alder og størrelse, hver med handlingen Slet, og advarer, når det ældste er mere end 30 dage gammelt, fordi det holder slettede og ændrede data fast i poolen.
For at gå tilbage efter en gendannelse kopierer du enkelte filer fra .zfs/snapshot/bombvault-prerestore-<tid> inde i datasættet. zfs rollback <dataset>@bombvault-prerestore-<tid> virker kun, så længe det er datasættets nyeste snapshot. zfs rollback -r sletter alle nyere snapshots, også de automatiske.
Gendan som nyt datasæt¶
BombVault gemmer med hver sikkerhedskopi de lokalt satte ZFS-egenskaber for hvert datasæt: compression, recordsize, quota, reservation, atime, xattr, acltype, casesensitivity og dine egne brugeregenskaber. Nedarvede og skrivebeskyttede værdier udelades, fordi de kommer tilbage af sig selv. Sikkerhedskopier fra før BombVault gemte dem, har ingen.
- Til et nyt datasæt kører
zfs createmed hver gemt egenskab. casesensitivity, normalization og utf8only kan kun sættes på den måde. Kvoter og reservationer sættes først efter filerne, så de ikke kan afvise dem. Monteringspunktet udelades, så kopien ikke støder sammen med originalen, og det samme gældercanmount,readonlyog krypteringen, så gendannelsen kan skrive. Et nyt datasæt under et krypteret overtager dets kryptering. Datasættet ovenover skal findes. Hvis noget fejler, efter det er oprettet, bliver det nye datasæt på serveren, fordi BombVault aldrig ødelægger et datasæt. - Gendan ind i datasættet viser de gemte egenskaber ved siden af gendannelsen. Sæt også disse egenskaber sætter dem, et eksisterende datasæt stadig tager imod, før en eneste fil skrives. Kvoter og reservationer sættes først efter filerne, så de ikke kan afvise dem. Uden den kontakt beholder datasættet sine indstillinger.
Hvad sikkerhedskopien indeholder¶
I sikkerhedskopien: filerne og mapperne i hvert sikkerhedskopieret datasæt, med ejer, rettigheder, tidsstempler og udvidede attributter, som restic gemmer dem og de lokalt satte ZFS-egenskaber for hvert datasæt.
Ikke i sikkerhedskopien:
- ejer og rettigheder for selve den øverste mappe i hvert datasæt (alt under den er med). En gendannelse ind i datasættet lader den eksisterende øverste mappe være, som den er, en gendannelse til en mappe opretter den med rettighederne
0755; - eksisterende ZFS-snapshots;
- underdatasæt, der blev sprunget over eller udeladt;
- volumener.
For at gendanne til en ny pool opretter du poolen og gendanner hvert datasæt til et nyt datasæt. Om NFSv4-ACL'er, som TrueNAS bruger dem på SMB-datasæt, kommer tilbage som forventet, er endnu ikke afprøvet, så test en gendannelse med dine egne data, før du stoler på dem.
Krypterede datasæt¶
Et krypteret datasæt sikkerhedskopieres kun, mens dets nøgle er indlæst. Ellers springes det over med en advarsel; indlæs nøglen med zfs load-key og montér datasættet. BombVault læser dataene dekrypteret og gemmer dem i restics repository, som er krypteret. Har du slået kryptering fra i BombVault, er det repository det ikke.
Efterladte snapshots¶
Snapshottet af en sikkerhedskopi hedder <dataset>@bombvault-<14 cifre>, for eksempel cache/appdata@bombvault-20260924021500 (UTC). BombVault fjerner det lige efter sikkerhedskopien. Lykkes det ikke, for eksempel fordi datasættet er optaget eller BombVault blev stoppet, fjerner BombVault det:
- før elementets næste sikkerhedskopi,
- når BombVault starter, for hvert element, også med domænet slået fra,
- når du sletter elementet,
- når du trykker Fjern nu på elementet, som også viser, hvor mange der er tilbage.
Kun navne, der præcis er bombvault- plus 14 cifre, fjernes. Sikkerhedssnapshots, dine egne snapshots og automatiske snapshots røres aldrig. For at fjerne et i hånden:
Afvigelser¶
Et underdatasæt, der er blevet tømt, ændrer næsten ikke totalen for et stort træ, så afvigelsesregistreringen holder øje med hvert datasæt i et element for sig: størrelse, antal filer, nye data og restic-tid har hver deres egen historik. Den historik hører til datasættets navn, så den bliver, når træet senere sikkerhedskopieres af et andet element.
Et datasæt, som den forrige kørsel sikkerhedskopierede, og som denne kørsel ikke kunne læse, tæller som tømt, så længe elementets udvalg ikke er ændret. Det dækker en nøgle, der ikke er indlæst, et datasæt, der ikke er monteret, og et, der er forsvundet fra træet. Et underdatasæt, du selv udelukker, ændrer udvalget, så dets historik begynder forfra i stedet. Så længe et fund om mistede data er åbent, beholder opbevaringen de gamle sikkerhedskopier af netop det datasæt og beskærer resten af træet som normalt.
På siden Afvigelser har hvert datasæt sin egen linje i elementets panel, som åbnes med Overvågning på elementets kort eller, når intet er åbent for elementet, fra dets linje i kortet Intet åbent. Elementets træ på denne side viser de åbne fund ved hvert datasæt. Linket i et fund åbner elementets gendannelsespanel ved datasættets sidste gode sikkerhedskopi. Om en kørsel bliver færdig, vurderes for hele elementet, fordi en kørsel lykkes eller fejler som helhed.
Selve tjekkene er beskrevet under Funktioner. En assistent, der er forbundet via MCP-serveren, kan liste et ZFS-elements gendannelsespunkter, starte dets sikkerhedskopi og læse fundene, men et fund kvitteres på siden Afvigelser.
Årsagskoder¶
Siden, kørselshistorikken og notifikationerne nævner et problem med en af disse koder. De fleste har også løsningen ved siden af på siden.
| Kode | Betydning | Hvad du gør |
|---|---|---|
ssh-missing |
SSH-forbindelsen er ikke sat op i denne container. | Sæt SSH-forbindelsen op som til VM-sikkerhedskopier. |
host-placeholder |
Host SSH: Address er stadig eksempelværdien, og host.docker.internal svarede heller ikke. |
Sæt Host SSH: Address til denne servers LAN-IP. |
host-fallback |
Host SSH: Address er stadig eksempelværdien, og host.docker.internal virker. |
Intet, eller sæt LAN-IP'en. |
ssh-unreachable |
Serveren kan ikke nås over SSH. | Tjek adresse og port, og at SSH er slået til. |
ssh-auth |
Serveren afviste BombVaults nøgle. | Kør kommandoen fra forbindelseskortet én gang på serveren. |
zfs-not-found |
SSH-værten har ingen zfs-kommando. |
Peg Host SSH: Address på den maskine, der ejer poolerne. |
zfs-permission |
SSH-brugeren må ikke køre denne zfs-kommando. | Brug root, eller se TrueNAS SCALE. |
uri-mismatch |
LIBVIRT_URI nævner en anden vært eller bruger end SSH-felterne. |
Få dem til at stemme overens, eller tøm SSH-felterne, så begge kommer fra URI'en. |
zfs-error |
zfs rapporterede en anden fejl. | Detaljerne viser dens besked. |
propagation-missing |
Nye monteringer på værten når ikke containeren. | Sæt Access Mode for Host Data til Read/Write - Slave og genstart BombVault. |
invalid-name |
Et datasætnavn, BombVault ikke accepterer. | Omdøb datasættet. |
name-too-long |
Et datasæt i træet er for langt til et snapshotnavn. | Omdøb det, eller tilføj et datasæt under det som element. |
invalid-exclude |
Et udelukkelsesmønster eller et udeladt underdatasæt passer ikke til elementet. | Ret den post, beskeden nævner. For at udelade et helt underdatasæt skal du slå det fra i stedet for at skrive et mønster. |
not-found |
Datasættet findes ikke på serveren. | Fjern elementet, eller genopret datasættet. Dets sikkerhedskopier kan stadig gendannes. |
not-filesystem |
Dette er et volumen, ikke et filsystem. | Se Volumener. |
overlaps-item |
Datasættet overlapper et eksisterende element. | Se Elementer overlapper aldrig. |
docker-storage |
Træet indeholder Dockers billedlager. | Se Dockers lager. |
nothing-readable |
Intet datasæt i elementet kan læses lige nu. | Se på koderne for de oversprungne datasæt. |
snapshot-failed |
Snapshottet kunne ikke oprettes. | Detaljerne viser zfs' besked. |
containers-busy |
En containersikkerhedskopi kørte stadig, da containerne skulle stoppe. | Start igen senere. Planlagte kørsler venter selv. |
consistency-stop-failed |
En container kunne ikke stoppes, så der blev ikke taget et snapshot. | Tjek containeren, eller fjern den fra listen. |
pre-snapshot-failed |
Kommandoen før snapshottet fejlede. | Kørselsdetaljerne viser dens output. |
container-unknown |
En angivet container findes ikke. | Fjern den fra listen. |
container-is-self |
BombVault kan ikke stoppe sin egen container. | Fjern den fra listen. |
leftover-snapshots |
Snapshots, som BombVault ikke kunne fjerne, ligger stadig på serveren. | Tryk Fjern nu, se Efterladte snapshots. |
zvol |
Et volumen i træet, sprunget over. | Se Volumener. |
canmount-off |
Aldrig monteret (canmount=off), sprunget over. |
Rummer det data, så montér det eller flyt dataene til et underdatasæt. |
legacy-mount |
Legacy-monteringspunkt, sprunget over. | Giv det et monteringspunkt under /mnt. |
no-mountpoint |
Intet monteringspunkt, sprunget over. | Giv det et monteringspunkt under /mnt. |
not-mounted |
Ikke monteret på serveren, sprunget over. | Montér det med zfs mount, eller sæt canmount=on. |
key-not-loaded |
Krypteret, og nøglen er ikke indlæst, sprunget over. | zfs load-key, montér det derefter. |
snapdir-disabled |
Snapshotadgang er slået fra, sprunget over. | zfs set snapdir=hidden <dataset>. Mappen .zfs forbliver skjult. |
not-visible |
BombVault kan ikke se datasættets monteringspunkt. | Flyt monteringspunktet under Host Data-stien, eller map det ind i containeren på samme sti med Read/Write - Slave. |
shfs-only |
Datasættet er kun synligt gennem /mnt/user, som skjuler snapshots. |
Map /mnt, ikke /mnt/user, som Host Data. |
snapshot-not-visible |
Snapshottet blev oprettet, men dukkede ikke op inde i BombVault. | Kør Test adgangen til snapshots; se nedenfor. |
snapshot-loop |
Snapshottet nåede ikke BombVault, fordi Host Data ikke sender nye monteringer videre. | Sæt Access Mode for Host Data til Read/Write - Slave og genstart BombVault. |
backup-failed |
restic fejlede for dette datasæt. | Kørselsdetaljerne viser hvorfor. |
not-reached |
Kørslen sluttede før dette datasæt. | Kør sikkerhedskopien igen. |
gone |
Datasættet er ikke længere på serveren. | Intet. Dets sikkerhedskopier kan stadig gendannes. |
read-only-mount |
BombVault kan kun læse datasættet og kan derfor ikke gendanne ind i det. | Sæt mappingen til Read/Write - Slave, eller gendan til en mappe. |
destination-not-mounted |
Mappen ligger ikke på en monteret pool eller share. | Vælg en mappe på en pool eller share. |
not-enough-space |
Ikke nok ledig plads på destinationen. | Frigør plads, eller vælg en anden mappe. |
safety-snapshot-failed |
Sikkerhedssnapshottet kunne ikke tages, så intet blev gendannet. | Detaljerne viser zfs' besked. |
safety-name-too-long |
Datasætnavnet er for langt til et sikkerhedssnapshot. | Slå sikkerhedssnapshottet fra, eller gendan til en mappe. |
dataset-exists |
Der findes allerede et datasæt med dette navn. | Vælg et nyt navn, eller gendan ind i selve datasættet. |
create-failed |
Det nye datasæt kunne ikke oprettes. | Detaljerne viser beskeden fra zfs. Tjek, at datasættet ovenover findes. |
new-dataset-not-visible |
Det nye datasæt blev oprettet, men BombVault kan ikke se det, så intet blev gendannet. | Datasættet bliver på serveren. Montér det under Host Data-stien, og gendan ind i det. |
set-properties-failed |
De gemte egenskaber kunne ikke sættes, så intet blev gendannet. | Detaljerne viser zfs' besked. |
set-limits-failed |
Filerne blev gendannet, men den gemte kvote eller reservation kunne ikke sættes. | Detaljerne viser beskeden fra zfs. Sæt selv kvoten eller reservationen med zfs set. |
Tjek, hvad containeren ser¶
Test adgangen til snapshots på et element tager et rigtigt snapshot af dets træ, leder efter det inde i BombVault for hvert datasæt og fjerner det igen. Det er den hurtigste måde at bevise hele vejen på før den første planlagte kørsel.
For at se selv skal du køre dette på serveren:
Hver linje er en montering inde i containeren. Et datasæts linje viser dets sti inde i containeren (under /host/user) og datasætnavnet. Et felt master:N på den linje betyder, at monteringen modtager de monteringer, værten laver senere, og det er det, snapshotadgang kræver. Mangler det, så sæt Access Mode for Host Data til Read/Write - Slave og genstart BombVault.
TrueNAS SCALE¶
- Når
LIBVIRT_URIer sat (som til VM-sikkerhedskopier på TrueNAS), tager BombVault SSH-vært, bruger og port til sine zfs-kommandoer fra URI'en, hver af dem der ikke er sat for sig. Uden VM-sikkerhedskopier sætter du i stedetLIBVIRT_HOST,LIBVIRT_SSH_USERogLIBVIRT_SSH_PORT. Tilføj variablerne under Additional Environment Variables. - En anden bruger end root skal have rettigheder på elementets øverste datasæt, som så dækker alle datasæt under det:
Gendannelse til et nyt datasæt kræver desuden create på datasættet ovenover, og at sætte gemte egenskaber kræver rettigheder til de egenskaber.
En SSH-session uden root på TrueNAS har ikke /usr/sbin i sin sti; BombVault kalder så /usr/sbin/zfs direkte.
- Appens Host Data skal være en værtssti over datasættene, for eksempel /mnt/tank, ikke et ixVolume. Med en værtssti sender appen værtens nye monteringer videre til BombVault (rslave), og det kræver snapshotadgang.