在 Linux 上,此命令
fstrim -av
我将删除所有未使用的块(这在虚拟机磁盘上尤其重要,在 SSD 上也有必要,以便保留/获得更长的持续时间)。NetBSD 有一个类似的命令,名为blkdiscard
此命令将擦除整个磁盘,因此它将变得无法使用(如果我错了,请纠正我)
blkdiscard -v /dev/rwd...
我看到有一个标志,它在某些字节(或 MB)之后开始丢弃
blkdiscard -v -f 256m -m 128m /dev/rwd0c
假设我的分区使用 6GB 的数据,为了安全丢弃(我的数据仍然保留),这是正确的命令吗?
blkdiscard -v -f 6000m -m 128m /dev/rwd0c
我不会称其为类似;它会丢弃整个设备(或手动指定的范围),并且根本
blkdiscard
不与文件系统交互。(顺便说一句,Linux 也一样。)blkdiscard
空的并且可用,但是数据已经消失了。
完全不是。文件系统不会从一端填充存储空间。(而且,当你删除一个文件时,也不会将另一个文件的内容移动到存储空间来填补空缺。)
丢弃真正需要的是能够理解存储在磁盘上的文件系统,正确识别未使用的块,然后修剪这些块。
因此,
fstrim
类似的工具需要由于这些步骤需要锁定内核内部结构,因此您可以
Linux 选择了选项 1。据我所知,NetBSD 既没有选项 1,也没有选项 2.¹,因此根本不可能存在与
fstrim
NetBSD 类似的工具(我所说的“类似工具”是指“可以丢弃正在使用的文件系统中未使用的块”)。NetBSD 上的某些文件系统(我觉得是 FFS?)确实支持每次删除文件时自动丢弃;您需要弄清楚这是否适用于您的文件系统,以及如何实现这一点。一般来说,人们不建议这样做,因为它可能会给日常使用带来性能负担。
¹ 据我在“文件系统内部”下的“NetBSD 内部”指南中发现的那样,根本没有针对该内容的 API。