问题标签 [sparse-file]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
6368 浏览

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

考虑一个稀疏文件,其中 1 写入文件的一部分。

我想为这些 1 回收磁盘上的实际空间,因为我不再需要稀疏文件的那部分。包含这些 1 的文件部分应该成为一个“洞”,就像在 1 本身被写入之前一样。

为此,我将该区域清除为 0。这不会回收磁盘上的块。

我实际上如何使稀疏文件再次变得稀疏?

这个问题与这个问题类似,但该问题没有公认的答案。

考虑在普通 Linux 服务器上运行的以下事件序列:

编辑 -

让我进一步说明我不想重写文件、复制文件等。如果无法以某种方式就地释放先前分配的块,那就这样吧,但我想确定这是否真的可行或不是。在这一点上似乎“不,不是”。我想我正在寻找sys_punchholeLinux(我刚刚偶然发现的讨论)。

0 投票
1 回答
4517 浏览

python - sparse file usage in python

I'm creating sparse files in python as follows:

when the file is done, it takes up 0 disk space, but its inode size is set to my truncated value (1000K):

How do I get the file's real space usage (allocated size) inside python? The stat call returns the file's apparent size, and I have no idea how else to get the real usage other than to read the entire file (it may become quite large)

0 投票
2 回答
4367 浏览

windows - 如何在 NTFS 上创建稀疏文件?

我正在测试一个稀疏文件。但是我的测试代码效果不佳。

0 投票
5 回答
4325 浏览

java - 如何使文件稀疏?

如果我有一个包含许多零的大文件,我怎样才能有效地使它成为一个稀疏文件?

读取整个文件(包括全零,可能稀疏存储)并使用寻求将其重写为新文件以跳过零区域的唯一可能性是什么?

或者是否有可能在现有文件中进行此操作(例如 File.setSparse(long start, long end))?

我正在寻找 Java 或一些 Linux 命令的解决方案,文件系统将是 ext3 或类似的。

0 投票
2 回答
225 浏览

c - 有没有一种方法可以快速确定从(稀疏)文件中读取的块是否全为零?

有没有一种方法可以快速确定从文件中读取的(4KB-16MB)块是否全为零?

您可以遍历块,检查每个字节。有明显的优化,但仍然是 O(N)。

我的用例是稀疏文件。对于部分解决方案,我会非常高兴,这样如果我刚刚读取的块没有任何磁盘存储支持(即它是一个孔),则返回 true。

有什么提示吗?

0 投票
1 回答
2434 浏览

android - android - 在下载文件之前为文件预先分配空间

如何在 android 上创建预分配文件?像稀疏文件一样的东西?

我需要制作一个可以下载大文件的应用程序,并且我想避免在下载开始时出现空间不足错误。我的解决方案需要支持恢复和写入内部和外部存储。

我已经尝试过这里写的内容: 在 Java 中创建具有给定大小的文件, 但由于某种原因,这些解决方案都不起作用。

0 投票
4 回答
24030 浏览

linux - 复制 1TB 稀疏文件

我得到了一个 1TB 的稀疏文件,它在 Linux 上实际存储了 32MB 数据。

是否可以“有效地”制作一个包来存储稀疏文件?该软件包应在另一台计算机上解压缩为 1TB 稀疏文件。理想情况下,“包”应该在 32MB 左右。

注意:可能的解决方案是使用“tar”:https ://wiki.archlinux.org/index.php/Sparse_file#Archiving_with_.60tar.27

但是,对于 1TB 的稀疏文件,虽然 tar 球可能很小,但归档稀疏文件会花费很长时间。

编辑 1

我测试了tar和gzip,结果如下(注意这个稀疏文件包含0字节的数据)。

包含 0 字节数据的 1TB 文件 sparse-1 可以通过“tar”归档到 10KB tar 球或通过 gzip 压缩到 ~1GB 文件。gzip 花费的时间大约是 tar 使用时间的 2 倍。

从比较来看,'tar' 似乎比 gzip 好。

但是,对于包含 0 字节数据的稀疏文件来说,96 分钟太长了。

编辑 2

rsync似乎完成复制文件的时间比tar但少于gzip

因此,对于这个极其稀疏的文件, tar+ cporscp应该比直接更快。rsync

编辑 3

感谢@mvp 指出较新内核中的 SEEK_HOLE 功能。(我以前在 2.6.32 Linux 内核上工作)。

注意:bsdtar 版本 >=3.0.4 是必需的(在这里查看:http ://ask.fclose.com/4/how-to-efficiently-archive-a-very-large-sparse-file?show=299#c299 )。

在较新的内核和 Fedora 版本 (17) 上,非常tar有效地cp处理稀疏文件。

我使用的是 3.6.5 内核:

0 投票
1 回答
75 浏览

windows - 真的可以将“稀疏零”设置为 (BYTE)0x00 以外的值吗?

如果我正确理解了文本,Platform SDK包含了它所能做的影射:

稀疏文件的默认数据值为零;但是,它可以设置为其他值。

然而,通过相关文本梳理给我绝对没有相应 s 的迹象,FSCTL它允许设置或检索稀疏零值。那么,是不是介绍有误,还是有无证的FS控制代码呢?

0 投票
1 回答
211 浏览

c++ - 在稀疏文件中查找数据块的长度

如何从某个偏移量开始在稀疏文件中找到非零数据块的长度?我是否必须读取一些文件或操作系统可以从一些可以缓存的元数据中读取该信息?我正在使用 Windows 操作系统和 Visual Studio C++。

0 投票
3 回答
361 浏览

java - 是否有与 GetCompressedFileSize 等效的 Java?

我希望获得 Java 中稀疏文件的准确(即磁盘上的实际大小,而不是包含所有 0 的正常大小)测量值。

在 Windows 上的 C++ 中,人们会使用GetCompressedFileSize. 我还没有遇到过如何在 Java 中做到这一点?

如果没有直接的等价物,我将如何测量稀疏文件中的数据,而不是包括所有零的大小?

为了澄清起见,我希望在 Linux 操作系统和 Windows 上运行稀疏文件测量,但是我不介意编写两个单独的应用程序!