Linux中硬碟物理扇區 與檔案系統檔案對應關係

2021-07-23 15:00:17 字數 2144 閱讀 1205

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值=

(出錯扇區

– 分割槽起始扇區)

/ 8dev 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所占用的硬碟上物理扇區。

硬碟的物理扇區

1980s早期,把硬碟的物理扇區製作成512位元組成為主流標準 1956年硬碟發明的時候扇區容積更小 1998年,nsic提出使用更大容積的物理扇區,因為傳統的512位元組的扇區標準對日益增長的磁碟密度已經是限制了 隨之而來的是advanced format.第一代advanced format選用...

檔案系統中的邏輯塊 物理塊和扇區之間的關係

扇區 sector 硬體 磁碟 上的最小的操作單位,是作業系統和塊裝置 硬體 磁碟 之間傳送資料的單位。block由乙個或多個sector組成,檔案系統中最小的操作單位 os的虛擬檔案系統從硬體裝置上讀取乙個block,實際為從硬體裝置讀取乙個或多個sector。對於檔案管理來說,每個檔案對應的多個...

通過檔案的方式對硬碟扇區進行直接讀寫操作

createfile physicaldrive0 generic read,file share write,0,open existing,0,0 功能 讓物理磁碟0以檔案,唯讀,共享寫的方式開啟,開啟後會返回乙個檔案控制代碼,其實就是物理磁碟的控制代碼。readfile hdev,buffer...