"Špatně" jsem dal do uvozovek. Tohle opravdu není jednoznačné. Podle mě by ale aplikace při přepisu souboru rozhodně neměli ten starý mazat. Možná by se dalo argumentovat výkonem, ale to je věc FS a ne aplikace.
Nemazat. Kdyby svoje konfiguraky prepisovaly, bylo by to bez problemu. Je samozrejme otazka, jestli je to chyba aplikace, nebo filesystemu. ja bych to spis hazel na filesystem, protoze jde o tweak fs kvuli rychlosti.
Pokud to chapu dobre, tak jde o to, ze aplikace vytvori novy soubor, zapise do nej konfiguraci, a pak jej prejmenuje na misto stareho souboru. To je casto pouzivana technika na UNIXech, protoze semantika UNIXovych FS v tomto pripade zarucuje (nebo alespon doposud zarucovala), ze v pripade padu systemu v souboru bude BUD cela stara NEBO cela nova verze. Proste soubor bude konzistentni. Totez plati pro pad aplikace.
Pokud byste prepisovali primo stary soubor, mohlo by se stat, ze system/aplikace spadne v pulce zapisovani a v souboru bude polovina dat z nove verze a polovina ze stare => bude nekonzistentni a nejspis k nicemu.
Pokud pod ext4 toto nefunguje, tak to vidim jako jednoznacny bug FS.
Presne takhle to funguje .... prepisuje se stary, i kdyby se mazal, tak je to jedno, ty data tam fyzicky na disku jsou a nulama se to nemaze. Jde o to, ze kdyz system padne v pulce zapisu 5MB konfiguraku, tak jsi v prdeli a existuje vysoka sance, ze te ceka kompletni reinstal systemu, coz je skoro smesne, ale je to tak ...
nejlip se to vyzkousi treba na vmwaru, kde priblizne v 50% kdyz se takhle linux natvrdo zabije, tak uz nikdy bez problemu nenajede (vetsinou treba Xka, serou se aplikace atd).
Windows takhle zabijim ve vmwaru 5x denne a doposud nikdy sebemensi problem ... ze by snad ten princip DB s zurnalem pro konfiguraci - registry, nebyl az tak spatny?:o)
??? vzdyt prave pisu, ze se stary neprepisuje, ale vytvori se novy a udela se rename.
Timhle se da pekne udelat transakce ("vsechno nebo nic") na urovni FS. A hodi se to nejen kvuli padum, ale pokud chcete menit soubor, ktery nejaka jina aplikace periodicky otevre-precte-zavre. Vytvorite novou verzi a pak udelate rename a mate zajisteno, ze aplikace precte bud starou, nebo novou verzi. Na Windows tohle nefunguje a obcas mi to docela chybelo.
Tady je problém v té delayed allocation. Při vlastním zápisu se na disk nezapíše nic. Může dojít ke stavu, kdy vytvoříte soubor A, zapíšete do něj, smažete soubor B, dojde k havárii, ale soubor A po restartu neexistuje díky delayed alokaci. Linux je na podobné věci náchylný. Byl to tuším RFS, u kterého se stávalo, že thread A vytvořil soubor, dostal zpátky handle, thread B se snažil do souboru zapsat, a zápis selhal, protože soubor podle RFS ještě neexistoval. A pokud si vzpomínám, "opravovalo" se to úpravami aplikací (konkrétně MTA). Při návrhu se holt musí uvažovat :/
O kus vedle jsem popisoval, že Windows Registry má transakční mechanismus, takže každá hodnota v Registry bude obsahovat buď novou, nebo starou hodnotu. V případě Linuxu můžete přijít o celý konfigurák.
jenze windows se argumentovat neda - oni totiz evidentne ty registry na disk zapisuji nekdy pri odhlaseni uzivatele nebo vypnuti systemu. Pokud se do nich neco zapise a natvrdo resetujes system, tak po dalsim bootu tam ty zapsane informace proste nejsou. Jinak si nedokazu vysvetlit to, ze kdyz neco nainstalujes a pak se ti resetne pc, tak ta aplikace se tvari jako ze neni nainstalovana. Nebo jsme na jednom serveru zmenili regionalni nastaveni, pak se ty wokna musely natvrdo resetovat (cely to zatuhlo nebo uz nevim proc), kazdpopadne po restartu tam bylo zase to stare nastaveni a clovek to mohl prenastavit znovu.
Me jako uzivateli je uplne jedno, jestli maj zurnal nebo ne. Me zajima to, ze kdyz se wokna nekorektne ukonci treba pri vypadku elektriny, tak proste v tech registrech ty zmeny (co jsem udelal treba pred pul dnem) nemam, coz je na hlavu.
A máte vyzkoušené, že se změny do Registry zapsaly? Je dost možné, že se nastavení změnilo jen v aplikaci, a do Registry se zapíše až v případě ukončení té aplikace.
Řeč byla ale primárně o tom, že u Ext4 dochází ještě častěji k tomu, že se konfigurace úplně ztratí. To se vám ve Windows opravdu nestane. Když zapíšete hodnotu do Registry, a dojde k přerušení napájení, tak tam po rebootu najdete buď starou hodnotu, nebo novou. Určitě se nestane, že by vám kvůli tomu odpadnul daný klíč (tj. node stromu) Registry.
Registry sem netahat! Je jedno jestli má konfigurák 5M nebo 1B, když s vytvoří nový a pak změní jméno na původní, tak je velikost irelevantní. To aby tam alespoň jedna z verzí souboru zůstala je věc žurnálu FS.
a nejde tam spis o to ze nekdo nepouziva fsync a pak se divi ze se data nezapsala fyzicky na disk? to same se stane na ext3 pokud se s padem trefite mezi defaultni 5sec commit ....
Presne tak, aplikace cekaji, ze se samo od sebe stane neco, co jim nikdo nezarucuje. Pokud to chteji, maji moznost si to explicitne vyzadat. Co jsem videl ty scenare, pri kterych to nastava, tak to bylo vzdy spatne naprogramovane. Nefungovalo to spravne ani dosud, jen to casove "okenko", kdy se to mohlo projevit, bylo mensi a tak to tolik nevadilo.