Jul*_*ano 11 linux sparse-files
我有一个稀疏文件,其中只分配了一些块:
~% du -h --apparent-size example
100K example
~% du -h example
52K example
Run Code Online (Sandbox Code Playgroud)
我想知道实际分配了文件的哪些块。是否有系统调用或内核接口可用于获取分配列表或文件漏洞列表?
简单地检查足够长的零字符串(GNU cp、rsync 等使用的方法)无法正常工作:
~% cp example example1
~% du -h example1
32K example1
Run Code Online (Sandbox Code Playgroud)
它检测到实际分配的其他零序列。
SO 上有一个类似的问题。在目前接受的答案通过@ephemient建议使用一个ioctl名为fiemap这是在记录linux/Documentation/filesystems/fiemap.txt。引用该文件:
fiemap ioctl 是用户空间获取文件范围映射的有效方法。fiemap 不是逐块映射(例如 bmap),而是返回一个范围列表。
听起来这就是您正在寻找的信息。文件系统的支持也是可选的:
希望支持 fiemap 的文件系统必须
->fiemap在其inode_operations结构上实现回调。
为支持SEEK_DATA和SEEK_HOLE参数lseek,你从Solaris中提到,根据在Linux 3.1中加入的手册页,所以你可能会使用为好。它fiemap ioctl看起来更旧,因此现在它可能在不同的 Linux 版本之间更具可移植性,而lseek如果 Solaris 具有相同的操作系统,则它可能在操作系统之间更具可移植性。
| 归档时间: |
|
| 查看次数: |
3788 次 |
| 最近记录: |