Nekorektní chování BTRFS

Re:Nekorektní chování BTRFS
« Odpověď #30 kdy: 07. 08. 2025, 18:52:16 »
Takze je lepsi pockat s ukladanim rozpracovanych dokumentu az do chvile kdy ti uplne dojde misto a jeste se ti k tomu roz$ebe filesystem? Zajimave… ja radsi prijdu o par hodin prace nez o cely filesystem.

Clovek tady resi ECC, aby neprisel ani o bit ... a pak jsou nekteri lidi jako uplne v pohode s FS, ktery se sam podela, BY DESIGN, jen protoze autori odmitaji resit terminalni fazi.. a cele to stoji na tom, aby si uzivatel vsiml, ze pri 80% zaplneni se to zacina kapanek zpomalovat... tohle fakt jako dobre reseni neberu.

FS neni overclocking, kdy vam fyzika brani prekroceni hranic. Je to algoritmus a pevna logika.. ktera (bez AI cicovin) je porad predikovatelna a resitelna lepe.. nez to nechat dojit na segfault, v kernel mode.
Predikovatelna... hmm a proto jsme u Sunu meli velkou testovaci farmu kde bezely ruzne scenare tydny i mesice. Stejne se neprotestovalo vsechno a prvni verze zhucely na primitivnich use cases typu "hu-man u konzole" si spletl disky a nebral v potaz ruznou velikost bloku disku.  A kazda blba feature se musela protestovat mnoha scenari. Milionkrat jsem ten filesystem rozmlatil abych mu veril i v krajnich pripadech.
Takze predikovatelne to mozna teoreticky je, prakticky je tam tolik ruznych kombinacia edge cases ze to neni mozne postihnout vsechno. Pokud se nasla nejaka bota tak se slo zpetne po testech a zjistovalo se proc to nezachytily. Dost casto za to mohl prilis synteticky charakter testu.
Prijde mi tedy ze dost podcenujete komplexitu ktera u BTRFS musi byt srovnatelna.
A jak se testuje profesionalne BTRFS? SuSE/Meta? A nevymezi testovani jen na pro ne momentalni kriticke features a v produkci bezi zmrazena stabilni verze?
Z tohoto duvodu bych pro NASku aspon nepouzival experimentalni features a mel po ruce implementaci ktera se nekde pouziva a nebo podporuje pro koncaky.


Re:Nekorektní chování BTRFS
« Odpověď #31 kdy: Dnes v 12:32:07 »
Je to klasická btrfs ENOSPC past, ne „mystická“ chyba.

Co se stalo:
   1.   Došly metadata, ne data.
Metadata, RAID6: total=134.62GiB, used=134.11GiB (99.63%) – tedy metadata plná. Když jsou metadata plná, btrfs přestane zapisovat a remountne se RO, i kdybys měl ještě stovky GB v Data. Proto zároveň vidíš:
space_info DATA has 131499511808 free, is full – to znamená „uvnitř datových block group je pár volných děr, ale já z nich teď nic neudělám“, ne že je disk fyzicky plný.
   2.   Btrfs si v tu chvíli už neumělo vytvořit nový metadatový chunk.
Aby si mohl přidat 1GB metadat v RAID6, musí mít nealokovaný prostor na zařízení. Ty jsi měl všechno alokované do datových chunků, takže nebylo kam ten nový metadatový chunk dát. Proto ti i balance na začátku spadl s No space left on device.
   3.   find ti zapisoval.
Říkáš „read-only úloha“, ale na btrfs (a u 42M souborů zvlášť) to není čisté čtení – aktualizuje se atime / relatime a tím se zapisují metadata. Když jsou metadata na 99,6 %, každý takový zápis tě dorazí. Řešení: mountovat s noatime (případně aspoň relatime zkontrolovat) na takovém objemu souborů.
   4.   Po smazání pár desítek GB to stále nešlo, dokud jsi neudělal balance ... -dusage=10.
To je správně – mazání uvolní místo logicky, ale ne vždy v chunku, který potřebuješ. Balance ti přerovnal data tak, že vznikl nealokovaný prostor → btrfs si pak mohl zvětšit metadata → vše se odblokovalo. Přesně tohle je ta „btrfs headroom“ vlastnost.
   5.   Proč to neudělá automaticky?
