Budoucnost je nyní! Ještě aby podpora pro blocksize != pagesize přestala být experimentální i v btrfs a opět budeme žít v 21. století.
Cca před dvěma lety jsem známému dělal obnovu dat z mrtvé NASky, která díky jiné architektuře používala EXT4 s 64k blocksize a ani on - celkem technicky zdatný uživatel - si to neuměl díky tomu vytáhnout. Musel jsem na to tehdy využít FUSE a nějakou obskurní utilitu k tomu. Doufám, že až to budu dělat příště (předpokládaje, že již budu mít v té době kernel, ve kterém bude tento patch mergenutý), půjde již podobný FS namountovat klasickým způsobem z civilizovaného světa.
27. 10. 2025, 20:57 editováno autorem komentáře
Jesteze pro zachranu dat pouzivam vlastni re-implementace FS, takze pokud by takova vec nefungovala davno sama, dopsat to by bylo na chvilku :)
Dávalo by to smysl přinejmenším proto, že by to někomu mohlo (hodně?) pomoct při záchraně dat, pokud to má nějaké unikátní vlastnosti - což předpokládám, protože proč jinak implementovat něco, co už existuje. Na druhou stranu úplně chápu, že máš své důvody to jako opensource neuvolnit a je to tak úplně v pořádku.
Ten tooling je specificky pro kazdou zakazku na obnovu dat - a je tam nekolik hodinova adaptace, resp. analyza toho co tomu vlastne je, ta implementace je pak uz primocara. Je treba rozumet problematice a samotnemu problemu co nastal - jakym zpusobem jsou data poskozena. Ma to diry? Ma to prepsane adresare? Dvojmo zformatovane / prolnute filesystemy? A milion dalsich veci, vcetne formatu souboru, kontejneru a kodeku (moje specializace je pro multimedialni formaty). Mnohonasobne skenovani, objevovani specifickeho patternu, atd..
Lidi si predstavuji ze to je jednoducha aplikace co pustis, kliknes a na druhe strane vylezou data - vubec. Casto to pripomina spis EEG a snahu o cteni myslenek - poskladani velice slozite mozaiky - kde znalost rezimu selhani je klicova.
Hotove reseni funguji pouze na neposkozena data.. to by lidi nemuseli prece hledat a potrebovat specializovane sluzby.
Jestli nekdo chce pomoct - tak mu radim jedine - nastudovat si obor, umet programovat, mit schopnost cist dokumentaci, a investovat neomezene sveho casu k vyreseni sveho problemu. Pokud neco z toho nemuze.. je lepsi to sverit tem, co to umi / absolvovali.
Proc implementovat neco co uz existuje - protoze to muzete ridit ve vlastni rezii - a castecna/degradovana fukcionalita je vic, nez nejaky error typu - corrupted, unable. Resim veci, kde human-in-the-loop je potrebnej, protoze se to samo sebou nespravi.
proč? Také to jde. Jak psal RDa výše, ty nepotřebuješ nástroj, který umí všechny obskurní funkce, komprese, ale jen ty, které jsou reálně použité. ZFS zase nemá tak složitou strukturu dat na diskách (block pointer tree, dsl dataset a pak directory a file contents). Ano věci jako raidz, šifrování nebo třeba gangblock ti to komplikují, ale není to nic nemožného to nějak implementovat.
Nebavíme se o tom, že uděláš plně funkční FS (zfs má velmi komplikovanou tu runtime část), ale že dokážeš nějak rozumně přečíst, to co je na disku a s nějakou úspěšností rekonstruovat data. U ZFS je výhoda, že data obsahují i checksum, takže pokud ho přečteš, můžeš vyhrabaná data i ověřit.
Potrebujes ty "obskurni" funkce protoze zakaznik je pouziva / muze pouzivat :-D Fakt ze je povazujes za obskurni neznamena ze je zakaznik nepouziva ( pokud nejsou oznaceny testovaci).
Neni "nic sloziteho". Takze do 3 dnu hotovo i s otestovanim?
Jinak spise pro realnou praci predpokladam napsani nastroju nad zdb/jeho stavajicim kodem. Protoze jen vocas bude objevovat kolo.
Buď děláš produkt a ty funkce bys měl samozřejmě implementovat dopředu nebo děláš službu a ty funkce si nějak implementuješ pokus-omyl jakmile ti příjde taková zakázka. Já se bavil o té druhé variantě, kterou tady RDa popisoval.
Pokud máš na vstupu poškozená data, zdb je dost striktní a velmi rychle ti umí služby ukončit, nepracuje v režimu, že ti stačí získat jen část dat nebo si některé věci pokusit dopočítat. Často ten fs dostaneš ve stavu, kdy ti už zdb hlásí problémy a nechce jít dál.
Jo, za tři dny práce můžeš mít už nějaké výsledky a data. Zase nezapomeň, že neděláš produkt, ale něco, co stačí, když ti bude fungovat na tom, co dostaneš. Iteruješ podle dokumentace, open source zdrojáků a rovnou testuješ na dumpu disku. Předpokládám, že takhle to i RDa dělá. Za ta léta jsem si také prošel různými opravami různě rozbitých fs vč. těch distribuovaných. Jo někdy jsou maličkosti, které tě na týden zabetonují, jindy máš za pár hodin obstojné výsledky, jindy máš tolik dat, že to pak dva týdny běží.
Chtěl jsem jen říct, že zfs prostě na úrovni dat na disku není složité, když ti jde jen o to, vše nějak přečíst.
Ano, delam to tak. Test je vuci aktualnimu dumpu.
ZFS/BTRFS jsem nedelal, z tech mene klasickych FS tam bylo nedavno HFS+. Dokazal jsem v nem opravit dost, aby se to dalo pak pripojit jako disk skrze OSS driver v Linuxu - tj postaci implementovat tolik - aby bylo zrejme co selhalo, v konkretnim pripade - rekonstruovat prepsany zacatek protoze byl disk inicializovan a preformatovan na ExFAT, neco, co pri trose ne-stesti udelaj win bud sami nebo je k tomu treba nevedome ukliknuti v podivne vyzve/hlasce. Plus trocha opruzu s GPT nad hw raidem (byl to mirror), kdy hw raid prezentuje disk zmenseny o sve systemove oblasti.. a GPT implementace v kazdem OS jsou celkove nestastnej z toho, ze backup table je jinde.. v linuxu si clovek poradi skrze losetup nebo device mapper.
MacOS presto nechtel volume primountovat. FSCK na nem pritom nehlasilo zadnou chybu - skvely co? Ale pak v nem sla provest konverze HFS+ na APFS, ktera si dane "chyby" nebo co zpusobovalo nemoznost mountu vubec nevsimla.
Takze ackoliv jsem implementoval cely FS zespoda - abych dostal data a vedel ze ty data tam proste fakt jsou (a uklidnil klienta vzorky), oprava spocivala nakonec ve vygenerovani noveho superbloku a te necekane konverzi v MacOS - pak se z toho data stahli uz klasicky vcetne vsech frikulinskych prav a metadat co MacOS vede. Tak mam holt dalsi tool na dump dat do sbirky.. az bude potreba.
TLDR:
OSS / proprietarni driver / debug dumper = selze na chybejicim superbloku
vycucat novej superblok z prstu nejde, je treba tomu porozumet co clovek dela
A preferoval jsem dostat data z toho po sve ose.. ze to nakonec slo nativne / po konverzi, byla prijemna vyhoda. Ostatne - sroubek stoji halire.. ale opravare platite proto, aby vam rekl kterej je ten problematickej :)
Na zachranu dat z robiteho FS spoustu funcionality toho FS vubec nanic nepotrebujes. Vazne nevim, nac by ti treba bylo implementovat CoW. A takovych funcionalit jsou stovky.
A naopak, chces precist i ta data, o kterych ti FS rekne, ze jsou necitelna, protoze ... treba nesedi hash ... coz je ti tak nejak uplne jedno.
Co se realne pouziva se da zjistit. Ale pripomela mi tahle debata, jak jsem jednou kdysi davno opravoval rozsypane XFS... tri dny to netrvalo, ale prozkoumat co tam jak je a co je spatne jeden krasny vecer zabralo. Ale porad to bylo rychlejsi, nez obnova ze zalohy... a bylo to hodne low-level hrabani se ve strukturach.
Nechci vyloženě rýpat, taky se rád hrabu v datových strukturách, ale co trvá na obnovení zálohy tři dny a ještě je jednodušší se hrabat v rozbitém FS? Už nějakých 20 let ani neřeším nějaké další přepínače u fsck a raději vytáhnu zálohu, je to spolehlivější.
"raději vytáhnu zálohu"
Obnovovani zalohy je to uplne posledni, co chces delat. Z tisicu ruznych duvodu.
Vzdycky pritom dojde ke ztrate dat, mozna libovolne male ale zcela garantovane. Navic obnovovat desitky TB (kdyz v malem) = dost casto dny.
Jako bonus, narazis na spousty mooc krasnych veci ... treba na tema ze ty zcela spravne odzalohovany widle, se ti nepripojej do domeny, protoze mezi zalohou a obnovou doslo na zmenu hesla, a tudiz to co mas v ty zaloze ... uz neplati.
To je datacentrum někde v jeskyni? Na starém 10Gbps ethernetu obnovíš 80TB za den. Naše vmka mají max 1TB (z různých důvodů) a snapshoty se dělají tak často, jak je potřeba (mimo těch pravidelných), takže na záloze je vše, co tam má být. DB servery mají buď replikace nebo zálohování (streaming), takže je tam poslední transakce. Navíc hromada VM je tam v nějaké kopii, takže stačí dotáhnout pouze snapshoty od pořízení klonu. Obnova čehokoliv je v řádu minut a samozřejmě to pravidelně testujeme.
Pokud někdo po změně hesla na provozním serveru neudělá aktuální zálohu, tak je prostě pííííp.
Skutecne velke objemy dat proste dlouho trvaji, limitou muze byt i rychlost zalozniho media (restore z pasky taky trva dyl, zejo). Jasne, pokud si to nekde smudlate s par GB, tak restore z backupu bude asi rychlejsi :-)
Tve mě se fakt líbí ta představa, že všichni mají server na sd kartě v RPi :-D Jinak viz komentář výše. I na 10GbpsE, což je dneska hračka na doma, máš nějakých 80TB za den.
Opravdu bych nechtěl mít server u provozovatele, který se raději tři dny hrabe v nabořeném FS místo toho, aby klikl na tlačítko restore backup. Na restore z pásky trvá nejdéle to, než to robot zasune do mechaniky. Potom už to fičí nějakých 400MB/s.
Thanks, captain obvious. Samozrejme ze neni problem ani stogigova sitovka, to je dnes take spotrebak. A sam jste si i tou paskou nazorne prokazal, ze tou nezvladnete ani naplno vyuzit ten desetigigabit... a podobne uzka hrdla muzou byt proste i jinde.
Mimoto, i to kliknuti na tlacitko muze selhat... historie takovych incidentu pamatuje... vagony :)
No já jsem se jenom ptal, kdy je lepší tři dny obnovovat FS než vytáhnout jednu zálohu, ať už je teda na čemkoliv. Zase tak pomalé ty pásky nejsou, aby to trvalo tři dny.
Zalezi na objemu dat. Vy dle dnesnich moznosti srovnavate jako by treba pred deseti lety byly stejne. Nedejboze pred delsi dobou. Zapatrejte v historii... ;-) Vzdy zalezi na okolnostech a take na casovem zasazeni (o kterem nevite, ale zavery cinite).
Nebyl ten NAS nahodou WD MyCloud? Mam doma jeden tzv. gen1 s 2TB diskem co mi nekdo dal protoze mu nejak po zapnuti nenabihal, nejake hw info https://fox-exe.ru/WDMyCloud/WDMyCloud-Gen1/Developing/
Bezi to na linuxu s 64k strankama, nema to zadnou flash pamet, bootuje to rovnou z toho velkeho sata disku, na prvnich partisnach je kernel a rootfs a az pak data co se sdileji, ma to malo ram tak to dokonce zapina i swap na tom disku. To jsem, pak zjistil ze byl ten problem proc mu to nenabihalo. ten swap se nejak nezapnul a bez neho tam veci po startu padaly na nedostatek pameti. Nejaka divna architektura, stary kernel a je na to debian jessie. Zadarmo dobry, ale nic moc. Ma to relativne nizkou spotrebu, sata rozhrani, hmm, asi by se z toho dal udelat nejaky NAS nebo neco, kdybych mel cas :-)
28. 10. 2025, 09:40 editováno autorem komentáře
To je presne ten duvod, proc neverim NAS - krom NetAppu ;-) - vazim si svych dat, a vetsinou to vyropbce nejak dopmrvi, enmbot i prews X let na trhu maji porad mene zkusenosti nez ja a tak si to radeji poskladam sam z veci, co jsou vice legacy, ale zase funguji - treba ze budu mit SW-RAID a az na nem BTRFS a tak - budu vedec jake bloky jsme pouzil a vim,. ze tam nenei nejaka uber nestabilni sranda, jen aby to mel nejakou feture ;-)
Treba porad nemam RO flasch-ssd cache - bud se to musi delat s blo9ck device, ma to umet ZFS - ktery ale spadne a znici data - umel to experimentalni FS co vykopli z jadra - ale pry to daji do BTRFS ... nechci SSD cache pro zapis a pokud ano, tak jen poslednich dat a hybaj na disky, idelne ale vubec a aby na SSD daval jen casto ctena data - nebot kdyz spadne, tak me to nebude trapit, ja tak videl spadnout EMC pole a regulerne to droplo data desitkam tisic serveru ;-) a ani EMC to nedokazal opravit ... btwe mezi nami opdbornbiky se rika, kdo neprisel o data na EMC neni storage-engineer ;-) ... no ja EMC vzdy zakazl a kdyz jsme se dostal do firmy, kde meli kupu VNX tak jskme se jen zeptal, kolikrat preisli o data, ne zda prisli o data, ale kolikrat ;-) hlaska je udivila, nebot EMC jim tvrdila ze se to stalo opakovane jen u nic ;-) no tak ja jsme jim potvrdil jedinym dotazem, ze se to deje BEZNE a ze jim tak trochu EMC lhalo ;-) ale meli vzdy bakupy tak aspon vedeli, ze Veeam funguje sklvele ;-)
RO ssd cache.. muzes pod btrfs vlozit bcache, sice byl puvodne urcen jako write cache pro netbooky, ale v dnesnim svete to jde uplne v poho pouzivat jako RO cache.
Neplatí tam ale ta příjemnost, že když se to SSD odporoučí do křemíkového nebe, tak to pak nejde (bez nějakých recovery kroků) namountovat?
Kdysi jsem to chtěl zkusit (velmi dobrá zkušenost z ESXi flash cache, a pak taková obojetná z hybridní Firecudy, kterou pak ale vysvětlilo to, že tam to malé SSD není kvůli užiateli, ale protože tam narvali SMR) a pamatuju si, že mě něco takového odradilo.
Pokud ta cache je RO, tak tam muze ale nemusi byt. Posledne jsem delal nove pole uz s pripravou na bcache, takze ten block device je spravne nakonfigurovan, tece to pres bcache driver, ale ten nic nedela protoze samotny cache device (ty SSD) tam jeste nejsou nainstalovany fyzicky.
Dostat to do tohoto stavu by nemel byt zadny problem - proste z hlavniho device se odebere (odkonfiguruje) selhane cache SSD. Data by nemela byt nijak poskozena - cache byla RO. Takze spis nez recovery, se jedna o spravnou konfiguraci pole (vice zabavy si uzijete s btrfs kdyz vam spadne do RO rezimu sam.. ale to je uz jine tema).
Dík, objednám v Alze nějaké levné SSD a pohraju si :). Proti tomu, co jsem tehdy četl je tohle naprosto v pohodě.
Jo failnutou SSD cache na EMC jsem viděl taky, nějaká data z toho nakonec dostali, ale trvalo jim to déle, než obnova z backupu. Jestli si to dobře pamatuji, tak tam byl hlavní problém v tom, že na těch SSD byly hlavně metadata, takže nešlo udělat jen prosté "zákážu cache" a jede se dál.
Jinak v ssd write cache nevidím zas takový problém, pokud je tam dobrá write-back strategie, a ty data nevisí v ssd moc dlouho a používáte disky d dostatečným DWPD a ne nějaký "lowend z hypermarketu".
Tu RW cache jsem zvazoval ale nemel odvahu nasadit zatim.
Existuje NVMe ramdisk (8GB), ktery lze pouzit jako neopotrebovatelnej buffer, ale kapacitne to je malo.. 8 vterin po 10GbE .
Dalsi varianta je SSD mirror, idealne NVMe+SATA, at se vylouci navrhova chyba media/fw.. jenze SATA to bude brzdit (neda to 10GbE wirespeed).
Z pohledu bezpecnostni politiky by ta WriteCache musela byt nakonfigurovana tak, aby cachovala vse (tj. zadne takove to, ze linearni zapisy jdou bokem mimo ni) - takze to nese sebou vetsi opotrebeni disku, ale ma to vyhodu, ze se zkrati potencialni okno selhani - na dobu co trva jeji flush na disky. A ten flush chcete delat az pote, co se cache naplni (a vse je dirty).
Bohuzel jsem ale nenasel reseni, ktere by delalo flush v poradi, ktere zajisti konzistenci FS na hdd v pripade selhani veprostred flushovani (bavime se o btrfs napr), na coz se i upozornuje stylem "bcache + btrfs nejde dokupy".
Takze jedine reseni je - mit absolutne spolehlivou storage pro cache (a na tom ze to prakticky nejde, to realne pak lidem pada).