我通常使用
# pv -terab /dev/zero > /dev/sdx
将磁盘清零(即:/dev/sdx)。基本上,它只是将每个地方都写为零,而不关心以前的值。
但是,我想知道这样做是否会更快,尤其是在 USB 闪存驱动器上,读取磁盘并且仅当读取的值不为零时才将其设置为零。我该怎么做?特别是在 bash 单命令行中。
我对此感兴趣的是 USB 闪存盘有几个特点。它们的读取速度很快,但写入速度很慢。它们往往会因写入过多而磨损。最后一点,据我所知,无法有效地使用“修剪”命令。
因此,仅写入尚未设置为零的磁盘数据是值得的......
谢谢您的回答。
附言:抱歉我的英语不好,这不是我的母语
答案1
我(这个社区 wiki 答案的原作者)在 Unix&Linux SE 上解决了这个确切的问题:如何用零填充设备,而不覆盖已经为零的字节?
解决方案(ab)使用了--generate-mode
GNU 的选项ddrescue
。核心是:
ddrescue -b 512 --generate-mode /dev/zero /dev/FLASH flash.map ddrescue -b 512 --force --fill-mode=+ /dev/zero /dev/FLASH flash.map
有关详细信息,请参阅链接的答案。如果您发现该解决方案有用,请首先在 Unix&Linux SE 上点赞该答案。
关于“仅链接答案”的免责声明:
我决定不在这里重复或引用整个其他答案。由于 U&L SE 是我们的姊妹网站,我在那里的答案与这里的非维基答案一样受我控制,因此只有当整个 Stack Exchange 崩溃时,上述链接才会崩溃。我想保留一个答案,而不是两个。我希望社区能够理解。
另一方面,我觉得这里需要一些答案。现在它可能被接受,问题正式被标记为已解决。这就是这个答案的重点。