Grz*_*cki 86 storage filesystems partition backup compression
如何用零清除未使用的空间?(ext3,ext4)
我正在寻找比它更聪明的东西
cat /dev/zero > /mnt/X/big_zero ; sync; rm /mnt/X/big_zero
Run Code Online (Sandbox Code Playgroud)
就像FSArchiver正在寻找“已用空间”并忽略未使用但相反的站点。
目的:我想压缩分区图像,因此强烈建议用零填充未使用的空间。
顺便提一句。对于 btrfs :用零清除未使用的空间 (btrfs)
enz*_*tib 93
这样的实用程序是zerofree.
从它的描述来看:
Zerofree 在 ext2 或 ext3 文件系统中找到未分配的、非零的块,并用零填充它们。如果此文件系统所在的设备是磁盘映像,这将很有用。在这种情况下,根据磁盘映像的类型,辅助实用程序可能能够在运行 zerofree 后减小磁盘映像的大小。Zerofree 要求文件系统被卸载或以只读方式挂载。
实现相同结果(将未使用的块清零)的常用方法是运行“dd”创建一个充满零的文件,该文件占用驱动器上的整个可用空间,然后删除该文件。这有很多缺点,而 zerofree 可以缓解:
- 它很慢
- 它使磁盘映像(临时)增长到最大程度
- 它(暂时)使用磁盘上的所有可用空间,因此其他并发写入操作可能会失败。
Zerofree 已被编写为从作为虚拟机内的来宾操作系统安装的 GNU/Linux 系统运行。如果这不是你的情况,你几乎肯定不需要这个包。
.deb 包的描述现在包含以下段落,这意味着这也适用于 ext4。
描述:ext2、ext3 和 ext4 文件系统中的零空闲块 Zerofree 在 ext2、ext3 或 ext4 文件系统中查找具有非零值内容的未分配块,并用零填充它们...
此实用程序的另一个应用程序是压缩作为真实磁盘备份的磁盘映像。一个典型的例子是 BeagleBone 或 Raspberry Pi 中 SD 卡的转储。一旦空白空间被清零,备份映像就可以更有效地压缩。
Ano*_*non 38
清除 ext2/ext3/ext4 上未使用空间的方法摘要(如本问题和其他地方所述):
e2fsck -E discard src_fs丢弃未使用的空间(需要 e2fsprogs 1.42.2 或更高版本)。zerofree src_fs)在未使用的块上显式写入零。e2image -rap src_fs dest_fs仅在使用复制块(新的文件系统应该是一个零,否则“盘”上,需要的e2fsprogs 1.42.9或更高)。fstrim /mnt/fs/要求文件系统丢弃未使用的空间。cat /dev/zero > /mnt/fs/zeros; sync; rm /mnt/fs/zeros(sfill来自安全删除使用此技术)。这种方法效率低下,Ted Ts'o(ext4 的作者)不推荐,可能不会将某些东西归零并且会减慢未来的fsck速度。卸载文件系统会比挂载它产生更好的结果。当许多以前使用的空间需要归零时zerofree,丢弃往往是最快的方法,但在丢弃过程后使用有时可以将额外的一点归零(取决于如何在“磁盘”上实现丢弃)。
您将需要使用适当的磁盘映像工具(例如qemu-img convert src_image dst_image)来回收归零的空间并允许表示映像的文件变小。
以下技术之一可用于使文件稀疏(因此零运行停止占用空间):
cp --sparse=always src_image dst_image.fallocate -d src_image (需要 util-linux v2.25 或更高版本)。如今,使用像virt-sparsify这样的工具一次性完成这些步骤可能会更容易。
zerofreecas*_*cas 16
sfillfrom secure-delete可以做到这一点和其他几个相关的工作。
例如
sfill -l -l -z /mnt/X
Run Code Online (Sandbox Code Playgroud)
github 上的 ArchLinux 项目似乎使用了一个源代码树,其中包含的源代码sfill是 Secure-Delete 包中包含的工具。
sfill的手册页的副本也在这里: