有什么理由反对使用 dd 和 bs=10G 吗?

有什么理由反对使用 dd 和 bs=10G 吗?

假设我的驱动器在某个随机位置有一个坏的超级块(或块)。这是一个巨大的驱动器,1-8 TB。它不会格式化为 ext3,所以我把它写满了零,这样我就可以正确地格式化它。lsblk -f显示它的 FSTYPE 为空字符串。

有什么理由不运行下面的命令吗?

sudo dd if=/dev/zero bs=10G status=progress of=/dev/bad_disk

答案1

我怀疑在程序写入块时您无法中断程序,而写入 10GB 需要很长时间。根据我的经验,块大小的性能改进会很快停滞,因此我会坚持使用更合理的大小(4MB...)。

答案2

我的回答完全符合标题:

有什么理由反对使用ddwithbs=10G吗?

但就你的情况来说XY问题。应使用smartctlbadblocks而不是来解决根本问题(坏块)。dd


内存使用情况

这是另一个答案提到“块大小的性能改进”:

块大小的性能改进相当快地达到稳定状态

没错,但这只是bs故事中“接近零”的部分。在问题的背景下,我们应该讲述“bs趋向无穷大”的部分。

在现实世界中,对于一些大型系统来说,平台期实际上会崩溃bs。使用bs=10G该工具将尝试分配 10 GiB 内存。它可能会成功也可能不会成功(内存耗尽)。即使成功了,仍然存在问题:

  • 其他进程可能会将其分配的内存交换到磁盘。
  • 的缓冲区dd可能会被换出到磁盘。该工具会不断使用它,因此操作系统可能会先换出其他(最近未访问的)数据。不过,如果您有 8 GiB RAM 和 16 GiB 交换空间,则无法放入bs=10GRAM。
  • 如果以后需要记忆,OOM 杀手可能会启动。您的进程dd可能是第一个被终止的进程。

当然,这一切都取决于您有多少 RAM 和多少交换空间,以及其他进程所做的事情。


提示

我个人的偏好是使用bs在 0.1-1 秒内传输的大小;bs如果 RAM 使用率可能是一个问题,则使用更小的大小。这样我就可以dd几乎立即中断(这是已经提到答案)。如果硬件限制允许dd超过 10 GiB/s,并且我有超过 40 GiB 的可用 RAM,我会考虑bs=10G。在家里,我几乎从不超过bs=64M

一个bs=10G可能有用的用例是当你想处理确切地和您使用的一样多的数据count=1(或者例如5倍:)count=5然而在实践中bs你可能会得到较少的,除非你使用iflag=fullblock(见这个答案)。由于内存使用问题,我bs无论如何都会重新计算为一个较小的值。

相关内容