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。
這樣就可計算出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所占用的硬盤上物理扇區。
|
From: http://www.ilinuxkernel.com/files/3/Sector_to_file.htm
Linux中硬盤物理扇區與文件系統文件對應關系(轉)