我有一个可启动的 FreeBSD 驱动器,在将电脑捐赠给我当地的旧货店之前,我用它来擦除硬盘驱动器的内容。我使用以下命令来实现此目的:
dd if=/dev/urandom of=/dev/[drivename] bs=64k
假设硬盘驱动器有损坏的扇区或物理损坏的区域。这些扇区会被上述命令覆盖吗?或者是否仍然可以从损坏或损坏的扇区中提取数据?
我有一个可启动的 FreeBSD 驱动器,在将电脑捐赠给我当地的旧货店之前,我用它来擦除硬盘驱动器的内容。我使用以下命令来实现此目的:
dd if=/dev/urandom of=/dev/[drivename] bs=64k
假设硬盘驱动器有损坏的扇区或物理损坏的区域。这些扇区会被上述命令覆盖吗?或者是否仍然可以从损坏或损坏的扇区中提取数据?
这是一类取决于观点的问题:
在某些时候,损坏的扇区无法读取或写入。但硬盘驱动器的设计理念是,在某些时候可能会发生坏扇区。
如果没有适当的机制来处理此类扇区,这将会产生后果:假设 LBA 地址处的扇区变坏,我们的连续 LBA 地址空间会突然出现一个漏洞。为了应对这种情况,硬盘驱动器需要维护一个备用扇区池。例如,一旦硬盘发现 LBA 100 处的扇区有问题,它就可以将 LBA 100 重新映射到备用扇区,并使原始扇区停止运行。
因此,不,您将无法写入 LBA 100,即原始扇区,但由于驱动器会将 LBA 地址映射到备用扇区,您毕竟可以写入 LBA 100。因此,只要驱动器有可用的备用扇区,您就可以写入该扇区,而实际上您正在写入不同的物理扇区。
有一些条件会触发驱动器处理坏扇区:
该驱动器已经重新分配扇区,并且还有待处理的扇区。如果您写入以下内容,待处理的扇区将会消失:
关于恢复数据,或者如你所说,从坏扇区提取数据:
从坏扇区获取数据的最佳“工具”是硬盘驱动器本身。如果驱动器无法读取某个扇区,它将应用各种错误恢复技巧,甚至无需您提出要求。每个扇区可能需要长达 20 秒的时间。这就是为什么人们经常抱怨“不稳定”的驱动器速度慢;驱动器只是非常努力地从有问题的扇区恢复数据。
专门从这些扇区恢复数据的软件只能做一些事情:
编辑:如果这是关于覆盖数据并击中坏扇区,则适用相同的机制:
如果驱动器在擦除过程中发现坏扇区,它将被重新分配。有些人可能会认为这是不安全的,或者可能是一个攻击媒介,因为原始扇区已停止使用,因此不会被覆盖。
然而恢复的可能性不大:
如果驱动器支持增强擦除,那么这将是安全擦除所有扇区(包括已重新分配的扇区)的最佳选择。
在很大程度上,问题取决于“坏”是否意味着操作系统已将其标记为“坏”,或者驱动器的固件是否认为它无法使用。
在第一种情况下,较低级别的工具可能能够覆盖它。
在第二种情况下,坏区已被标记为不可用,并可能从保留池中替换,这些是固件操作,除非使用特殊的硬件工具,否则“坏”区很可能无法被覆盖。
如果整个存储区域没有在硬件级别上被擦除和重新格式化,那么坚定且资金充足的对手很可能可以从中恢复信息。从历史上看,即使在硬件擦除之后,顶级取证设备也可以恢复原始数据的痕迹,因为时钟/数据转换的残留痕迹可见为非常微弱的模拟信号。
固件或操作系统级别的操作不会阻止这种情况。
最终,擦拭驱动器的唯一方法是使用锤子和熔炉。
由于我不确定一种设置中的行为,因此以下情况适用:
固态硬盘
您尝试擦除的扇区与用于存储这些扇区内容的闪存块之间没有固定的映射。
由于闪存块的写入周期寿命有限,一旦闪存块达到使用寿命,SSD 固件就必须重新映射闪存块。这种重新映射操作并非偶然,它是常规磨损处理的一部分。这种老化或磨损过程反映在某些 SMART 属性的变化中,具体取决于制造商。重新映射后,您将无法再通过操作系统访问这些扇区。不过,专用工具似乎能够做到这一点。
LUKS 加密系统中的反取证分离器就是为了应对这种影响而构建的。
硬盘
扇区号和物理扇区之间的映射通常是静态的,但在 HDD 使用寿命结束时出现的错误除外。待定行业的数量似乎像雪崩一样增加。由写入操作触发的待处理扇区重新映射到待处理(不可读)扇区使得该扇区对于操作系统不可用。查看重新分配的扇区计数(SMART 属性)的原始数据,以确定您无法访问的范围。
我无法判断的是,对待处理扇区的写入操作是否会触发对该扇区的最后一次写入尝试(这可能会导致写入成功),或者该扇区是否会立即重新映射。
结论
重新映射可以防止您对 HDD 和 SSD 进行擦除操作,但随着时间的推移,重新映射的分布会有所不同。SMART“重新分配扇区”属性对于 HDD 很常见。您可以使用它来评估有多少扇区无法覆盖并采取相应措施。考虑到 SSD 的操作方式,我宁愿物理上销毁它们,也不愿依靠用随机数据或零覆盖其内容。
简短的回答:是的,在出售、赠送或重新利用之前,最好用零或随机数字填充驱动器。
建议:
更好的方法是用已知数据填充驱动器,然后验证其读取是否正确。badblocks 工具具有用于此类任务的写入/擦除模式:
badblocks -w /dev/disk/by-id/ata-MNFCR-MODEL_SERIANO
(提示:不要理会/dev/sd?
文件,请对其中的驱动器进行寻址/dev/disk/by-id/
以避免任何混淆)。它将写入四个模式以确保驱动器上的所有位都能够更改。最后一个模式是 0x00,这很方便。通过使用 只指定一种模式可以加快测试速度-t 0
。作为一个很好的副作用,您还可以测试电缆和 IO 控制器,它们也可能有故障。另一种方法是使用 ATA 安全擦除,然后使用 SMART 长自检,使驱动器自行擦除和检查。优点是您不使用操作系统的资源。
写作如何治愈内驱力:
有时,硬盘上的数据变得无法读取不是因为物理表面故障,而是因为随机电涌或其他原因导致写入不当。覆盖这些扇区可以完全恢复它。
老派的答案是“是的,这就是你告诉驱动器固件重新映射扇区并用一个好的备用扇区替换它的方式”。
更老的学生的答案是“不,你必须告诉你的磁盘控制器/操作系统进行此重新映射”(这不适用于你今天在硬核逆计算环境之外找到的任何硬盘驱动器)。
新学派的答案是“如果坏扇区引起足够的干扰以通过驱动器固件的缓解措施,除非您确定原因,否则考虑驱动器坏了 - 存在太大的风险,无论什么在之后创建任何新的坏扇区制造检验的时间会产生更多(例如,驱动器中的污染,甚至更糟糕的多米诺骨牌效应),超过更换成本。此外,如果大量重新映射的扇区导致大量额外的搜索(这在旋转硬盘上非常昂贵)。
所以你要问的是,如果驱动器有坏扇区,并且你尝试向其中写入随机垃圾,那么坏扇区会发生什么?
嗯,不会被写入。但是坏扇区上留下的随机数据位并不重要,因为它是坏扇区上的随机数据位。
从这些数据中可以得到什么?没有什么。
它的可回收价值与 1,000,000 块拼图中单独的随机拼图一样多。
PS 如果您认为硬盘驱动器上的所有内容都非常重要,以至于扇区的每一片碎片都有价值,那么我不知道该说什么。
以我的拙见,你很有可能完全不用担心。偏执地认为某个随机的人会从坏扇区的碎片中提取一些有价值的东西,这没有帮助,也没有用处。
对于 SSD,linux 命令
blkdiscard
可以告诉磁盘删除其完整内容。这是一种很好、安全的擦除 SSD 的方法,不需要覆盖,并且会命中所有“非活动”和“备用”块,以及任何已标记为“坏”的块而且速度也很快,10-20 秒。
缺点是,这不适用于旋转的硬盘驱动器,并且您需要从其他磁盘启动。
根据您的示例,覆盖不会触及备用/非活动/坏块,理论上可以稍后提取内容。秘密被泄露的可能性很低,但不是零,所以偏执在这里是合理的。