Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 3 Mar 2006 17:23:33 -0800
From:      Doug Hardie <bc979@lafn.org>
To:        stable@freebsd.org
Subject:   Failed disk sectors
Message-ID:  <2E14449E-E2AA-4102-B162-BFE264985629@lafn.org>

next in thread | raw e-mail | index | archive | help
I have a large disk that has several failed sectors.  The drive  
basically is the article storage for news so it has lots of files.   
Basically the error messages I get during the inn expire operation is  
there are a couple failed sectors where the drive cannot successfully  
read the sectors.  The LBA is given.  The problem is finding out what  
those LBA's are used for.

The drive SMART status show plenty of available spare sectors, but  
since it can't read those sectors it won't remap them to a spare  
sector till the next write of that sector.  expire basically gives up  
when it reaches that error.  So my first attempt was to run a cksum  
of all the files on the disk.  That actually cought one of the  
sectors and gave me the file name.  I deleted the file and since it  
was an overview file for one group, I just rebuilt it.  There are  
still more to go though.  That process took many hours.

I have not found anything in the archives or man pages or ports that  
addresses identifying the object/file that has that LBA.  So I have  
started looking into the ufs structures to see how that could be  
done.  fdisk source shows how to access the partition data.  For the  
specific disk, fdisk reports a media sector size of 512 and the block  
count matches that.  So I assume I would have to subtract the start  
of that partition from the LBA.  However, that assumes that the LBA  
is in the same 512 byte block numbering system.  I am not convinced  
that would always be correct.

Next has to address the bsdlabel.  I am now presuming that the LBA  
value of 0 is the start of the drive, not the start of the  
partition.  I am not sure if this is correct either.  If so, then  
bsdlabel type code would be required to identify the partition.  Then  
the start of the partition would need to be subtracted from the LBA.   
At that point I think I have the values that would be found in the  
block tables in the inodes.

Before digging into the inode structures I though it would be a good  
idea to check my understanding to this point.  Am I on the right path?



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2E14449E-E2AA-4102-B162-BFE264985629>