nalezeni souboru na disku podle LBA (fsdb findblk)
Miroslav Lachman
000.fbsd at quip.cz
Sun Oct 4 18:15:26 CEST 2009
Dan Lukes wrote:
> Miroslav Lachman napsal/wrote, On 09/27/09 00:58:
>
>> Jenze s fsdb mam takovy problem, ze i kdyz najdu nejaky soubor
>> (inode), necham si k nemu vypsat bloky a pak tyto bloky zadam zpet
>> fsdb findblk, tak mi zadny inode nevypise.
>
>
> No to je proto, ze fsdb je velmi zmatene. Kdyz pouziva pojem "blok" tak
> tim nikdy nemysli blok - nejcasteji tim mysli blok ale fragment. A v
> pripade findblk pak dokonce mysli sektor.
>
> Takze cislo pro findblk musis vynasobit ctyrmi (v pripade, ze fragment
> ma velikost 2048=4*512 jinak adekvatne k velikosti fragmentu)
>
> Cislem sektoru se samozrejme mysli cislo sektoru v ramci dane partition.
> Aby se z nej dostalo cislo sektoru v ramci dane slice je treb apouzit
> bsdlabel a pricist "offset". A abychom z nej dostali cislo sektoru v
> ramci sektoru je treba pouzit jeste fdisk a pricist cislo "start"
Jelikoz mam nejake smolne obdobi, tak jsem mel vcera moznost si to znovu
vyzkouset na jinem stroji, kde se take vyskytly nejake necitelne
sektory. Zkusil jsem vzit v potaz tvou teorii o vynasobeni 4, ale
nezafungovalo to.
Naopak zafungovalo pro findblk pouzit normalne vypoctene cislo LBA ze
SMART logu (po odecteni offsetu slice a partition). Tim jsem nasel
inode, k inodu i patricny soubor, ktery jsem tentokrat predem ocekaval a
na zaver jsem zkusil prikazem blocks zpetne overit tu teorii, kde jsem
opet "selhal"...
Ve vypisu bloku pro zadany inode se nenechazel ten blok, jehoz cislo
jsem zadaval prikazu findblk.
Zkusil jsem to tedy jeste jinak - cislo, ktere jsem zadaval predtim pro
findblk jsem vydelil 4 a to uz jsem pak na seznamu bloku, ktery vraci
prikaz blocks, nasel. Jestli je to shoda nahod, nebo potvrzeni
spravnosti, to si netroufam tvrdit. Do zdrojaku jsem nekoukal a i kdyby
koukal, tak mi to na 99% nic nerekne.
Cely proces byl tedy nasledujici:
ad6: FAILURE - READ_DMA status=51<READY,DSC,ERROR>
error=40<UNCORRECTABLE> LBA=22832527
fdisk (zkraceny vypis):
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 63, size 125821017 (61436 Meg), flag 80 (active)
bsdlabel (zkraceny vypis):
d: 12582912 12582928 4.2BSD 2048 16384 28528
e: 83886080 25165840 4.2BSD 2048 16384 28528
/dev/mirror/gm0s1d 5.8G 499M 4.9G 9% /var
/dev/mirror/gm0s1e 39G 16G 19G 46% /var/db
Chyba na LBA 22832527 lezi na partition /var
Od LBA chyby odectu offset prvni slice (63)
22832527 LBA error - 63 = 22832464
A od toho pak jeste offset partition /var
22832464 - 12582928 = 10249536
Tim jsem ziskal pozici chyby uvnitr partition /var
Pokud jsem te pochopil spravne, mel jsem ziskane cislo vynasobit 4, coz
je 40998144, ale to mi findblk nic nenajde
fsdb -r /dev/mirror/gm0s1d
fsdb (inum: 2)> findblk 40998144
fsdb (inum: 2)>
Pro puvodni cislo najde inode 23704
fsdb (inum: 2)> findblk 10249536
10249536: data block of inode 23704
prikazem find pak slo dohledat o jaky soubor se jedna
~/# find /var/ -inum 23704
/var/log/lighttpd/lighttpd-error.log
To, ze by to mohl byt tenhle soubor jsem predem usuzoval podle toho, ze
k zalogovani chyby doslo priblizne kolem okamziku, kdy jsem s timhle
32MB velkym logem pracoval ve Vimu a projizdel ho i grepem.
Kdyz se pak pokusim ve fsdb zpetne k inode dohledat bloky, tak mi to
nevrati ani ten vynasobeny 4, ani to cislo 10249536, ale pokud to
vydelim 4, tak uz se chytam.
fsdb (inum: 2)> inode 23704
current inode: regular file
I=23704 MODE=100644 SIZE=33272836
BTIME=Oct 7 00:24:34 2008 [0 nsec]
MTIME=Oct 4 17:19:11 2009 [0 nsec]
CTIME=Oct 4 17:19:11 2009 [0 nsec]
ATIME=Oct 3 21:15:13 2009 [0 nsec]
OWNER=www GRP=wheel LINKCNT=1 FLAGS=0 BLKCNT=fe00 GEN=624200e1
fsdb (inum: 23704)> blocks
Blocks for inode 23704:
Direct blocks:
138080, 138088, 138096, 138104, 138112, 138120, 138128, 159568, 159576,
159584, 159592, 159600
Indirect blocks:
159608, 159616, 179552, ..... 2562384 .... , 2803696, 2803704
Misto tecek je samozrejme dlouha rada cisel (nekolik set cisel) a mezi
nimi i 2562384 coz odpovida 10249536 / 4.
Tak snad tato moje zjisteni dale nekomu pomohou v pochopeni
"nepochopitelneho prikazu fsdb".
jen mi porad nejde dohlavy, proc se tam pokazde pracuje s jinymi bloky a
co tim autor fsdb sledoval... zrejme zmateni nepritele.
Mirek
More information about the Users-l
mailing list