Tvoje očekávání je rozumné („když metadata dojdou, tak si udělej kousek místa sám“), ale btrfs to v tomhle rohu neumí bezpečně udělat samo – zvlášť u RAID6 profilů, které jsou i v roce 2025 pořád citlivější než RAID1/10. Raději abort transakce + RO, než aby sahal do všech datových BG a přerovnával bez tvého vědomí.

Co z toho plyne pro provoz:
   •   Nenechávat pole dojet na 100 % alokace. U tak velkého FS (8×14 TB, 40+ M souborů) klidně nechat 1–2 % zařízení nealokované.
   •   Cron balance, třeba:

btrfs balance start -musage=50 -dusage=5 /mnt/...

nebo i agresivněji podle chování.

   •   noatime na mountu.
   •   Monitoring btrfs fi usage a hlavně metadata – jakmile jsi nad ~95 %, řešit.
   •   Při mkfs si v zásadě nevynutíš “hodně metadat dopředu” v tom smyslu, jak bys chtěl; můžeš volit profil (--metadata raid6), ale to už máš. To, co ti fakt pomáhá, je mít nealokovaný kus + pravidelně balancovat.

Takže: není to, že by btrfs byl úplně „nekorektní“, ale jo – je to nepříjemný, málo zdokumentovaný roh btrfs, který u velkých, hodně souborových, RAID6 polí vyleze. Tvoje diagnóza „došla metadata a neměl si kam šáhnout pro nový chunk, dokud neproběhl balance“ je přesná.

RDa

  • *****
  • 3 119
    • Zobrazit profil
    • E-mail
Re:Nekorektní chování BTRFS
« Odpověď #32 kdy: Dnes v 13:48:58 »
BTRFS je porad nekorektni ... aktualni stav:

Overall:
    Device size:                 130.97TiB
    Device allocated:            130.93TiB
    Device unallocated:           40.11GiB
    Device missing:                  0.00B
    Device slack:                    0.00B
    Used:                        129.98TiB
    Free (estimated):            738.63GiB      (min: 721.92GiB)
    Free (statfs, df):           738.59GiB
    Data ratio:                       1.33
    Metadata ratio:                   3.00
    Global reserve:              512.00MiB      (used: 0.00B)
    Multiple profiles:                  no

