第一个命令
sudo dd if=/dev/zero of=/dev/sda
第二个命令
sudo dd if=/dev/zero of=/dev/sda bs=1M
我用第一个代码格式化了我的 PC 四个小时,但仍未完成。
第一个代码有错吗?
有什么不同?
答案1
默认块大小为dd
512 字节,第二条命令指定dd
使用 1MB 块大小。
块大小是多少?
块是衡量一次读取、写入或转换的字节数的单位。命令行选项可以为输入/读取 (ibs) 指定与输出/写入 (obs) 不同的块大小,但块大小 (bs) 选项将覆盖 ibs 和 obs。输入和输出块大小的默认值均为 512 字节(Unix 块设备的块大小)。复制的计数选项以块为单位,读取的跳过计数和写入的寻道计数也是如此。转换操作也受“转换块大小”(cbs) 的影响。
对于 dd 命令的某些用途,块大小可能会影响性能。例如,当从硬盘恢复数据时,较小的块大小通常会导致恢复最多的字节。为了在复制操作期间获得更快的速度,可以使用较大的块大小。当 dd 用于网络传输时,块大小可能会影响数据包大小,具体取决于所使用的网络协议。
答案2
第一个命令使用 512 字节块,而第二个命令使用 1MB 块。实际上,在大多数情况下,4kB 块大小就可以解决问题,因为磁盘在硬件级别上使用 4kB 块大小。
第一种情况下发生的情况如下(简化):
- 将 4kB 块从磁盘读入内存缓冲区
- 替换内存缓冲区中的 512 字节
- 将 4kB 缓冲区写入磁盘
- 将 4kB 块从磁盘读入内存
- 替换缓冲区中的接下来的 512 个字节
- 将 4kB 块写入磁盘
... 替换 4kB 块需要从磁盘读取 8 次并向磁盘写入 8 次。
我想你应该已经知道将块大小增加到 4kB 或更大(最好是 4kB 的倍数)时会发生什么,以及这会如何提高速度。它不再需要读取磁盘,因为整个块都已写入。
除了速度提升之外,PC 现在向磁盘传送数据的速度也足够快,它可以连续地写入一个块,而不必等待旋转的盘片旋转一圈,直到正确的块出现在磁头下方。
答案3
第二个命令中的参数bs=1M
表示读取和写入的字节数。因此,当您dd
使用此参数运行时,将从 读取 1 MB /dev/zero
,然后将 1 MB 写入/dev/sda
。当您没有参数时,将使用字节数的默认值,我认为它是 512 字节。这个字节数要小得多,因此需要更多的读写才能完成请求的操作,并且速度会更慢。