dd命令是否会跳转emmc的坏块?

Whether will dd command jump the bad block of emmc?

在emmc flash上​​,我们使用dd命令时,会跳坏块吗? 我发现了这个 link:http://linoxide.com/linux-how-to/how-to-fix-repair-bad-blocks-in-linux/ 请注意它的 "Step 5":

This step will destroy the data on that block by writing zeroes on it. The bad block will be recovered but the data of the file will be lost. If you are sure, you can proceed with the following step:

root]# dd if=/dev/zero of=/dev/hda3 bs=4096 count=1 seek=2269012
root]# sync

为什么dd可以恢复坏块?所以这些块不是真的bad/corrupted? 为什么sync命令在dd之后执行?

eMMC 比原始闪存芯片更像 SSD。

eMMC 存储中有eMMC 控制器。控制器负责将备用块映射到坏块。

映射前的地址称为逻辑地址,映射后的地址称为物理地址。

物理地址只对控制器可见,OS只看到逻辑地址。

当OS写入一个逻辑块时,控制器会检查写入结果,如果失败,它会在损坏的逻辑地址分配一个备用物理块,然后重试写入。

通过擦除所有块,强制控制器检查所有块,如果任何失败,它将为坏块分配一个备用块(也称为恢复)。