debugfs Question

Jon Burgess jburgess777 at googlemail.com
Fri Apr 20 08:56:24 UTC 2007


On Thu, 2007-04-19 at 23:19 -0700, Aravindan Raghuveer wrote:
> Hello!
> 
> I had recently posted a question on this list about
> getting LBAs for a file on ext3. Andreas Dilger had
> provided a very handy solution to solve the above
> problem [Message attached along].
> 
> My goal is to be able to read files on a ext3
> filesystem through the scsi generic (sg) driver. 
> I first use debugfs to extract the block addresses for
> every file. I then multiply the block address by 8
> [4K/ 512] to obtain the LBAs. I then use a progam
> sg_dd in the sg toolkit to read the data stored in the
> LBA obtained above. 
> 
> However, the data I read through the sg driver does
> not match the data in the file. Through some tinkering
> of my code, I found that when I offset the original
> LBA [obtained as block_address*8] by 63 sectors
> [63*512 bytes], the data perfectly matches. That is
> LBA' = LBA + 63 corresponds to the actual address used
> for the file. I have tested this well when the file is
> not fragmented. Initial testing on fragmented files
> also shows similar behavior.
> 

Are you accessing the raw disk or the partition containing the
filesystem? 63 sounds suspiciously like the typical sector offset of the
first partition on the disk. The filesystem block numbers are relative
to the containing partition.


# sfdisk -l -uS /dev/sda

Disk /dev/sda: 24321 cylinders, 255 heads, 63 sectors/track
Units = sectors of 512 bytes, counting from 0

   Device Boot    Start       End   #sectors  Id  System
/dev/sda1   *        63   2104514    2104452  fd  Linux raid autodetect
/dev/sda2       2104515 390716864  388612350  fd  Linux raid autodetect
/dev/sda3             0         -          0   0  Empty
/dev/sda4             0         -          0   0  Empty


> I googled around but could not find a convincing
> answer as to where this offset crops up from. Has
> anyone in the group done a similar experiment? I would
> really appreciate any pointers on this issue. 
> 
> thanks again, 
> 
> regards,
> 
> -Aravind.
> 
> 
> --- Andreas Dilger <adilger at clusterfs.com> wrote:
> 
> > On Apr 16, 2007  11:17 -0700, Aravindan Raghuveer
> > wrote:
> > > I need to write a user space tool that can dump
> > > logical block addresses used by every file in a
> > ext3
> > > file system. For example, if file foo uses LBAs
> > 2,3
> > > and file bar uses LBAs 100,102,156, then the
> > ouptut
> > > should read:
> > > 
> > > FILENAME    LBAs 
> > > foo         2, 3
> > > bar         100,102,156
> > > 
> > > Is there a tool that exists that can do this? If
> > not,
> > > what would be a good strategy to write this tool.
> > I am
> > > learning filesystem programming and would really
> > > appreciate any pointers.
> > 
> > "debugfs -c -R 'stat /path/to/file' /dev/XXX"
> > reports, among other things
> > the blocks used by that file.
> > 
> > Cheers, Andreas
> > --
> > Andreas Dilger
> > Principal Software Engineer
> > Cluster File Systems, Inc.
> > 
> > 
> 
> 
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around 
> http://mail.yahoo.com 
> 
> _______________________________________________
> Ext3-users mailing list
> Ext3-users at redhat.com
> https://www.redhat.com/mailman/listinfo/ext3-users




More information about the Ext3-users mailing list