作者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
1F:→ buganini:photorec里面应该有相关code可以参考 05/19 03:21
2F:→ buganini:还是你是说sparse file的hole? 那可能要另外找 05/19 03:23
3F:→ EntHeEnd:就是sparce file的hole... 05/19 03:30
4F:→ EntHeEnd:或者是楼上任我我问的是哪一种hole...@@? 有其他种hole吗 05/19 03:32
5F:→ EntHeEnd: 认为 我最近遇到的是直接 05/19 03:32
6F:→ EntHeEnd:truncate 一个file 然後其实不占空间这种情况... 05/19 03:33
7F:→ EntHeEnd:我google了好久 没有找到肯定的解法 目前只找到ioctl 05/19 03:34