Linux中硬盘物理扇区
与文件系统文件对应关系
系统读写文件过程中,如下面内核打印信息,报告读写某个扇区错误。那么我们如何能够通过sector找到读写哪个文件错误?
kernel: end_request: I/O error, dev sdb,
sector 41913499
以下面打印信息为例。
kernel: end_request: I/O error, dev sdb,
sector 41913499
内核打印的sector是硬盘上的物理扇区。如上例,我们可以知道磁盘是/dev/sdb。而 sector 41913499属于哪个分区?/dev/sdb1?/dev/sdb2?还是其他?
通过命令fdisk -lu /dev/sdb,可以看到各个分区的容量大小,也就知道每个分区的起始sector和结束sector。
这样就可计算出sector 41913499属于哪个分区/dev/sdb2。
对于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
Blocks值 = (出错扇区 – 分区起始扇区)/ 8
dev sdb, sector 41913499,该扇区在/dev/sdc2文件系统上的 blocks值为: blocks=(41913499 – 分区起始扇区)/8 = (41913499 - 24595515)/8 = 2164748
debugfs <设备名> icheck
<block值>
对于/dev/sdb2上的文件系统来说,block 2164748对应的inode值为527790。如下图。
debugfs <设备名> ncheck
<inode>
对于/dev/sdb2上的文件系统来说,inode
527790对应的文件为/e2fsprogs-
我们通过blktrace来验证访问/e2fsprogs-
root@ubuntu:/data2/e2fsprogs- root@ubuntu:/data2/e2fsprogs- 6173fbb