ENOSPC: Hvorfor er det nødvendig med «btrfs-balanse»? Hva gjør den?

Jeg har trengt å kjøre btrfs balance på filsystemet mitt for den ene enheten da jeg fikk ENOSPC selv om det faktisk var ledig plass.

Hvorfor må dette kjøres?

Hva gjør balansen egentlig?

Svar

I motsetning til de fleste konvensjonelle filsystemer bruker BTRFS en to-trinns allokator. Det første trinnet tildeler store områder av plass kjent som biter for bestemte typer data , så tildeler andre trinn blokker som et vanlig filsystem i disse større regionene. Det er tre forskjellige typer biter:

  • Databiter: Disse lagrer vanlige fildata.

  • Metadata Chunks: Disse lagrer metadata om filer, inkludert blant annet tidsstempler, sjekksummer, filnavn, eierskap, tillatelser og utvidede attributter.

  • Systembiter: Dette er en spesiell type biter som lagrer data om hvor alle andre biter ligger.

Bare typen data som klumpen er tildelt til, kan lagres i den klumpen. Det vanligste tilfellet i disse dager når du får en -ENOSPC-feil på BTRFS er at filsystemet har gått tom for data eller metadata i eksisterende biter, og ikke kan tildele en ny del. Du kan bekrefte at dette er tilfelle ved kjører btrfs fi df på filsystemet som kastet feilen. Hvis data- eller metadatalinjen viser en totalverdi som er vesentlig forskjellig fra den brukte verdien, er dette sannsynligvis årsaken.

Det btrfs balance gjør er å sende ting tilbake gjennom allokatoren, noe som resulterer i at plassforbruket i biter blir komprimert. Hvis du for eksempel har to metadatabiter som begge er 40% full, vil en balanse føre til at de blir en metadata del som er 80% full. Ved å komprimere plassbruk som dette, kan balanseoperasjonen da slette de nå tomme biter, og frigjør dermed plass til tildeling av nye biter. Hvis du igjen kjører btrfs fi df etter at du har kjørt saldoen, bør du se at total- og bruktverdiene er mye nærmere hverandre, siden saldo slettede biter som ikke var nødvendig lenger.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *