ENOSPC: Hvorfor kræves der btrfs balance? Hvad gør den?

Jeg har haft brug for at køre btrfs balance på mit filsystem til en enkelt enhed, da jeg fik ENOSPC selvom der faktisk var ledig plads.

Hvorfor skal dette køres?

Hvad gør balancen egentlig?

Svar

I modsætning til de fleste konventionelle filsystemer bruger BTRFS en to-trins allokator. Den første fase tildeler store områder af rummet kendt som klumper til bestemte typer data , så tildeler den anden fase blokke som et almindeligt filsystem inden for disse større regioner. Der er tre forskellige typer stykker:

  • Databaser: Disse gemmer almindelige fildata.

  • Metadata Chunks: Disse gemmer metadata om filer, herunder blandt andet tidsstempler, kontrolsummer, filnavne, ejerskab, tilladelser og udvidede attributter.

  • Systembiter: Dette er en speciel type klumper, der gemmer data om, hvor alle de andre klumper er placeret.

Kun den type data, som klumpen er allokeret til, kan gemmes i klippen. Det mest almindelige tilfælde i disse dage, når du får en -ENOSPC-fejl på BTRFS, er, at filsystemet er løbet tør for plads til data eller metadata i eksisterende klumper, og ikke kan allokere et nyt stykke. Du kan kontrollere, at dette er tilfældet ved kører btrfs fi df på det filsystem, der kastede fejlen. Hvis data- eller metadata-linjen viser en samlet værdi, der adskiller sig væsentligt fra den anvendte værdi, er dette sandsynligvis årsagen.

Hvad btrfs balance gør, er at sende ting tilbage gennem allokatoren, hvilket resulterer i, at pladsforbrug i bidderne komprimeres. Hvis du f.eks. har to metadata-stykker, der begge er 40% fuld, vil en balance resultere i, at de bliver en metadata klump, der er 80% fuld. Ved at komprimere pladsforbrug som denne, er balanceoperationen i stand til at slette de nu tomme stykker og frigør således plads til tildeling af nye bidder. Hvis du igen kører btrfs fi df efter at du har kørt saldoen, skal du se, at værdierne i alt og brugt er meget tættere på hinanden, da balance slettede klumper, der ikke længere var nødvendige.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *