Szükségem volt a btrfs balance
futtatására egyetlen eszköz fájlrendszeremen, amikor ENOSPC
annak ellenére, hogy valóban volt szabad hely.
Miért kell ezt futtatni?
Mit csinál valójában az egyensúly?
Válasz
A legtöbb hagyományos fájlrendszertől eltérően a BTRFS kétlépcsős allokátort használ. Az első szakasz nagy térrészeket oszt ki darabként, bizonyos típusú adatokhoz , akkor a második szakasz a szokásos fájlrendszerként blokkokat oszt ki ezeken a nagyobb régiókon belül. Három különböző típusú darab van:
-
Adatcsomók: Ezek rendszeres fájladatokat tárolnak.
-
Metaadat-darabok: Ezek a fájlok metaadatait tárolják, ideértve többek között az időbélyegeket, az ellenőrző összegeket, a fájlneveket, a tulajdonjogot, az engedélyeket és a kiterjesztett attribútumokat.
-
Rendszerdarabok: Ezek egy speciális típusú darabok, amelyek adatokat tárolnak arról, hogy az összes többi darab hol található.
Csak azt az adattípust lehet tárolni, amelyhez a darab lefoglalt. Manapság a leggyakoribb eset, amikor -ENOSPC hibát kap a BTRFS-en, az, hogy a fájlrendszerben elfogyott a hely a meglévő darabokban lévő adatok vagy metaadatok számára, és “nem rendelhet új darabot. Ellenőrizheti, hogy ez a helyzet-e btrfs fi df
futtatása a hibát dobó fájlrendszeren. Ha az Adatok vagy a Metaadatok sorban a Teljes érték látható, amely jelentősen eltér a Használt értéktől, akkor valószínűleg ez az oka.
A btrfs balance
feladata az, hogy visszaküldje a dolgokat az allokátoron keresztül, ami azt eredményezi, hogy a darabok tömörülnek. Ha például két metaadat-darab van, mindkettő 40% -kal teli, az egyensúly azt eredményezi, hogy egy olyan metaadat-részdé válnak, amely 80% -kal megtelt. Az ilyen helyhasználat tömörítésével a mérlegművelet képes törölni a már üres darabokat, és így helyet szabadít fel az új darabok kiosztására. Ha a mérleg futtatása után ismét futtatja a btrfs fi df
elemet, látnia kell, hogy az Összes és a Használt érték sokkal közelebb van egymáshoz, mivel az egyenleg törölte azokat a darabokat, amelyekre már nem volt szükség.