Windows系统是否存在Linux中fallocate --punch-holes的等效功能?
Windows系统是否存在Linux中fallocate --punch-holes的等效功能?
当然有啦!NTFS本身就支持稀疏文件,所以实现和Linux fallocate --punch-holes完全一致的功能是完全可行的,下面给你几种实用的实现方式:
使用系统自带的
fsutil命令行工具(最推荐,无需额外软件)
这是Windows官方提供的文件系统操作工具,步骤很简单:- 先将目标文件标记为稀疏文件:
fsutil sparse setflag C:\path\to\your_file.ext - 对指定区间打孔(释放磁盘空间,同时该区域内容会被置零):
举个例子:如果要从文件的第1024字节位置开始,打一个4096字节的孔,命令就是:fsutil sparse setrange C:\path\to\your_file.ext <起始偏移字节> <要打孔的长度字节>
执行后,这段区间的实际磁盘占用会被释放,文件逻辑大小不变,但实际占用空间会减少,和Linux的打孔效果完全一致。fsutil sparse setrange C:\test.txt 1024 4096
- 先将目标文件标记为稀疏文件:
通过Windows API编程实现
如果是开发者需要在程序里集成这个功能,可以调用Windows的DeviceIoControl函数,配合两个控制码:- 先用
FSCTL_SET_SPARSE将文件设置为稀疏模式 - 再用
FSCTL_SET_ZERO_DATA指定要打孔的起始和结束偏移,系统会自动释放该区间对应的磁盘空间,同时将内容置零。
- 先用
注意事项
- 这个功能仅支持NTFS文件系统,FAT32、exFAT等其他文件系统不支持
- 打孔操作会永久清除目标区间的原有数据,和Linux的
fallocate --punch-holes一样,操作前请确认数据无需保留 - 执行
fsutil命令需要管理员权限或者对目标文件有足够的读写权限
备注:内容来源于stack exchange,提问作者Daffy
相关产品推荐
相关产品推荐

