我想要回收这些1的磁盘上的实际空间,因为我不再需要稀疏文件的那部分.包含这些1的文件的部分应该成为一个“洞”,就像在1s被写入之前一样.
为了做到这一点,我将该地区清除为0.这不会回收磁盘上的块.
如何真正使稀疏文件再次稀疏?
这个问题类似于this one,但是这个问题没有一个可接受的答案.
考虑在股票linux服务器上运行的以下事件序列:
$cat /tmp/test.c#include <unistd.h>#include <stdio.h>#include <fcntl.h>#include <string.h>int main(int argc,char **argv) { int fd; char c[1024]; memset(c,argc==1,1024); fd = open("test",O_CREAT|O_WRONLY,0777); lseek(fd,10000,SEEK_SET); write(fd,c,1024); close(fd); return 0;}$gcc -o /tmp/test /tmp/test.c$/tmp/test$hexdump -C ./test00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|*00002710 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 |................|*00002b10$du -B1 test; du -B1 --apparent-size test4096 test11024 test$/tmp/test clear$hexdump -C ./test00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|*00002b10$du -B1 test; du -B1 --apparent-size test4096 test11024 test# NO CHANGE IN SIZE.... HMM....
编辑 –
让我进一步的资格,我不想重写文件,复制文件等.如果不可能以某种方式释放以前分配的块原位,那么是这样,但我想确定这是否实际可能或不.在这一点上似乎是“不,不是”.我想我正在寻找linux的sys_punchhole(讨论我刚刚发现).
解决方法 现在看来,只有NTFS支持打孔.这在大多数文件系统中一直是一个问题. POSIX据我所知,没有定义一个 *** 作系统界面打孔,所以没有一个标准的linux文件系统有它的支持. NetApp在 WAFL文件系统中支持通过windows打孔.有一个关于这个 here的漂亮的博文.对于您的问题,正如其他人所指出的,唯一的解决方案是移动文件,而不包含包含零的块.是的,它会慢一点或者在linux上为您的文件系统写一个扩展名,并在linux内核团队中为patch patch提供good folks. 总结
以上是内存溢出为你收集整理的linux – 如何回收稀疏文件的零块?全部内容,希望文章能够帮你解决linux – 如何回收稀疏文件的零块?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)