调零SSD驱动器


18

我们为客户托管VPS。每个客户VPS在标准主轴硬盘上都有一个LVM LV。如果客户要离开,我们将此LV置零,以确保其数据不会泄漏给其他客户。

我们正在考虑将SSD用于我们的托管业务。鉴于SSD具有“损耗平衡”技术,这是否使调零毫无意义?鉴于我们不能让客户数据泄漏给另一位客户,这是否会使这个SSD想法不可行?

Answers:


23

假设您要防止的是下一个客户读取磁盘以查看老客户的数据,那么将所有零写入实际上仍然可以工作。将零写入扇区“ n”意味着读取扇区“ n”时,它将返回所有零。现在的事实是,底层的实际数据可能仍在闪存芯片上,但是由于您无法进行常规读取来获取数据,因此这对您的情况不是问题。

如果有人可以物理上握住磁盘并将其拆开(这是因为他们可以直接读取闪存芯片),这是一个问题,但是如果他们唯一的访问权限是SATA总线,则将所有零写入整个磁盘磁盘就可以了。


1
正是我一直在寻找的答案,当我考虑它时,我得出了相同的结论:)
jtnire 2011年

2
我想(但不确定,这当然取决于SSD中使用的控制器芯片组),将零扇区写入SSD甚至不会击中实际的闪存芯片。控制器应该注意到它全为零,并简单地将该扇区标记为“置零”(或仅将其指向包含全零的扇区)。写入零扇区是一件很常见的事情,特殊的外壳处理将是减少闪存磨损的一种廉价且简便的方法,因此如果至少英特尔和Sandforce没有这样做,我会感到震惊。
kindall 2011年

20

永远不要对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似乎只想安全地擦除单个分区。做到这一点的一种好方法是仅使用LUKSTrueCrypt创建加密卷。这样,您可以通过松开加密密钥来安全擦除卷,类似于驱动器全盘加密方案。

结论:

如果您真的要知道,请阅读 Sophos博客中链接的论文,并阅读有关安全擦除的驱动器制造商技术说明。但是,如果您希望“良好”的安全擦除,那么具有全盘加密功能并安全擦除和替换加密密钥的SSD可能是您的最佳选择。或者,使用操作系统级加密,并在您要安全擦除数据时丢弃密钥。


1
小心是很好的,但我不确定在控制器错误中引用了两年的公告,该错误仅在特定的固态硬盘中长期存在的大量人工工作量中浮出水面,而该固态硬盘早已修复。
丹尼尔·劳森

1
@丹尼尔·劳森:公平点。:-)我改写了该部分的内容,并将其更改为暂时的性能下降-并将链接更改为对Crucial的M4 / C400驱动器(当前正在销售的驱动器)进行审查的链接,该驱动器在进行大量写操作后显示出严重的下降。
Jesper M

6

磨损平衡与将数据清零没有任何关系。

您将数据归零以阻止其他人/应用程序读取该数据。SSD会“磨损”其数据,以确保由于写入SSD造成的“损坏”而使它们可以长期使用。另外,磁盘通常在不忙时会执行此操作,在服务器情况下,安静的时间并不总是可用,因此这项工作通常无法完成。

您向客户的IO操作收费吗?如果不是,要阻止他们通过不断地不断写入来在数小时/日内基本上杀死他们的SSD部分?SSD比大多数人想的要容易得多,特别是在写繁重的环境中。


我正在
谈论

1
if (time < 9am) chriss_try_again()
克里斯S

哈哈-别担心老兄:)
Chopper3 2011年

虽然数据是正确的,但关于杀死的事实却不太正确。与企业级固态硬盘相比,“企业级闪存驱动器”具有更长的使用寿命以及更大的尺寸,但是就像企业级HDD一样,您需要为性能付出高昂的代价。希捷公司表示,他们的“脉冲星” ESD使用寿命为5年,相当于大约6 PB的写入量。anandtech.com/show/2739/2-在脉冲星驱动器上virtualgeek.typepad.com/virtual_geek/2009/02/…-在EFD上
Daniel B.

3
我知道丹尼尔(Daniel),我购买了许多企业级SSD,并将其置于99%以上的读取环境中,但是当我们对其进行测试时,我们仍然发现“杀死”它们非常容易,例如,我们将两个HP硬盘作为镜像对放入其中。一个相当繁忙的Oracle 10机器的日志磁盘,在4周之内开始出现问题。现在是大约10个月前,因此HP不再使用该Pulsar驱动器的重新贴标版本。6PB在5年内相当于〜38MB / s,或者在一年内相当于〜180MB / s-因此,如果不中断不到一年,您就无法使用Pulsar捕获高清视频的单个通道。
Chopper3 2011年

3

所以这是值得一读的文章,如。如果有人可以物理访问光盘,则检索信息会更容易。您是否考虑过加密SSD上的数据,然后要做的就是安全地忘记私钥,这应该是一个更容易解决的问题。我可以看到SSD由于更好的随机访问性能而在vps上大获成功。


2

您绝对不希望使用擦除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,该实用程序可在对您方便的系统上使用。


只要使用适当的大块大小而不使用默认的512字节,就可以使用dd将磁盘清零,这根本不会占用很多写/擦除周期。它将大约使用1。我之所以这样说,是因为我承认,如果您的文件系统对齐错误,则在某些情况下可能最终两次写入同一闪存块。使用dd bs=1M将导致磨损最小。
Daniel Lawson

2

