作者EntHeEnd (ㄆㄆ)
看板LinuxDev
標題[問題] 請問linux檔案系統在ext2/3處理file hole
時間Fri May 18 23:21:02 2012
請問ext2/3 檢查block是不是hole(未實際配置空間)
有什麼有效的方法嗎?
read都是'/0'似乎不是一個判斷的好方法
我找了很多資料
好像可以從inode下手 有一個bmap的東西
不過那好像非常底層
我翻系統程式的書 沒有查到inode的操作的部分
網頁上在userspace可以抓到inode的block配置資訊的方法
目前還沒有看到...
另外很多討論都不建議去碰inode...
(不過我只是要看他有沒有配置空間來判斷是不是hole所以 大概 還好吧@@)
頂多就是stat可以抓到 inode number然後也就這樣而已
網路找到的資料是可以用 ioctl() 裡面flag用 FIEMAP 可以用到fiemap這個結構
裡面有一些資訊可以判斷是不是hole 不過這似乎是ext4才有支援...
另外也有找到另一個ioctl()裡面用FIBMAP 不過這個好像要從頭開始檢查
(我猜可以搭lseek跳到要檢查的offset...)
重點是這個要root權限才能用...
請問檢查檔案的某個block(或offset)是不是hole
有沒有什麼比較有效的方法嗎? 謝謝@@...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.162.50.129
→ buganini:photorec裡面應該有相關code可以參考 05/19 03:21
→ buganini:還是你是說sparse file的hole? 那可能要另外找 05/19 03:23
→ EntHeEnd:就是sparce file的hole... 05/19 03:30
→ EntHeEnd:或者是樓上任我我問的是哪一種hole...@@? 有其他種hole嗎 05/19 03:32
→ EntHeEnd: 認為 我最近遇到的是直接 05/19 03:32
→ EntHeEnd:truncate 一個file 然後其實不占空間這種情況... 05/19 03:33
→ EntHeEnd:我google了好久 沒有找到肯定的解法 目前只找到ioctl 05/19 03:34