Am „nevoie să rulez btrfs balance
pe sistemul meu de fișiere unic dispozitiv pe măsură ce primeam ENOSPC
chiar dacă a existat într-adevăr spațiu liber.
De ce trebuie executat acest lucru?
Ce face efectiv soldul?
Răspuns
Spre deosebire de majoritatea sistemelor de fișiere convenționale, BTRFS folosește un alocator în două etape. Prima etapă alocă regiuni mari de spațiu cunoscute sub numele de bucăți pentru tipuri specifice de date , apoi a doua etapă alocă blocuri ca un sistem de fișiere obișnuit în aceste regiuni mai mari. Există trei tipuri diferite de bucăți:
-
Bucăți de date: acestea stochează date de fișiere obișnuite.
-
Bucăți de metadate: acestea stochează metadatele despre fișiere, inclusiv, printre altele, marcaje temporale, sume de verificare, nume de fișiere, proprietate, permisiuni și atribute extinse.
-
Bucăți de sistem: acestea sunt un tip special de bucăți care stochează date despre locul în care se află toate celelalte bucăți.
Numai tipul de date pentru care este alocată bucata poate fi stocat în acea bucată. Cel mai frecvent caz în aceste zile când primiți o eroare -ENOSPC pe BTRFS este că sistemul de fișiere a rămas fără spațiu pentru date sau metadate în bucăți existente și nu poate aloca o bucată nouă. Puteți verifica dacă acesta este cazul rularea btrfs fi df
pe sistemul de fișiere care a generat eroarea. Dacă linia de date sau metadate arată o valoare totală care este semnificativ diferită de valoarea utilizată, atunci aceasta este probabil cauza.
Ce face btrfs balance
este de a trimite lucrurile înapoi prin alocator, ceea ce duce la compactarea utilizării spațiului în bucăți. De exemplu, dacă aveți două bucăți de metadate care sunt ambele Plin de 40%, un sold va face ca aceștia să devină o bucată de metadate care să fie plină de 80%. Prin compactarea utilizării spațiului astfel, operația de echilibrare este apoi capabilă să șteargă bucățile acum goale și astfel eliberează spațiu pentru alocarea de bucăți noi. Dacă rulați din nou btrfs fi df
după ce rulați soldul, ar trebui să vedeți că valorile Total și Utilizate sunt mult mai apropiate una de cealaltă, deoarece soldul a șters bucăți care nu mai erau necesare.