码迷,mamicode.com
首页 > 系统相关 > 详细

Linux中硬盘物理扇区与文件系统文件对应关系(转)

时间:2018-04-20 23:45:46      阅读:300      评论:0      收藏:0      [点我收藏+]

标签:net   border   AC   方法   bug   ice   www   cin   12px   

1               概述

系统读写文件过程中,如下面内核打印信息,报告读写某个扇区错误。那么我们如何能够通过sector找到读写哪个文件错误?

kernel: end_request: I/O error, dev sdb, sector 41913499

2               物理扇区与文件对应关系计算

以下面打印信息为例。 kernel: end_request: I/O error, dev sdb, sector 41913499

2.1               第一步:通过sector找到所在分区

内核打印的sector是硬盘上的物理扇区。如上例,我们可以知道磁盘是/dev/sdb。而   sector 41913499属于哪个分区?/dev/sdb1?/dev/sdb2?还是其他?

 

通过命令fdisk -lu /dev/sdb,可以看到各个分区的容量大小,也就知道每个分区的起始sector和结束sector。

技术分享图片

 

这样就可计算出sector 41913499属于哪个分区/dev/sdb2。

 

2.2               第二步:计算分区上文件系统起始sector

对于ext2文件系统/dev/sdb2,该分区上文件系统起始sector为24595515

Device Boot      Start         End      Blocks   Id  System

/dev/sdb1              63    24595514    12297726   83  Linux

/dev/sdb2        24595515    41929649     8667067+  83  Linux

 

 

2.3               第三步:计算报错扇区在分区文件系统内的blocks值(即文件系统内的偏移量)

Blocks = (出错扇区 – 分区起始扇区)/ 8

dev sdb, sector 41913499,该扇区在/dev/sdc2文件系统上的    blocks值为: blocks=(41913499 – 分区起始扇区)/8 = (41913499 - 24595515)/8 = 2164748

 

2.4               第四步:通过文件系统的blocks值计算出inode值

debugfs  <设备名> icheck 值>

对于/dev/sdb2上的文件系统来说,block 2164748对应的inode值为527790。如下图。

技术分享图片

2.5               第五步:通过inode值,找到具体文件名(是绝对路径)

debugfs  <设备名> ncheck

对于/dev/sdb2上的文件系统来说,inode 527790对应的文件为/e2fsprogs-1.41.14/version.h。也就是访问文件version.h时出现读写错误。

技术分享图片

 

3               转换方法验证

我们通过blktrace来验证访问/e2fsprogs-1.41.14/version.h所占用的硬盘上物理扇区。

 

root@ubuntu:/data2/e2fsprogs-1.41.14# echo 1 > /proc/sys/vm/drop_caches

root@ubuntu:/data2/e2fsprogs-1.41.14# md5sum version.h

6173fbb937f8dc3b315ff8853007d490  version.h

 

 

 

 

 

 

 


技术分享图片

 

From: http://www.ilinuxkernel.com/files/3/Sector_to_file.htm

Linux中硬盘物理扇区与文件系统文件对应关系(转)

标签:net   border   AC   方法   bug   ice   www   cin   12px   

原文地址:https://www.cnblogs.com/xihong2014/p/8893893.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!