尽管已经接受了一个答案,但我认为blkdiscard /dev/sdX这里仍然值得提及该命令。

根据Arch Wiki:SSD的介绍,该blkdiscard命令将丢弃所有块,所有数据都将丢失。建议在“您要出售SSD”之前使用。

我不熟悉TRIM的工作原理,因此不知道是否可以保证擦除数据。但是我认为这总比什么都不做要好。

顺便说一句,恐怕此命令仅适用于整个设备,不适用于单个分区。

希望这可以帮助。:)


blkdiscard似乎并非在所有情况下都是安全的,因为TRIM它本身只是一个请求,并不是所有的SSD控制器都能满足要求。您可以在这里这里阅读更多有关它的信息。但是正如那里所解释的那样,Linux内核维护着一个白名单,其中已知哪些设备支持TRIM。
nh2 '18年

因此,如果hdparm -I /dev/theSSD包含Deterministic read ZEROs after TRIMblkdiscard应快速并确保随后读取零。否则,安全擦除似乎是更好的解决方案。但是,考虑到有关客户安全性的问题,安全擦除可能是更好的解决方案,因为它似乎是针对此类用例而设计的。
nh2 '18年

1

从虚拟机映像中清除数据的最好方法是使用TRIM功能。许多更新的操作系统都支持此功能。目前几乎所有的SSD都支持它。

而且,使该选项更好的是,所有SAN也都以其SCSI名称UNMAP支持该功能。对于实施稀疏配置的SAN来说,这是一个很好的命令,对于虚拟机来说,这是一个很棒的功能,尤其是在与块重复数据删除结合使用时。

当将TRIM命令发送给SSD时,固件将立即将这些块标记为空闲以供重用。一些SSD对于TRIM'd块总是返回零。其他驱动器将返回实现定义的(即,随机的)数据。

在支持TRIM的操作系统上,简单删除文件将为TRIM标记块。实际的TRIM操作可能会立即发生,或者可能会被分批处理以在以后执行。有时有些工具会强制修剪文件或扫描分区中所有未使用的块。

Linux上的TRIM性能仍然参差不齐,因此,如果您正在使用它,则需要调查您的选择。在Windows上,看起来很牢固。


抱歉,这根本没有意义。据我所知,TRIM与精简配置无关,它只是告诉SSD不要打扰它不知道已被文件系统删除的损耗均衡扇区,它也很明确地不会归零块。
Chopper3 2011年

@ Chopper3:您看不到ATA TRIM和SCSI UNMAP是同一命令吗?UNMAP绝对用于精简配置中。TRIM在至少某些SSD驱动器上将块归零。在TRIM之后,数据消失了:没有支持的方法来检索它,驱动器可能会返回零,有些会返回零。
Zan Lynx

“驱动器还可能返回零”和“数据不可恢复”是两件截然不同的事情。在任何情况下,用户实际上根本不希望擦除SSD,他只是不希望下一个客户能够获得旧客户的数据,这也不尽相同。
克里斯·S

0

您需要一个“ SSD安全擦除实用程序”。如果您使用类似dd那么耗损均衡可能会开始,最终您将得到保留扇区,其中仍然包含旧的客户数据。安全擦除实用程序将擦除设备上的所有扇区(不仅限于作为磁盘显示给操作系统的扇区)。

其中一些实用程序特定于特定制造商,请向您的驱动器制造商提出建议,他们会比我们更了解。


抱歉,这不是我想要的,因为我不想擦除整个磁盘。我并不担心客户端数据在物理SDD磁盘上仍然可用-我只是不希望其他客户能够通过将数据泄漏到他们的LV来访问它们。
jtnire 2011年

0

我认为写0不会帮助您防止其他客户读取磁盘。

在SSD中,当您写东西时,该过程与普通硬盘有很大不同。

想象一下以下情况:SSD驱动器中的“空”存储单元都充满了1。当您向其中写入内容时,它会记下0,并保持1不变。

之后,当您要保存其他内容时,将比较之前的内容和新内容。如果通过写下一些0可以将前一个变成新的,那么好。如果无法做到这一点,则使用另一个存储单元。

“清除”:11111111第一次保存:11011011

新数据:00110011无法使11011011变为00110011(请注意,有必要将0变为1,并且在SSD中无法这样做)。因此,将使用另一个存储单元。

修剪驱动器时,会将所有未使用的存储单元重置为1。因此,很显然它们可以再次使用。并保存已保存的数据。

要执行您想要的操作:首先,擦除(删除)文件。该文件的存储单元将被标记为空闲。然后进行TRIM:所有这些存储单元将变为1,而没有任何数据迹象。


0

易于回答:使用Linux将分区重新格式化为EXT4,这告诉SSD所有块都准备好擦除,就像对分区的所有扇区进行修剪一样。副作用是写入次数很少(EXT4结构)。

随机忘记“ dddd”,会减少很多SSD的寿命。一些SSD是智能的,如果它们看到一个充满零的完整扇区,则不写入数据,而是将其标记为擦除。

由于您不了解固件的内部信息,因此,最好的选择是在现代linux内核上将分区重新格式化为ext4(不进行完全重新格式化,只是一个快速的结构而已),它将对整个分区进行修整。格式化之前。

所有人都在谈论安全擦除,即一次要对整个SSD进行安全擦除,所要求的只是SSD的一个分区,而不会丢失存储在其中的其余信息(分区级别,而不是SSD级别)。

结论:重新格式化为Ext4,然后如果需要其他格式,请再次对这种其他格式进行格式化。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.