ENOSPC: Waarom is `btrfs-balans` vereist? Wat doet het?

Ik “ve moest btrfs balance uitvoeren op mijn bestandssysteem met één apparaat terwijl ik ook al was er inderdaad vrije ruimte.

Waarom moet dit worden uitgevoerd?

Wat doet de balans eigenlijk?

Answer

In tegenstelling tot de meeste conventionele bestandssystemen, gebruikt BTRFS een tweetraps allocator. De eerste fase wijst grote delen van de ruimte toe die bekend staan als chunks voor specifieke soorten gegevens , dan wijst de tweede fase blokken toe zoals een normaal bestandssysteem binnen deze grotere regios. Er zijn drie verschillende soorten chunks:

  • Data Chunks: deze slaan reguliere bestandsgegevens op.

  • Metadata Chunks: deze slaan metadata over bestanden op, inclusief onder andere tijdstempels, checksums, bestandsnamen, eigendom, rechten en uitgebreide attributen.

  • System Chunks: Dit is een speciaal type chunk die gegevens opslaat over waar alle andere chunks zich bevinden.

Alleen het type gegevens waarvoor de chunk is toegewezen, kan in die chunk worden opgeslagen. Het meest voorkomende geval dat je tegenwoordig een -ENOSPC-fout krijgt op BTRFS is dat het bestandssysteem geen ruimte meer heeft voor data of metadata in bestaande chunks, en geen nieuwe chunk kan toewijzen. Je kunt verifiëren dat dit het geval is door btrfs fi df draaien op het bestandssysteem dat de fout veroorzaakte. Als de regel Data of Metadata een Total-waarde toont die significant verschilt van de Used-waarde, dan is dit waarschijnlijk de oorzaak.

Wat btrfs balance doet, is dingen terugsturen via de allocator, wat resulteert in ruimtegebruik in de chunks die worden gecomprimeerd. Als je bijvoorbeeld twee metadata-chunks hebt die beide zijn 40% vol, een saldo zal ertoe leiden dat ze één metagegevensblok worden dat voor 80% vol is. Door het ruimtegebruik op deze manier te verdichten, kan de balansbewerking de nu lege brokken verwijderen, waardoor er ruimte vrij komt voor de toewijzing van nieuwe brokken. Als je btrfs fi df opnieuw uitvoert nadat je de balans hebt uitgevoerd, zou je moeten zien dat de waarden voor Totaal en Gebruikt veel dichter bij elkaar liggen, aangezien de balans stukken heeft verwijderd die “niet meer nodig waren”. / p>

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *