Portál AbcLinuxu, 30. dubna 2025 16:31
Nejdůležitější je obsah disku brzy překopírovat na jiný disk. V mém případě se jednalo o externí FireWire disk na /dev/sda
. Ke kopírování dat je nejlepší použít příkaz dd
s parametrem conv=noerror,sync
.
Sync zajistí, že místo vadních bloků se na cílový disk zapíší nuly. Bez tohoto budou data nepoužitelná!
Kopíruje se mnoho dat, je tedy vhodné si nastavit parametr bs
na nějakou optimální hodnotu, abychom nemuseli čekat celou věčnost. Příliš velká hodnota má však za následek, že např. v případě vadného 4kB bloku a bs=16384 se nuly místo skutečně vadných 4kB zapíší místo 16kB (protože čtení probíhá po 16kB blocích). Proto je dobré okraje poškozených míst nechat dodatečně zkopírovat s menším parametrem bs.
Příklad: Kopírujeme data z hdb na sda:
dd if=/dev/hdb of=/dev/sda bs=16384 conv=noerror,syncdd nám sdělí, že data z třetího bloku nejsou čitelná. Můžeme tedy nakonec zkusit zachránit nějaká data z tohoto bloku příkazem:
dd if=/dev/hdb of=/dev/sda bs=512 conv=noerror,sync skip=64 seek=64 count=3232 a 64, protože blok o velikosti 16384 bajtů se dá rozdělit na 32 bloků o velikosti 512 bajtů.
Kvůli ztrátě tabulky oddílů bylo zapotřebí oddíly na disku dohledat. K tomu mi posloužil nástroj gpart.
Některé oddíly jsem měl poschovávané uvnitř logického oddílu. Z neznámých důvodů mi tyto oddíly gpart nevypsal, proto jsem použil parametr verbose:
gpart -v /dev/sdaVýsledné informace mohou vypadat např. takto:
Possible partition(ReiserFS filesystem), size(238221mb), offset(1145mb) type: 131(0x83)(Linux ext2 filesystem) size: 238221mb #s(487877888) s(2345553-490223440) chs: (146/1/1)-(1023/254/63)d (146/1/1)-(30514/254/29)r hex: 00 01 01 92 83 FE FF FF 51 CA 23 00 00 6D 14 1DOvěříme správnost údajů tím, že zkusíme filesystém připojit:
mount -o ro,offset=1200923136 -t reiserfs /dev/sda /mnt/oddilOffset je začátek oddílu krát velikost sektoru (běžně 512), tedy 1200923136. Pokud je vše OK, můžeme filesystém opět odpojit.
V tomto kroce si napíšeme vlastní tabulku oddílů a zapíšeme ji na disk.
Pro ukázku z předchozího kroku může vypadat tabulka takto:
unit: sectors /dev/hdb1 : start= 2345553, size=487877888, Id=83 /dev/hdb2 : start= 0, size= 0, Id= 0 /dev/hdb3 : start= 0, size= 0, Id= 0 /dev/hdb4 : start= 0, size= 0, Id= 0ID 83 znamená oddíl typu Linux native. Například 32-bitový VFAT má ID 0B. ID 0 znamená žádný oddíl.
sfdisk --force /dev/sda < tabulkaTeď zbývá oddíl zkušebně připojit:
mount -o ro /dev/sda1 /mnt/oddilPokud je vše v pořádku, můžeme oddíl odpojit a pokročit k poslednímu úkonu.
Musíme opravit možné chyby ve filesystému. U ReiserFS bych použil
reiserfsck --check /dev/sda1a podle výsledku bych jej spustil znovu z parametrem
--fix-fixable
nebo --rebuild-tree
.fsck.ext3 -f /dev/sda1
Pokud znáte nějaké lepší/pokročilejší způsoby obnovy poškozeného filesystému, podělte se o ně v diskuzi
Poznámky: informace o velikosti oddílu zjištěné nástrojem gpart nemusejí být správné. V případě problémů zkuste zapsat větší velikost oddílu.
Nedůvěřujte slepě informacím ze S.M.A.R.T.! Můj disk i po svém selhávání stále tvrdil, že vše je v pořádku.
Pokud se vám návod líbil, můžete mě potěšit kliknutím sem
Tiskni
Sdílej:
Jaké zvuky, rychlost, odezvy předchází úplnému zhroucení?Těžko říct, jestli se něco charakteristického dá popsat - může to začít několika vadnými sektory, ale také to může přijít bez varování. Popsat by se daly zvuky po zhroucení disku, vydávané správcem - ale to zase není publikovatelné
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.