我的根分区和主分区是 LUKS 加密的。我希望对它们启用丢弃/修剪(我知道安全隐患)。如果我的理解是正确的,这应该会导致原始磁盘设备上的丢弃区域为零,而在 cryptsetup 映射设备上则出现乱码。
我进行了一些配置更改,运行fstrim
,现在我想验证丢弃是否有效。为此,我想计算我的分区上有多少字节是零。在修剪过的磁盘上,我希望:
count of 0 bytes
÷total partition size
≈percentage of free space
在未修剪的加密分区上:(假设所有字节至少写入一次)
count of 0 bytes
≈total partition size
÷ 256
灵感来自如何收集二进制文件中的字节出现统计信息?,我试过这种方法:
sudo pv /dev/disk/by-label/ESP | od -vtu1 -An -w1 | grep -Fx ' 0' | wc -l
但结果令人失望:处理一个 500 MB 的分区花了将近 3 分钟。那是 3 MB/s,而我的 SSD 可以达到 360 MB/s 的顺序读取。我还注意到我的一个 CPU 内核以 100% 的速度运行,而其他内核则处于空闲状态,所以我想这可以从并行化中受益。(影响pv
可以忽略不计,与 相比几乎没有区别cat
)
0
计算分区上字节数的最快方法是什么?
如果您能够访问原始磁盘(未加密),您可以执行以下操作:
这将从磁盘读取 100Mega 字节,删除所有零并计算剩余字节数。
我不知道这是否是最快的方法,但假设零比数据多,它应该很快。
上面的命令将读取 100 次
1Mega byte
或100*2^20
(104857600) 个字节(如果它们可用)。尝试使用少量(10 或 100)来测试速度以及命令的工作情况。要读取整个磁盘只需删除计数选项,让磁盘的一侧限制命令。提取两个重要的值(完整磁盘字节数和非零字节数)命令变得更加复杂:
这会将两个值打印为:
non-zero/disk
,例如:计算
1-766568020/999292928
以找到零字节的百分比: