对于延迟分配的非常大的文件,有些扇区可能已分配,有些扇区可能未分配。 ext4/xfs/等支持延迟分配。
例如,创建一个空文件并使用fallocate() 将其设置为非常大的大小。现在文件的大小可能是 GB,但使用时du
您将获得零磁盘使用率。经过一些随机写入后,我想获取该文件的特定扇区/页是否已分配。
一些相关的系统调用(例如 mincore/fincore)作用于页面缓存的虚拟机状态。但是它们不提供磁盘分配信息。我想知道有什么方法可以做到这一点。谢谢。
答案1
您可以使用以下命令获取文件在磁盘上的映射FIEMAP
读写控制。还有FIBMAP
ioctl,它执行类似的操作,需要 root,并且没有详细记录。
无需编写 C,您就可以使用filefrag -v
或hdparm --fibmap
来获取数据。