Miroslav Lachman wrote:
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.

ad6: FAILURE - READ_DMA status=51<READY,DSC,ERROR> error=40<UNCORRECTABLE> LBA=22832527

Tak zaprve je treba dohledat presne cislo sektoru. Uz jsem tady nekdy asi zminoval, ze v pripade cteni vetsiho poctu sektoru je uvedeno cislo prvniho sektoru v sekvenci. Sekvence muze byt az natolik dlouha, ze muze presagovat nekolik fragmentu ctena data tak mohou patrit i ruznym souborum.

Takze zakladem je pouzit "dd" a najit presne cislo toho jednoho vadneho sektoru. Teprve na takto ziskane cislo je treba aplikovat dalsi postupy.


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

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

A oba kroky je trivalni overit. Znas offset na ad6, jehoz cteni se nedari. To, ze mas vypoctenou spravnou pozici v ramci /var zjistis pokusem o precteni vypocteneho offsetu z /dev/mirror/gm0s1d

Nemelo by to jit.

Pokud jsem te pochopil spravne, mel jsem ziskane cislo vynasobit 4

Ne - nepochopil. Ty uz mas cislo sektoru - tedy cislo pro findblk. Ja ale reagoval na tvoji vetu "i kdyz najdu nejaky soubor (inode), necham si k nemu vypsat bloky ..."

Ty "vypsane" bloky nejsou cisla sektoru, ale cisla fragmentu - a ty bylo treba vynasobit ctyrmi.

Tady ale velikost sektoru uz mas a tudiz prepocitavat nemusis.

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

A znovu muzes vyzkouset - pri cteni tohoto souboru by mela vyskocit chyba cteni. Pak vis, ze mas spravny soubor.

jen mi porad nejde dohlavy, proc se tam pokazde pracuje s jinymi bloky a co tim autor fsdb sledoval... zrejme zmateni nepritele.

Ale, ani ne. To je spis neumyslna terminologicka chyba.

Blok - to je stejny problem jako je "paket" v sitarine. Podle toho, na kterou vrstvu sitoveho stacku se podivas, tak je paket trochu neco jineho, ma jinou aktualni/maximalni velikost. I "destination address" znamena neci uplne jineho v ethernetovem paketu a neco jineho v IP paketu. Ve skutecnosti ma kazda vrstva jednoznacne pojmenovani pro "paket" (na TCP urovni je to "segment", na IP urovni "datagram" na ethernetu "frame"), ale bezne (a to i v odborne mluve) se velmi casto pouziva genericky (a nepresny) pojem packet. Ono totiz ke zmateni dojde jen v pripade, ze neni jasne o jake vrstve je rec, coz vetsinou byva.

A tady to mas totez. Blok je "packet" diskoveho systemu. A na kazde urovni "blok" znamena neco jineho. Jednou sektor, jednou fragment, ...

Jo, jakmile program umi pracovat s bloky ruznych vrstev je pouziti pojmu "blok" problematicke. Posli navrh na zmenu prislusne manualove stranky ;-)

                                                Dan
--
FreeBSD mailing list ([email protected])
http://www.freebsd.cz/listserv/listinfo/users-l

Odpovedet emailem