Answers:
假设您要防止的是下一个客户读取磁盘以查看老客户的数据,那么将所有零写入实际上仍然可以工作。将零写入扇区“ n”意味着读取扇区“ n”时,它将返回所有零。现在的事实是,底层的实际数据可能仍在闪存芯片上,但是由于您无法进行常规读取来获取数据,因此这对您的情况不是问题。
如果有人可以物理上握住磁盘并将其拆开(这是因为他们可以直接读取闪存芯片),这是一个问题,但是如果他们唯一的访问权限是SATA总线,则将所有零写入整个磁盘磁盘就可以了。
永远不要对SSD进行零填充。至少,这将使SSD的某些写寿命耗尽,而几乎没有收益。在最坏的情况下,您可能会将SSD的控制器置于(暂时)降低的性能状态。
从这个来源:
多次重复覆盖整个磁盘可以成功破坏数据,但是由于固件转换层(FTL),与传统的硬盘驱动器相比,这要复杂得多且耗时。根据他们的结果,这是一个没有吸引力的选择
最好的选择是通过全盘加密来安全擦除:
一些现代的SSD可以使用全盘加密-例如,英特尔的新320驱动器和一些Sandforce 2200系列驱动器。这些驱动器可以通过简单,快速的方式安全擦除,而不会造成任何驱动器磨损。该驱动器对所有写入的数据使用AES加密,因此安全擦除仅意味着删除旧的AES密钥,然后将其替换为新的AES密钥。这实际上使驱动器上的所有“旧”数据都无法恢复。
但是,英特尔的安全擦除操作不容易自动化。AFAIK必须通过Intel的Windows GUI应用程序完成,它只能在空的非启动驱动器上运行,依此类推。请参阅第21页及以后的Intels文档。
另一个选择是ATA安全擦除:
另一个选择是通过Linux上的fx HDPARM 发出ATA安全擦除命令。通过脚本进行自动化将更加容易。
如果驱动器以“良好”方式实现ATA安全擦除,则应该期望它至少删除“闪存转换层”(FTL)。FTL表保存逻辑扇区(操作系统“看到”)与驱动器本身上的NVRAM物理页之间的映射。映射表销毁后,从驱动器中恢复数据将非常困难,但可能并非不可能。
但是,我不知道有任何研究表明ATA Secure Erase在所有制造商的驱动器上都得到一致且良好的实施,因此我很犹豫地说它将始终有效-您应该阅读制造商的技术文档。
对于单个分区:
当我阅读其他答案的评论时,OP似乎只想安全地擦除单个分区。做到这一点的一种好方法是仅使用LUKS或TrueCrypt创建加密卷。这样,您可以通过松开加密密钥来安全擦除卷,类似于驱动器全盘加密方案。
结论:
如果您真的要知道,请阅读 Sophos博客中链接的论文,并阅读有关安全擦除的驱动器制造商技术说明。但是,如果您希望“良好”的安全擦除,那么具有全盘加密功能并安全擦除和替换加密密钥的SSD可能是您的最佳选择。或者,使用操作系统级加密,并在您要安全擦除数据时丢弃密钥。
磨损平衡与将数据清零没有任何关系。
您将数据归零以阻止其他人/应用程序读取该数据。SSD会“磨损”其数据,以确保由于写入SSD造成的“损坏”而使它们可以长期使用。另外,磁盘通常在不忙时会执行此操作,在服务器情况下,安静的时间并不总是可用,因此这项工作通常无法完成。
您向客户的IO操作收费吗?如果不是,要阻止他们通过不断地不断写入来在数小时/日内基本上杀死他们的SSD部分?SSD比大多数人想的要容易得多,特别是在写繁重的环境中。
if (time < 9am) chriss_try_again()
您绝对不希望使用擦除SSD的传统方法,例如使用dd
将数据归零的方法或将随机数据写入磁盘的其他方法。这些方法更适合于基于磁盘的磁盘。它在擦除SSD方面很有效,但也不必要地消耗了SSD有限的大量写操作,从而缩短了SSD的预期寿命。那将很快变得昂贵。随着时间的流逝,它还会降低SSD的性能。
SSD有不同的安全擦除方法。我会说这似乎很麻烦,因为您通常需要可以进行IDE仿真的某种类型的SATA控制器,而且过程可能很复杂。一些制造商提供了用于安全擦除其自己的SSD的工具,但是您也可以在Linux上使用hdparm来做到这一点:https : //ata.wiki.kernel.org/index.php/ATA_Secure_Erase。但是您会在这些说明中注意到,必须先确定驱动器未“冻结”,然后才能继续。这是比较困难的步骤之一,因为它需要找到一个主板和SATA控制器,该控制器可让您在系统启动时“解冻”驱动器,这通常涉及从SATA电缆中拔出驱动器,然后再将其插入。
无论如何,我的建议是进行研究并选择一个带有安全擦除实用程序的SSD,该实用程序可在对您方便的系统上使用。
dd bs=1M
将导致磨损最小。
尽管已经接受了一个答案,但我认为blkdiscard /dev/sdX
这里仍然值得提及该命令。
根据Arch Wiki:SSD的介绍,该blkdiscard
命令将丢弃所有块,所有数据都将丢失。建议在“您要出售SSD”之前使用。
我不熟悉TRIM的工作原理,因此不知道是否可以保证擦除数据。但是我认为这总比什么都不做要好。
顺便说一句,恐怕此命令仅适用于整个设备,不适用于单个分区。
希望这可以帮助。:)
hdparm -I /dev/theSSD
包含Deterministic read ZEROs after TRIM
,blkdiscard
应快速并确保随后读取零。否则,安全擦除似乎是更好的解决方案。但是,考虑到有关客户安全性的问题,安全擦除可能是更好的解决方案,因为它似乎是针对此类用例而设计的。
从虚拟机映像中清除数据的最好方法是使用TRIM功能。许多更新的操作系统都支持此功能。目前几乎所有的SSD都支持它。
而且,使该选项更好的是,所有SAN也都以其SCSI名称UNMAP支持该功能。对于实施稀疏配置的SAN来说,这是一个很好的命令,对于虚拟机来说,这是一个很棒的功能,尤其是在与块重复数据删除结合使用时。
当将TRIM命令发送给SSD时,固件将立即将这些块标记为空闲以供重用。一些SSD对于TRIM'd块总是返回零。其他驱动器将返回实现定义的(即,随机的)数据。
在支持TRIM的操作系统上,简单删除文件将为TRIM标记块。实际的TRIM操作可能会立即发生,或者可能会被分批处理以在以后执行。有时有些工具会强制修剪文件或扫描分区中所有未使用的块。
Linux上的TRIM性能仍然参差不齐,因此,如果您正在使用它,则需要调查您的选择。在Windows上,看起来很牢固。
您需要一个“ SSD安全擦除实用程序”。如果您使用类似dd
那么耗损均衡可能会开始,最终您将得到保留扇区,其中仍然包含旧的客户数据。安全擦除实用程序将擦除设备上的所有扇区(不仅限于作为磁盘显示给操作系统的扇区)。
其中一些实用程序特定于特定制造商,请向您的驱动器制造商提出建议,他们会比我们更了解。
我认为写0不会帮助您防止其他客户读取磁盘。
在SSD中,当您写东西时,该过程与普通硬盘有很大不同。
想象一下以下情况:SSD驱动器中的“空”存储单元都充满了1。当您向其中写入内容时,它会记下0,并保持1不变。
之后,当您要保存其他内容时,将比较之前的内容和新内容。如果通过写下一些0可以将前一个变成新的,那么好。如果无法做到这一点,则使用另一个存储单元。
“清除”:11111111第一次保存:11011011
新数据:00110011无法使11011011变为00110011(请注意,有必要将0变为1,并且在SSD中无法这样做)。因此,将使用另一个存储单元。
修剪驱动器时,会将所有未使用的存储单元重置为1。因此,很显然它们可以再次使用。并保存已保存的数据。
要执行您想要的操作:首先,擦除(删除)文件。该文件的存储单元将被标记为空闲。然后进行TRIM:所有这些存储单元将变为1,而没有任何数据迹象。
易于回答:使用Linux将分区重新格式化为EXT4,这告诉SSD所有块都准备好擦除,就像对分区的所有扇区进行修剪一样。副作用是写入次数很少(EXT4结构)。
随机忘记“ dddd”,会减少很多SSD的寿命。一些SSD是智能的,如果它们看到一个充满零的完整扇区,则不写入数据,而是将其标记为擦除。
由于您不了解固件的内部信息,因此,最好的选择是在现代linux内核上将分区重新格式化为ext4(不进行完全重新格式化,只是一个快速的结构而已),它将对整个分区进行修整。格式化之前。
所有人都在谈论安全擦除,即一次要对整个SSD进行安全擦除,所要求的只是SSD的一个分区,而不会丢失存储在其中的其余信息(分区级别,而不是SSD级别)。
结论:重新格式化为Ext4,然后如果需要其他格式,请再次对这种其他格式进行格式化。