如何检查块是否存在于一个稀疏文件中(用于简单的写时拷贝)?

如何获得稀疏的块大小,并检查数据是否存在于稀疏文件中的reiserfs / ext3在给定的偏移量?

我想用它来实现使用FUSE的简单写时复制块设备。

或者我应该在一个单独的文件中保留一个位图?

Solutions Collecting From Web of "如何检查块是否存在于一个稀疏文件中(用于简单的写时拷贝)?"

/usr/src/linux/Documentation/filesystems/fiemap.txt

fiemap ioctl是用户空间获取文件扩展名映射的有效方法。 而不是逐块映射(如bmap),fiemap返回一个范围列表。

在git://kernel.ubuntu.com/cking/debug-code/ fiemap /中有一个简单的例子。 稀疏文件将缺少“缺失”部分的范围。

自从Linux 3.1以来, lseek提供了标志SEEK_HOLESEEK_DATA来导航到洞的开始或结束,所以这可能是基于ioctl的解决方案的替代方案 。 没有在实践中尝试,所以我没有任何实际的经验来比较两者。