Portál AbcLinuxu, 10. května 2025 00:17
Ahoj, cirou nahodou jsem zjistil, ze existuje neco, jako zurnal, takze me obavy o rozbiti filesystemu pri tvrdem vypnuti serveru jsou zbytecne.
Zajimalo by mne, jak je to spolehlive a jestli tedy opravdu nemuze dojit k poskozeni dat.
Mam vytvoreny sifrovany souborovy system v souboru, pripojeny jako LOOP. Ten soubor ma nekolik set GB a lezi na hlavnim EXT4. Skutecne se nemuze stat, ze kdyz dojde k vypadku napajeni, tak se ten soubor nerozbije? Pak by se totiz zrejme poskodil cely sifrovany svazek, ktery je v tom souboru a prisel bych o vsechna data, proto, i kdyz mam vse zalohovane a dokonce pouzivam UPSku, z toho nemam klidne spani a zajima mne, zda je zurnal na EXT4 vselek a nemuze se stat, ze by se souborovy system kolapsem behem zapisu poskodil.
Journal u ext4, pokud se nenastaví jinak, NEZABRÁNÍ poškození dat, ale pouze poškození metadat. Journal zaručuje konzistenci FS, nikoliv souborů.
Odpověď na otázku: Skutecne se nemuze stat, ze kdyz dojde k vypadku napajeni, tak se ten soubor nerozbije? je ano, může se stát, že se ten soubor rozbije.
Jestli chcete mít o něco klidnější spaní, tak šifruje přímo blokové zařízení (a nikoliv soubor s fs na nějakém dalším fs) a ext4 v tom šifrovaném blokovém zařízení připojujte s volbou data=journal
.
Sice ani potom nemáte zaručeno, že o svá data nepřijdete (to nemáte nikdy), ale riziko výrazně minimalizujete. Záloha je v každém případě nutná.
Předpokládám, že BTRFS by se v tomto směru choval lépe, protože pro zápis používá copy-on-write, takže nemůže nastat případ, že z jednoho zápisu bude polovina zapsaná a polovina ne.
Ano, choval by se lépe, ale ani BTRFS neumí transakce. Tedy ano, data po fsyncu (a výpadku energie) se buď spolehlivě zapíší nebo spolehlivě nezapíší, ale nikde není zaručeno, že před tím vynuceným fsyncem nedošlo k zápisu například z důvodu plné dirty page cache nebo třeba commit timeoutu.
Ale pořád může nastat případ, že z nadřízeného systému (šifrovaného FS) přijdou požadavky na zápisy 1, 2, 3, provede se 1 a 3 ale dvojka se nestihne dokončit - a to na poškození toho šifrovaného systému bohatě stačí.
Také bych to tak viděl. Nečekal bych, že přes loop budou správně fungovat zápisové bariéry, právě proto nedoporučuji používat šifrovaný fs přes loop blokové zařízení ze souboru na jiném fs. (To by níže položený fs musel umět pracovat nejen s klasickým f(data)sync (s čímž měla ext3 jisté problémy), ale dokonce i s pořadím operací (což se rozhodně nezachovává už jen z toho důvodu, že změna pořadí operací je jedna z hlavních optimalizací při práci s blokovým zařízením -- pochopitelně s přihlédnutím k bariérám)
Metadata jsou "data o datech". Pro uživatele tedy věci jako jménou souboru, umístění souboru do určitého adresáře, časy, práva. Dále jsou to interní věci daného FS jako je seznam inodů, bitmapa volného místa a tak dále.
To znamena, ze standartne tedy, kdyz probiha zapis do souboru a vypnu ten stroj, tak se poskodi jen dany soubor, ale konzistence filesystemu zustane zachovana, je to tak?
V podstatě ano. Ten soubor nemusí být jen jeden, což je asi jasné.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.