
沒有一個著名的元資料結構保留實際檔案的位置資料。 Dentry 將名稱對應到 inode,而 inode 儲存有關檔案的資訊——系統如何知道檔案的實際資料位元位於磁碟上的位置?是否存在某種 inode 整數到磁碟位置的預設映射?
答案1
鑑於存在大量的檔案系統,我確信存在例外,但傳統上,inode 中有一個磁碟區塊編號數組。
例如,在 中/usr/include/linux/ext3_fs.h
,我看到了 的定義struct ext3_inode
。
在裡面struct ext3_inode
,我看到一個成員i_block[EXT3_N_BLOCKS];/* Pointers to blocks */
不同的檔案系統有不同的方式來追蹤哪些磁碟區塊屬於索引節點(表示檔案資料的磁碟資料結構)。有些具有區塊編號數組,有些具有運行或範圍數組、計數加上連續區塊運行的起始區塊編號。 Berkeley FFS inode 有一個區塊號數組,還有一個區塊號數組,每個區塊都包含資料區塊號,一個區塊號包含區塊號,區塊號包含資料區塊號。
對於「日誌結構化檔案系統」來說,整件事情變得有點奇怪,但這些只是例外而不是規則。
答案2
如果您查看核心原始碼(或核心文件包,或在網路上),請查看文件/檔案系統,它會因檔案系統而異。
例如,對於 ext2,可以使用超級區塊中儲存的資訊將 inode 號轉換為分區中的某個偏移量(ext2 在 mkfs 時間分配固定數量的 inode 的原因之一),然後讀取該偏移量。索引節點包含大量元數據,包括十二個指針,指示實際檔案資料的儲存位置。如果有超過十二個片段,則有一個指向間接區塊的指標(它儲存更多)。間接區塊可以連結起來(每個間接區塊都有一個指向下一個間接區塊的指標)。
超級區塊儲存在距離分割區開頭的固定偏移處,因此很容易找到。 (mkfs 也會建立備份超級區塊)
您可能感興趣btrfs 磁碟格式,它甚至還有圖片,儘管該文件不如 ext2 文件完整。