Data,RAID6: Size:97.85TiB, Used:97.16TiB (99.29%)
   /dev/***0   16.31TiB
   /dev/***1   16.31TiB
   /dev/***2   16.31TiB
   /dev/***3   16.31TiB
   /dev/***4   16.31TiB
   /dev/***5   16.31TiB
   /dev/***6   16.31TiB
   /dev/***7   16.31TiB


Zapisovat do pole jde jenom do tech UNALLOCATED jednotek, tj. muzu tam zapsat 40GB * 6/8 (protoze raid 6)

Ale kdyz se podivas na data usage - 99.29% ze zhruba 100TB, to dela 0.7% = 700 GB "volneho mista".

Prakticky ale to vetsi volne misto ktere vesele btrfs propaguje je nedostupne - cela ta vec se "zasekne" (jede to jednotky kB/sec). Proc? To nikdo nevi.

Pro uvolneni do Unallocted pouzivam balance s -dusage=95, minulej vikend jsem nechal projet -dusage=98, ale zadny efekt, byt to presouvalo par dnu data. Tak nechapu co to vlastne delalo - ale logicky vzato, efekt to mit nemuze, pokud mam 99.29% usage, tak balance by musel byt pusten zrejme s -dusage=100.

Celkove je pro me zahada - proc se prakticky neda vyuzit volne misto v existujicich alokacich.

Jakoze COW vytvari kopie, ale ta STARA verze je pri nulovem poctu referenci prece uvolnena (to je tech nedostupnych 700GB), pokud by se na ni vazala nejaka reference (ze snapshotu, ktere zde ted nejsou), tak se to prece nebude pocitat mezi FREE space.

Pak je zde faktor neskutecne pomalosti - vi se vubec jak BTFFS pouziva RAID6 ? tj. jaky je tam stripe/chunk size?? Jestli to nahodou nema nejaky wtf write amplification factor, ze by to prepocitalo gigabajty dat, i v pripade ze je zamer zapsat par kilo.

Jsem s tim jako velice nespokojeny - ze je primarni alokacni politika "vyplacat vsechny unallocated jednotky", namisto toho, aby to zapisovalo do volneho mista, ktere alokovano je - je duvodem tedy ta neefektivita RMW procesu? nebo to RMW neni vubec dovoleno a kazdy chunk (6GiB dostupny, 8*1GiB na discich) je povazovan za SMR-like zone, tj. ma to write/append, ale vubec to tedy neumi modify? (jakoze COW si s tim vystaci, ale... pak chybi efektivni zpusob defragmentace, protoze ani balance -dusage=100 se mi zda ze neprovede presne to co, co by se melo udit).

Re:Nekorektní chování BTRFS
« Odpověď #33 kdy: Dnes v 14:12:33 »
žádný raid ti nepojede při obsazenosti 99.29% proboha

RDa

  • *****
  • 3 119
    • Zobrazit profil
    • E-mail
Re:Nekorektní chování BTRFS
« Odpověď #34 kdy: Dnes v 14:48:29 »
žádný raid ti nepojede při obsazenosti 99.29% proboha

A to ma jakoze jaky duvod? Je tam 700 GB volneho mista. Proc to misto tedy neni dostupno? (tentokrat to uz mistem v metadatech omezeny fakt neni).


vcunat

  • ***
  • 166
    • Zobrazit profil
    • E-mail
Re:Nekorektní chování BTRFS
« Odpověď #35 kdy: Dnes v 16:57:50 »
Těch 700 MB nejspíš nebude volné místo v jednom kuse, ale všemožné malé kousíčky rozeseté různě po disku, co kde zrovna zbylo.  Obecně filesystémy (a zvláště CoW) běžně nefungují dobře, pokud jim nenecháte nějaké volné místo.  Vede to ke zvýšené fragmentaci, apod.  BTRFS používám spousty let a už 90% obsazenost mi přijde jako situace, kdy je lepší zbystřit a začít myslet na to, co se zaplněním dělat.  (Podobné zkušenosti mám s LMDB, což sice není filesystém ale DB a zase CoW.)

rmrf

  • ***
  • 118
    • Zobrazit profil
    • E-mail
Re:Nekorektní chování BTRFS
« Odpověď #36 kdy: Dnes v 17:30:57 »
Těch 700 MB nejspíš nebude volné místo v jednom kuse, ale všemožné malé kousíčky rozeseté různě po disku
O čemž si lze tak trochu udělat představu příkazem:
 btrfs inspect-internal list-chunks /path

Re:Nekorektní chování BTRFS
« Odpověď #37 kdy: Dnes v 18:02:23 »
žádný raid ti nepojede při obsazenosti 99.29% proboha

RAID pod blokovou vrstvou pojede, ten nejspíš obsazenost FS vůbec neřeší (ačkoli by mohl, pokud by dostával trim/discard).

Ale souborový systém obsazený na 99% je prakticky mrtvola, a to jakýkoli. Bejvalo pravidlo, řešit docházející místo při obsazení cca 75%, nejpozději 80%. Jinak hrozí patologická fragmentace FS a divné efekty. Taky se říká, měnit olej v autě nejlíp po 10-12 000 km, pokud ne častěji, žejo :-)

Pokud na ten disk ukládám malý počet velikých souborů, a ty soubory jednou zapíšu a pak už jenom čtu (a nejlíp je tam spíš kompostuju, než že bych je mazal), tak se bojím vyššího zaplnění o něco méně, protože metadat není tolik a fragmentace moc nemá jak nastat... přesto když se omylem dostanu přes 90%, tak se stydím :-)

RDa

  • *****
  • 3 119
    • Zobrazit profil
    • E-mail
Re:Nekorektní chování BTRFS
« Odpověď #38 kdy: Dnes v 19:49:29 »
Těch 700 MB nejspíš nebude volné místo v jednom kuse, ale všemožné malé kousíčky rozeseté různě po disku
O čemž si lze tak trochu udělat představu příkazem:
 btrfs inspect-internal list-chunks /path

Jedna se o 700GB - GIGABAJTU "volneho" mista.

Prikaz nic neodhalil - usage je vsude 0% - coz je divny

# head inspect-list-chunks.txt -n 12
Devid PNumber       Type/profile     PStart     Length       PEnd LNumber     LStart Usage%
----- ------- ------------------ ---------- ---------- ---------- ------- ---------- ------
    1       1        Data/RAID6     1.00MiB    6.00GiB    6.00GiB   14771  119.46TiB   0.00
    1       2        Data/RAID6     1.00GiB    6.00GiB    7.00GiB       1   37.03GiB   0.00
    1       3        Data/RAID6     2.00GiB    6.00GiB    8.00GiB       2   43.03GiB   0.00
    1       4        Data/RAID6     3.00GiB    6.00GiB    9.00GiB       3   49.03GiB   0.00
    1       5        Data/RAID6     4.00GiB    6.00GiB   10.00GiB       4   55.03GiB   0.00
    1       6        Data/RAID6     5.00GiB    6.00GiB   11.00GiB       5   61.03GiB   0.00
    1       7        Data/RAID6     6.00GiB    6.00GiB   12.00GiB       6   67.03GiB   0.00
    1       8        Data/RAID6     7.00GiB    6.00GiB   13.00GiB       7   73.03GiB   0.00
    1       9        Data/RAID6     8.00GiB    6.00GiB   14.00GiB       8   79.03GiB   0.00
    1      10        Data/RAID6     9.00GiB    6.00GiB   15.00GiB       9   85.03GiB   0.00

# grep inspect-list-chunks.txt -ve '0.00$'
Devid PNumber       Type/profile     PStart     Length       PEnd LNumber     LStart Usage%
----- ------- ------------------ ---------- ---------- ---------- ------- ---------- ------

# wc -l inspect-list-chunks.txt
134104 inspect-list-chunks.txt

(na jinem FS, kde neni RAID, ten Usage funguje spravne a odpovida ocekavanemu stavu po rebalance)

No a jak koukam sem... https://github.com/kdave/btrfs-progs/issues - 298 open issues, tak jsem tedy ZDESEN, achjo.

rmrf

  • ***
  • 118
    • Zobrazit profil
    • E-mail
Re:Nekorektní chování BTRFS
« Odpověď #39 kdy: Dnes v 20:42:54 »
To je tedy opravdu zajímavé. S tím ti asi neporadím. Ale zajímalo by mne, jakou máš verzi kernelu a btrfs-progs. AI píše, že při takovém zaplnění nemusí btrfs stíhat obnovovat interní datové struktury. Ona ale dost kecá. Chápal bych možnost těch chyb, ale v takovém případě by se to nepochybně projevilo také hlášením v logu.

RDa

  • *****
  • 3 119
    • Zobrazit profil
    • E-mail
Re:Nekorektní chování BTRFS
« Odpověď #40 kdy: Dnes v 20:46:24 »
To je tedy opravdu zajímavé. S tím ti asi neporadím. Ale zajímalo by mne, jakou máš verzi kernelu a btrfs-progs. AI píše, že při takovém zaplnění nemusí btrfs stíhat obnovovat interní datové struktury. Ona ale dost kecá. Chápal bych možnost těch chyb, ale v takovém případě by se to nepochybně projevilo také hlášením v logu.

Ja jim tam pridal bug report, kde je i verze (relativne cerstvy snad, jedu aktualizovane Gentoo)
https://github.com/kdave/btrfs-progs/issues/1055

Kód: [Vybrat]
# btrfs version
btrfs-progs v6.17
-EXPERIMENTAL -INJECT -STATIC +LZO +ZSTD -UDEV +FSVERITY +ZONED CRYPTO=builtin

# uname -a
Linux ******.***.*******.*** 6.17.6-gentoo-x86_64 #1 SMP PREEMPT_DYNAMIC Sat Nov  1 12:43:31 CET 2025 x86_64 Intel(R) Xeon(R) Gold 6130 CPU @ 2.10GHz GenuineIntel GNU/Linux

Aktualizace tech statistik se da nejak vynutit ?
Ja to ted rebootoval, zda tam neco nahodou nevysi blbe po cancelnutem rebalance, ale tim to nebylo.. mam porad nuly v usage.

rmrf

  • ***
  • 118
    • Zobrazit profil
    • E-mail
Re:Nekorektní chování BTRFS
« Odpověď #41 kdy: Dnes v 21:23:26 »
# btrfs version
btrfs-progs v6.17

# uname -a
Linux ******.***.*******.*** 6.17.6-gentoo-x86_64 #1 SMP PREEMPT_DYNAMIC Sat Nov  1 12:43:31 CET 2025 x86_64 Intel(R) Xeon(R) Gold 6130 CPU @ 2.10GHz GenuineIntel GNU/Linux
Hezké...
Citace
Aktualizace tech statistik se da nejak vynutit ?
No to asi těžko.

Zřejmě je tam nějaký bug. Nebo to prostě ještě nemají dořešeno.

Každopádně to využití 99.29% je strašně vysoké.