`dd if=/dev/zero of=/dev/sda` 有什么作用

J H*_*J H 23 dd disk

编辑:除非您想破坏数据,否则不要运行它来测试它。

有人可以帮助我了解我得到了什么吗?

  1. dd if=/dev/zero of=/dev/sda bs=4096 count=4096

    问:为什么专门为 4096 count

  2. dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr blockdev --getsz /dev/sda - 4096)

    问:这具体有什么作用?

plu*_*ash 45

dd if=/dev/zero of=/dev/sda bs=4096 count=4096 Q:为什么4096特别用于计数器?

这会将驱动器的前 16 MiB 归零。16 MiB 可能足以消除任何“磁盘开始”结构,同时又足够小,不会花费很长时间。

dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr blockdev --getsz /dev/sda - 4096)

问:这究竟是什么?

blockdev --getsz获取块设备的大小,以“512 字节扇区”为单位。所以这个命令看起来是为了将驱动器的最后 2 MiB 清零。

不幸的是,这个命令在语法上是错误的。我希望该命令最初的目的是

dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr `blockdev --getsz /dev/sda` - 4096)
Run Code Online (Sandbox Code Playgroud)

并且反引号在人们在不同环境之间复制/粘贴的过程中丢失了。

旧的分区表、LVM 元数据、raid 元数据等在重用驱动器时可能会导致问题。在驱动器的开始和结束处清零部分通常会避免这些问题,同时比将整个驱动器清零快得多。

  • 谢谢你。这个答案似乎最符合我的要求。这两个命令在delpart之后使用。它们用于擦拭磁盘以重新使用干净。 (4认同)
  • 我的猜测是命令中最初有反引号,并且它们在某个时候被吃掉了。 (2认同)

o11*_*11c 17

这将擦除硬盘驱动器的第一个4096*4096=16MB和最后一个512*4096=2MB,其中包含对恢复有用的重要结构。我认为此代码是恶意发布的。

我从未遇到过明确指定count其他1有用的情况。如果我想确保我没有留下任何 MBR 的痕迹,我已经擦除了第一个块......

  • 这并不是恶意的,我有一些糟糕的格式化程序,如果当前标签损坏,它们拒绝写入新标签,因此必须像这样手动将前几个字节清零。 (9认同)
  • 这不是恶意的。它会擦除磁盘开头的 GPT 和磁盘末尾的备份 GPT。 (7认同)
  • @shelvacu:这是破坏性的。如果发布破坏性命令而没有解释它的作用,那就是恶意的。如果他们附有解释,为什么 OP 在这里询问它? (2认同)
  • 那么,在其完美的头脑中,谁会在不知道其目的的情况下复制/粘贴任何地方的代码?不是恶意的,因为我不会摇晃我可能在地铁上找到的任何奇怪的设备。 (2认同)

Tim*_* S. 6

这些命令将用零覆盖您的 sda 设备——第一个命令将执行前 16MB(块大小为 4096,块数为 4096),第二个命令将用零覆盖最后 2MB(块大小为 512,块数为 4096)。(从技术上讲,这不是擦除,这与我下面的第一点有关。)

(这是其他答案中已经提到的部分,为了完整性而将其包含在这里)

另一件值得一提的事情是,块大小确实有影响,但这些影响通常只在大批量操作中才会出现。执行命令最有效(最快)的方法是命令的块大小与设备的访问大小匹配,否则会浪费时间。

如果您有兴趣,可以尝试创建一个包含一百万个 1 块块的文件和一个包含 100 万个块块的文件,看看差异:

[user@host tmp]$ time dd if=/dev/zero of=/tmp/test1 bs=1 count=1000000
1000000+0 records in
1000000+0 records out
1000000 bytes (1.0 MB) copied, 2.44439 s, 409 kB/s

real    0m2.447s
user    0m0.177s
sys     0m2.269s
[user@host tmp]$ time dd if=/dev/zero of=/tmp/test2 bs=1000000 count=1
1+0 records in
1+0 records out
1000000 bytes (1.0 MB) copied, 0.00155357 s, 644 MB/s

real    0m0.003s
user    0m0.001s
sys     0m0.002s
[user@host tmp]$ ls -al test*
-rw-rw---- 1 user grp 1000000 Apr  8 15:51 test1
-rw-rw---- 1 user grp 1000000 Apr  8 15:51 test2
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,块大小对效率有巨大影响。这可能是OP的一个侧边栏,但我觉得它仍然相关。

TL;DR:不要执行您在网上找到的任意代码,或者您不信任的人给您的任意代码。它会毁了你的一天。

  • +1 表示“不要执行在网上找到的任意代码”行 (9认同)
  • “请注意,这个过程非常繁琐和/或昂贵,并且需要极其特殊的设备。” 停止传播这种错误信息。上一次这在理论上是可能的,是几十年前的事了,当时的技术现在已经过时了好几代。没有人在现代驱动器上展示过这种恢复能力,即使是用奖金来应对公众挑战,例如http://www.hostjury.com/blog/view/195/the-great-zero-challenge-remains-不被接受 (8认同)