Linux中硬盤物理扇區與文件系統文件對應關係

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

p_w_picpath001.gif


這樣就可計算出sector 41913499屬於哪個分區/dev/sdb2


2.2第二步:計算分區上文件系統起始sector

對於ext2文件系統/dev/sdb2,該分區上文件系統起始sector24595515

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/sdb2文件系統上的    blocks值爲: blocks=41913499分區起始扇區)/8 = 41913499 - 24595515/8 = 2164748


2.4第四步:通過文件系統的blocks值計算出inode

debugfs  <設備名> icheck <block>

對於/dev/sdb2上的文件系統來說,block 2164748對應的inode值爲527790。如下圖。

p_w_picpath002.gif

2.5第五步:通過inode值,找到具體文件名(是絕對路徑)

debugfs  <設備名> ncheck <inode>

對於/dev/sdb2上的文件系統來說,inode 527790對應的文件爲/e2fsprogs-1.41.14/version.h。也就是訪問文件version.h時出現讀寫錯誤。

p_w_picpath003.gif

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

p_w_picpath004.gif

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章