linux – 如何回收稀疏文件的零块?

linux – 如何回收稀疏文件的零块?,第1张

概述考虑一个稀疏文件,其中1s写入文件的一部分. 我想要回收这些1的磁盘上的实际空间,因为我不再需要稀疏文件的那部分.包含这些1的文件的部分应该成为一个“洞”,就像在1s被写入之前一样. 为了做到这一点,我将该地区清除为0.这不会回收磁盘上的块. 如何真正使稀疏文件再次稀疏? 这个问题类似于this one,但是这个问题没有一个可接受的答案. 考虑在股票Linux服务器上运行的以下事件序列: $cat 考虑一个稀疏文件,其中1s写入文件的一部分.

我想要回收这些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 – 如何回收稀疏文件的零块?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1044858.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存