我正在使用 simple 将介质清零pv /dev/zero > ...
,想知道在此命令之后介质上是否还有其他字节。这样我就可以知道介质已损坏。我假设理想环境是在此期间任何其他进程都不会写入介质。
我尝试过命令grep -vP '\x00' ...
,但在以下两种情况下它都没有给出任何反馈:1. 文件只有 NUL 字节 2. 文件有其他字节。最后我添加了,; echo $?
但它总是给出 0。
我遗漏了什么吗?检查的正确命令是什么?
答案1
grep -qP '[^\x00]' ...; echo $?
该-q
标志告诉 grep 一旦看到非空字节 ( [^\x00]
) 就返回 0。否则返回 1。这为正匹配提供了速度优势。
例如,读取 1 亿个随机字节,然后读取 1 亿个零字节:
$ time head -c 100000000 /dev/urandom | grep -qP '[^\x00]'; echo $?
real 0m0.007s
user 0m0.000s
sys 0m0.004s
0
$ time head -c 100000000 /dev/zero | grep -qP '[^\x00]'; echo $?
real 0m4.281s
user 0m4.120s
sys 0m0.268s
1