ENOSPC: Proč je vyžadován `btrfs balance`? Co to dělá?

Potřeboval jsem spustit btrfs balance na mém souborovém systému s jedním zařízením, protože se mi zobrazoval ENOSPC i když tam skutečně bylo volné místo.

Proč je potřeba to spustit?

Co vlastně dělá zůstatek?

Odpověď

Na rozdíl od většiny konvenčních souborových systémů používá BTRFS dvoustupňový alokátor. První stupeň alokuje velké oblasti prostoru známé jako bloky pro konkrétní typy dat , pak druhá fáze přiděluje bloky jako běžný souborový systém v těchto větších oblastech. Existují tři různé typy bloků:

  • Datové bloky: Ukládají data běžných souborů.

  • Části metadat: Ukládají metadata o souborech, mimo jiné včetně časových razítek, kontrolních součtů, názvů souborů, vlastnictví, oprávnění a rozšířených atributů.

  • Systémové bloky: Jedná se o speciální typ diskových bloků, který ukládá data o tom, kde jsou umístěny všechny ostatní diskové bloky.

V tomto bloku lze uložit pouze typ dat, pro který je blok přidělen. Nejběžnějším případem, kdy se v dnešní době zobrazí chyba -ENOSPC na BTRFS, je to, že v souborovém systému došlo místo pro data nebo metadata ve stávajících blocích a nelze přidělit nový blok. To můžete ověřit tím, že běží btrfs fi df na souborovém systému, který způsobil chybu. Pokud řádek Data nebo Metadata zobrazuje celkovou hodnotu, která se výrazně liší od použité hodnoty, pak je to pravděpodobně příčina.

Co btrfs balance dělá, je posílat věci zpět přes alokátor, což má za následek využití prostoru v komprimovaných blocích. Například pokud máte dva bloky metadat, které jsou oba 40% zaplněno, zůstatek bude mít za následek, že se stanou jedním blokem metadat, který je zaplněn z 80%. Při takovém kompaktním využití prostoru je pak operace vyvážení schopna odstranit nyní prázdné bloky a uvolní tak prostor pro přidělení nových bloků. Pokud znovu spustíte btrfs fi df po spuštění zůstatku, měli byste vidět, že hodnoty celkem a použité jsou si navzájem mnohem bližší, protože bloky odstraněné z váhy již nepotřebovaly.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *