GNU/Linux >> Znalost Linux >  >> Linux

Jak udělám, aby se můj disk odmapoval čekající nečitelné sektory

Čekající nečitelný sektor je sektor, který vrátil chybu čtení a který jednotka označila pro přemapování při první možné příležitosti. Nemůže však provést přemapování, dokud se nestane jedna ze dvou věcí:

  1. Sektor byl úspěšně znovu načten
  2. Sektor je přepsán

Do té doby zůstává sektor nevyřízený. Máte tedy dva odpovídající způsoby, jak se s tím vypořádat:

  1. Zkoušejte znovu číst sektor, dokud neuspějete
  2. Přepište daný sektor novými daty

Je zřejmé, že (1) je nedestruktivní, takže byste to pravděpodobně měli nejprve vyzkoušet, i když mějte na paměti, že pokud disk začíná vážně selhávat, pak neustálé čtení ze špatné oblasti pravděpodobně způsobí jeho selhání mnohem rychleji. . Pokud máte hodně čekajících sektorů a dalších chyb a záleží vám na datech na disku, doporučuji jej vyřadit z provozu a pomocí vynikajícího nástroje ddrescue obnovit co nejvíce dat. Poté disk zlikvidujte.

Pokud dotyčný sektor obsahuje data, o která nestojíte, nebo je lze obnovit ze zálohy, pak je pravděpodobně nejrychlejším a nejjednodušším řešením jejich přepsání. Poté můžete zobrazit přerozdělené a nevyřízené počty pro jednotku, abyste se ujistili, že o sektor bylo postaráno.

Jak zjistíte, čemu odpovídá sektor v souborovém systému? Našel jsem skvělý článek o smartmontools webová stránka zde, i když je poměrně technická a je specifická pro souborové systémy ext2/3/4 a reiser.

Jednodušší přístup, který jsem použil na jednom ze svých vlastních (Mac) disků, je použít find / -xdev -type f -print0 | xargs -0 ... pro čtení všech souborů v systému. Před spuštěním si poznamenejte počet čekajících na vyřízení. Pokud je sektor uvnitř souboru, zobrazí se vám chybová zpráva od nástroje, který jste použili ke čtení souborů (např. md5sum), která vám ukáže cestu k němu. Poté můžete zaměřit svou pozornost na opětovné čtení pouze tohoto souboru, dokud se úspěšně nepřečte. Často to problém vyřeší, pokud se jedná o málo používaný soubor, který je třeba jen několikrát znovu přečíst. Pokud chyba zmizí nebo nenarazíte na žádné chyby při čtení všech souborů, zkontrolujte počet čekajících na vyřízení a zjistěte, zda se nesnížil. Pokud ano, problém byl vyřešen přečtením.

Pokud soubor nelze úspěšně přečíst po několika pokusech (např. 20), musíte soubor nebo blok v souboru přepsat, aby jednotka mohla znovu alokovat sektor. Můžete použít ddrescue na souboru (spíše než na oddílu) k přepsání pouze jednoho sektoru zkopírováním do dočasného souboru a následným zkopírováním zpět. Všimněte si, že pouhé odstranění souboru v tomto okamžiku je špatný nápad, protože vadný sektor půjde do volného seznamu, kde bude obtížnější jej najít. Úplné přepsání je také špatné, protože sektory opět půjdou do volného seznamu. Musíte přepsat stávající bloky. notrunc možnost dd je jedním ze způsobů, jak toho dosáhnout.

Pokud nenarazíte na žádné chyby a počet čekajících na vyřízení se nesnížil, pak musí být sektor ve volném seznamu nebo v části infrastruktury souborového systému (např. tabulka inodů). Můžete zkusit zaplnit veškerý volný prostor pomocí cat /dev/zero >tempfile a poté zkontrolujte počet čekajících na vyřízení. Pokud dojde k poklesu, problém byl v bezplatném seznamu a nyní zmizel.

Pokud je sektor v infrastruktuře, máte vážnější problém a pravděpodobně narazíte na chyby při pouhém procházení adresářového stromu. V této situaci si myslím, že jediným rozumným řešením je přeformátovat disk, případně pomocí ddrescue obnovit data, pokud je to nutné.

Velmi bedlivě sledujte pohon. Sektorové přerozdělení je velmi dobrým kanárkem v uhelném dole, který vás může včas varovat před selháním pohonu. Včasným přijetím opatření můžete zabránit pozdějšímu katastrofálnímu a velmi bolestivému sesuvu půdy. Netvrdím, že několik přerozdělení sektorů je známkou toho, že byste měli disk zahodit. Všechny moderní disky potřebují provést nějaké přerozdělení. Pokud však disk není příliš starý (<1 rok) nebo dochází k častým novým přerozdělením (> 1/měsíc), doporučuji jej co nejdříve vyměnit.

Nemám empirické důkazy, které by to dokázaly, ale moje zkušenost naznačuje, že problémy s diskem lze snížit občasným přečtením celého disku, buď pomocí dd nezpracovaného disku nebo čtením každého souboru pomocí find . Téměř všechny problémy s diskem, se kterými jsem se za posledních několik let setkal, se nejprve objevily ve zřídka používaných souborech nebo na počítačích, které se příliš nepoužívají. To dává smysl i heuristicky, protože pokud je sektor často znovu načítán, má disk šanci jej znovu alokovat, když poprvé detekuje menší problém s tímto sektorem, místo aby čekal, až bude sektor zcela nečitelný. Disk není schopen se sektorem cokoliv dělat, pokud k němu hostitel nějak nepřistoupí, ať už jeho čtením nebo zápisem nebo provedením jednoho z testů SMART.

Chtěl bych experimentovat s myšlenkou noční nebo týdenní úlohy cron, která přečte celý disk. Aktuálně používám "poor man's RAID", ve kterém mám v mašině druhý pevný disk a každý večer na něj zálohuji hlavní disk. V některých ohledech je to ve skutečnosti lepší než zrcadlení RAID, protože pokud omylem splaším a smažu soubor, mohu okamžitě získat včerejší verzi ze záložního disku. Na druhou stranu se domnívám, že hardwarový řadič RAID odvádí spoustu dobré práce na pozadí při sledování, hlášení a opravě problémů s diskem, jakmile se objeví. Můj aktuální záložní skript používá rsync abyste se vyhnuli kopírování dat, která se nezměnila, ale vzhledem k nutnosti znovu načíst všechny sektory by možná bylo lepší zkopírovat vše nebo mít samostatný skript, který každý týden načte celý nezpracovaný disk.


Linux
  1. Jak vytvořit VPN

  2. Jak udělat soubor řídký?

  3. Jak opravit 512bajtový sektorový MBR na 4096bajtovém sektorovém disku?

  1. Jak rozdělit disk v Linuxu

  2. Zpomalte kopírování disku/disku

  3. Jak snadno opravím jeden nečitelný blok na linuxovém disku?

  1. Linux – Zpomalit kopírování disku/disku?

  2. Jak zjistit počet špatných sektorů na pevném disku?

  3. Jak připojit USB disk v UNIX nebo Linux