我打算为我的旧 USB 驱动器制作一个图像。我有充分的理由期望设备上有一些填充零的块,因此为了节省一些空间,我使用了以下conv=sparse选项:
dd if=/dev/sdb of=myusb.img conv=sparse bs=32M
Run Code Online (Sandbox Code Playgroud)
然而,它什么也没救我:
$ ls -hls myusb.img
250M -rw-r--r-- 1 root root 250M Oct 18 21:31 myusb.img
Run Code Online (Sandbox Code Playgroud)
我确定设备上有零填充块。为什么不dd conv=sparse节省空间?
注意我已经知道答案(我认为)。我把它贴在下面。问题供以后参考。
如何删除 Linux 上稀疏文件中的所有漏洞?在 Windows 上,我相信该过程是
fsutil sparse setflag <file> 0
Run Code Online (Sandbox Code Playgroud)
Linux 的等价物是什么?
(我知道cp <file> <file>.cp; rm <file>; mv <file>.cp <file>;如果可用磁盘空间允许的话,可以完成这项工作,但我猜 Linux 有一种就地方法来完成这项工作?就像 Windows 一样?)
如何使用 Windows 附带的本机工具将稀疏文件从一个 NTFS 卷复制或移动到另一个 NTFS 卷,同时保持稀疏性?如果使用本机工具无法做到这一点,那么来自可信赖供应商的免费应用程序是什么?当然,有一个命令提示符命令或 powershell 命令可以执行此操作。
我有一个代表 250GiB 的文件,它占用了 20GiB 的磁盘空间,我希望它在移动它时继续只占用 20GiB。谢谢。
Apple 现在在包括 macOS 在内的多个产品线中使用 APFS。这个新的文件系统有一些很好的特性来最小化实际占用的磁盘空间,比如稀疏文件支持和类似于 BSD 的 clonefile() 的 COW 克隆。
我已经创建了一个大的稀疏文件作为磁盘映像,并且还将此文件克隆给了其他一些文件。从那时起,原版及其克隆版都被写入了不同数量的内容。
我发现mdls(1)的输出可以告诉我有多少文件是稀疏的。例如,一个 16GB 的文件可能只占用 4.4GB 的磁盘空间。但是,如果我克隆该文件,即使所有块在两个文件之间共享,mdls 仍会显示相同的克隆数据。
有没有办法确定一个或多个克隆共享了多少文件?我能够确定这一点的唯一方法是删除文件并查看释放了多少 fs 块。
有关更多详细信息和示例,请参阅https://and1equals1.blogspot.com/2019/06/playing-with-cloned-sparse-files-on-apfs.html。
我的计算机中几乎没有非常大的 .iso 文件,总共大约 1TB。它们都是稀疏文件,我想从它们中删除稀疏标志/属性,有没有办法做到这一点?也许一些应用程序左右?
我知道当我复制文件时,标志会被删除,但是复制 1TB 的文件有点复杂。
sparsefile ×5
windows ×2
apfs ×1
buffer ×1
dd ×1
linux ×1
macos ×1
ntfs ×1
powershell ×1
sparseimage ×1
windows-7 ×1
windows-8.1 ×1