From blocks to files (on a UNIXpc)

Brant Cheikes brant at manta.pha.pa.us
Fri Feb 10 15:05:23 AEST 1989


In article <462 at manta.pha.pa.us> I asked:
>Given a block number, how can I find out (a) if it's part of a file,
>and (b) what file it's part of?

In article <1392 at mtunb.ATT.COM> jcm at mtunb.UUCP (was-John McMillan) replied:
>    [...] I
>    will simply PRESUME you are referring to:
>    	A LOGICAL BLOCK # on an identified FILE-SYSTEM.

This is nearly correct.  I meant a 512-byte block #, numbered from
zero, with block 0 referring to the boot block.

I'm starting from a HDERR message like this:

HDERR ST:51 EF:10 CL:FF45 CH:FF01 SN:FF00 SC:FF02 SDH:FF24
DMACNT:FFFF DCRREG:94 MCRREG:9D00 Wed Feb  8 10:00:58 1989

Given CH, CL, SN, and SDH, and knowing my disk stats, I can compute
the logical block number.  In the above case, for a disk with 8 heads
and 16 blocks (sectors) per track, the computation is:

	cyl # = 0x145 = 325 (decimal), sector 0, head 4.
	there are 8 heads * 16 blocks/track = 128 blocks/cyl
	logical block of error =
	 (cylinder# * blocks/cyl) + (head * blocks/track) + sector =
	 (325*128)+(16*4)+0 = 41664.

(NB: cylinder, head, and sector are all numbered from zero)

Now, knowing that the error occurred in the 41664'th 512-byte block on
the disk, I want to determine if that block is in the free list or if
it's part of a file.  If the latter, I want to know which file it's
allocated to.

(BTW, I can verify the block is not an inode block as follows:
  My disk has a 64 LOGICAL (1024-byte) block partition 0,
  an 8000 LOGICAL block partition 1, and
  an 114944 512-byte block partition 0.
  df -t shows a total of 14368 inodes.
  There are 8 inodes/block (see <sys/param.h> INOPB for 512-byte FS),
    so the inodes take up 14368/8 = 1796 512-byte blocks.
  So data blocks begin at block # (64*2)+(8000*2)+1796=17924.
  Since 41664 > 17924, the error isn't in an inode block.)

John suggested the following approach, given a LOGICAL block #:
>    	As root, run:
>    		/etc/ncheck  -i  ####  -a  /dev/rfp###

This is not the right answer.  The argument to -i is supposed to be an
inode number, not a block number (logical or otherwise).

So my question remains.  But thanks for trying!

[NB: if I have said anything incorrect here, I trust that someone will
 swiftly correct me.]

-- 
Brant Cheikes
University of Pennsylvania, Department of Computer and Information Science
brant at manta.pha.pa.us, brant at linc.cis.upenn.edu, bpa!manta!brant



More information about the Unix-pc.general mailing list