UFS a jeho oprava

FreeBSD obsahuje dvě verze UFS. Jedná se o původní UFS, dnes označované jako UFS1, které bylo do BSD systémů implementováno v roce 1982. Limit velikosti UFS1 je 1 Terabyte při 512B sektorech, protože používá 32-bitovou strukturu čítačů a offsetů - 2^41 byte (2^32 * 512). V roce 2003 byla implementována nová verze UFS, označovaná jako UFS2. Ta už používá 64-bitovou strukturu čítačů a offsetů, která umožňuje růst až na 2^73 byte (2^64 * 512). Bohužel, pár nástrojů zatím nadále používá 32-bitovou strukturu.
UFS nemá implementovanou žádnou ochranu, nejedná se o žurnálový souborový systém a po nekorektním odmountování je vhodné provést jeho kontrolu. Je zde ale implementována optimalizace pomoci softupdates. Ty udržují všechny metadata (adresářovou strukturu a i-node) v paměti, v případě změn je ukládají na disk v určitém pořadí. Uvedené pořadí je dané optimalizací zápisů a snahou o ochranou proti potenciálnímu výpadku. V případě výpadku se pak pouze ověří alokační struktura a uvolní se zdroje s chybou alokace, ale nejedná se v žádném případě o ochranu.
V případě, kdy například při následných výpadcích systému napájení dojde k několika restartům systému v době kontroly, může dojít k problémům při přístupu k datům. Co a jak udělat? Hned na začátek mám jednu ironickou otázku. Zálohujete?
Na tento problém je vhodné myslet už při úvodní konfiguraci. Pro UFS doporučuji vytvářet souborový systém verze UFS2 s uvedeným rozšířením softupdate. Příkaz je následující:
newfs -U -O2 /dev/disk
Pokud se jedná o intenzivně využívaný dísk, zde doporučuji zvazit i nasazení žurnálů(transakčních souborových systémů), například pomocí geom_journal nebo ZFS. Zde probíhá oprava daleko rychleji ... ale ani tento systém není odolný vůči chybám a existuje pro něj podstatně menší množství nástrojů na opravy.
A samozřejmě poslední rada, kterou každý už určitě slyšel ... zálohovat, zálohovat, zálohovat. Pokud na souborový systém, nesmí to být na ten samý. Pokud na disk nebo diskové pole, nesmí to být stejný disk nebo pole kde jsou tyto data uložena. Jestli je to alespoň trochu možné, uložit data na jakékoliv médium, které je možné fyzicky odpojit ... nebo alespoň na jiný stroj.



Automatické opravy
1) Automatická kontrola a opravy po startu systému.
Jedná se o využití příkazu fsck, který probíhá na pozadí. Trvá delší dobu a je nutné počítat s rizikem opětovného výpadku proudu. Proto nedoporučuji nastavovat (tato hodnota je defaultní) tuto kontrolu na systémech bez UPS a v uvedených případech dělat opravu ručně. Konfigurace je umístěna v souboru /etc/rc.conf
fsck_y_enable="YES"
background_fsck="YES"


První parametr zde zajišťuje automatickou odpověď "Yes" na všechny dotazy o opravy, druhý parametr zajišťuje spuštění oprav na pozadí. Opravy probíhají nad všemi namountovanými systémy, pro rozsáhlé svazky se může jednat až o několik desitek minut po startu. Hodnota background_fsck je takto nastavena defaultně.
Jakekoliv automatické opravy jsou ne uplně dokonalé. Vždy je lepší provádět tyto opravy manuálně jednou za čas. Rozhodně je to bezpečnější.



Ruční opravy
1) Patrně nejpoužívanějším nástrojem bude program fsck. Pokud se pouští nad namountovaným souborovým systémem, doporučuji jeho spuštění na pozadí. Spuštění na popředí není možné. Mám ještě ve zvyku (je to ale názor), vypínat databázové systémy, sambu a podobné záležitosti s vlastní cache nad problematickým souborovým systémem.
Jako parametr disk se uvádi zařízení, na kterém je souborový systém vytvořen. V případě šifrovaných svazlů se jedná například o zařízení /dev/disk.eli a podobně. fsck -B -y /dev/disk

2) Pokud nepomůže fsck, například není možné načíst superblok, je možné použít fsck_ffs. Protože při vytváření nového UFS se vytváří i několik záložních superbloků, jejich seznam je možné získat znovupoužitím příkazu:
newfs -N -U -O2 /dev/disk se stejnými parametry jako při prvním vytváření. U tohoto příkazu je důležíté použít právě parametr "N". Ten zaručí, že program newfs nebude zapisovat a vypíše tak seznam kam byly superbloky uloženy minule. Jeden z nich je nuné pak vybrat a zadat příkaz:
fsck_ffs -b číslo_superbloku /dev/disk



Další nástroje
1) V případě opravdu vážných problémů je možné využít nástroje testdisk. Ten umožňuje najít a opravit danou partici (a nejenom UFS). Práce s ním je jednoduchá.
portinstall testdisk
testdisk /dev/disk

Vše je řízeno přes menu, systém se pokusí najít partition se souborovým systémem (pokud nebyl zadán konkrétní device, zjistí nejprve které jsou k dispozici) pak analyzuje disk a zkouší najít jakékoliv informace o struktuře. Po ukončení analýzy nabídne opravy a uložení. Doporučuji zde práci s image, možných variant může být více.
2) Obnova smazaných soborů nebo vyhledání smazaných souborů
portinstall foremost testdisk
Tyto dva package obsahují nástroje photorec a foremost. Nejsou samozřejmě samospasitelné, ale zajišťují docela slušnou šanci pro obnovu smazaného souboru. První z nich prochází disk a hledá soubory, je řízený pomocí menu, druhý z nich je konfigurovatelný a umožňuje vyhledávat větší množství hlaviček.


Configure and tunning disk

Powered by Drupal - Design by artinet