我有一个 2 TB 的驱动器,已满到 99% 以上。我已使用 删除分区,fidsk
并使用 格式化它们mkfs.ext4
。
据我所知,驱动器上的实际数据仍然存在。但分区表已被重新分配。
问题是:如果磁盘已清理? 我说的清理是指用零填充磁盘吗?
就像是
dd if=/dev/zero of=/dev/sdx bs=1 count=4503599627370496
答案1
不,它不会提高性能。
总结:旋转磁性硬盘驱动器不像这样工作。
首先,当你将任何给定的数据写入旋转磁存储驱动器时,该数据会转型进入磁畴这可能实际上看起来与你正在写入的位模式非常不同。这样做的部分原因是,当从磁盘读回的模式具有一定程度的变化时,保持同步要容易得多,例如,一串长串的“零”或“一”值会使它非常很难保持同步。(你读过 26,393 位还是 26,394 位?你如何识别位之间的界限?)在计算机数据位和可存储块之间进行这种转换的技术随着时间的推移而发展;例如,查找改进的频率调制, 多模调频,群组代码记录以及更通用的技术行程长度受限编码。
实际录制过程,例如高温磁共振,永久磁共振,瓦片状等等与此正交,因为它们描述了磁畴如何存储在物理介质上的机制。
其次,当您将新数据写入扇区时,盘片相关部分的磁畴会设置为所需值。无论该特定物理位置上的前一个磁畴是什么,都会这样做。盘片已经在写入磁头下旋转;首先读取当前值,然后写入新值(如果且仅当新值不同)会导致每次写入都需要旋转两圈(或每个盘片需要一个额外的磁头),从而导致写入延迟加倍或大大增加驱动器的复杂性,进而增加成本。由于硬盘顺序 I/O 性能的限制因素是每个位在读/写磁头下通过的速度,因此这甚至不会给用户带来任何好处。(顺便说一句,随机 I/O 性能的限制因素是读/写磁头定位到所需柱面的速度以及所需扇区到达磁头的速度。SSD 在随机 I/O 工作负载下如此之快的主要原因是它们完全消除了这两个因素。)
正如指出的那样Giacomo1968 的回答, 一个理由为什么你可能想要 覆写驱动器具有一些固定模式(如全零)是为了确保不会留下任何以前存储的数据已恢复, 任何一个故意地或意外。但出于上述原因,这样做不会对驱动器的性能产生任何影响。另一个原因,可以说是“提高性能”,正如liori 的评论,是为了帮助压缩存储的磁盘映像中未使用的部分,但即使这样也无法提高正在使用的系统的性能。
答案2
您这样说:
问题是:如果清理磁盘,是否会提高进一步写入操作的写入性能?清理的意思是将磁盘填充为零?
100% 不会。将零写入磁盘不会提高性能。这样做只会破坏数据。因此,知道这一点后,你会这样说:
所以据我所知,驱动器上的实际数据仍然存在。
从技术上来说,是的……驱动器上之前存在的数据在某种基本层面上仍然存在。也就是说,它不存在此时,数据可能会以一种易于访问或恢复的形式丢失,但如果您真的担心数据会被那些愿意努力恢复剩余数据片段的人所破坏,那么这可能是一个问题。
因此,如果担心安全和隐私,那么您可能希望向驱动器写入零以确保所有可用空间都被真正清除。但安全和隐私是您用零清除可用空间的唯一原因,因为这样做永远不会提高性能。
答案3
我给你们大家的建议是我自己的经验,是的,它有帮助,但要谨慎。
我有很多 SSD,根据我自己的测试,我建议在重写主表之前用零填充,而不是删除分区,而是重新创建主表。
稍后我会解释原因,但步骤是ˋddˋ填满整个SSD,使用bs=1M,比bs=1快得多,并且忘记count参数使其一直到最后(当到达末尾时它会给出没有更多空间的错误,这是预料之中的,所以不要担心看到这样的错误,它必须显示出来);完全填充后使用gparted或任何你想要写入主表(MBR/GPT/etc)的东西,这将“修剪”所有磁盘,然后创建具有所需格式的分区等。
为什么要用零填充?简短的回答是,我的经验是,当我用零填充时,一些 SSD 给出 2-24 个不可读块的问题得到了解决,不再有不可读块了。
现在,当我收到一个新的 SSD 时,在使用它之前,我做的第一件事就是用零填充它,以确保我不会再遭受无法读取 1KiB 块的常见随机错误。
我的经验:使用软件读取/测试整个 SSD(它会告诉您读取每个“扇区”需要多少时间),我得到很多对无法读取的“512 字节扇区”(1KiB 块),它们的位置随机变化,失败次数从 2 到 24 不等,等等;在用零完全填充并重新创建主表(需要修剪)后,不再有无法读取的扇区。
我的崩溃测试:我没有用零填充来恢复此类错误,而是使用了一个 SSD,几个小时后,只有不到 1TB 的数据写入其中(120GiB SSD),它就死机了,不再允许任何访问,主板 BIOS 也看不到它,USB 外壳在访问它时会冻结,因此 Windows 都看不到它,Linix fdisk 也看不到它。
这是对我同时购买的多个 SSD 进行的“死亡”测试,它们完全相同……所有我没有归零的 SSD 都死亡了,其余的有很多块被重新分配,但不再有任何无法读取的错误。
当然,我的结论是,并不是所有的SSD都是可靠的,无论什么品牌、什么容量。
因此,根据我的经验,对它们做的第一件事就是强制它们至少填充一次,使用零比随机填充更好(这样更快)。
另外,大多数 SSD 在用零写入时会进行内部修剪(garbe 记忆算法等)。
此外,如果您先填充它们一次,则任何出现写入错误的块都会被重新分配。这种情况最好发生在没有重要数据的情况下,当写入零时,如果数据丢失(全部为零),则无关紧要,但如果数据对操作系统“至关重要”,那就非常糟糕了。
大多数 SSD 都会重新分配,但会丢失导致写入错误的块上的数据,只有“企业”(每 GiB 成本 >10 欧元)会在正确重新分配后重新尝试写入。一些 SSD 还会丢失此类失败块上的所有其他“扇区”(就像执行“丢弃”一样)。
因此最好先尝试一下,在完全填充后,检查 SMART 数据以查看还可以进行多少重新分配。
进行了多少重新分配并不那么重要,大多数 SSD 在出厂时就已经对一些块进行了重新分配,找到一个零分配的 SSD 则小于 1%,因此重要的是比率,即重新分配与未来可能的重新分配。
这是我的经验,数百块 SSD 在过去 5 年内报废,有的在使用的第一个小时内就报废了,有的在一周内,还有的在一个月内;但我所做的这种零填充确实存活了 2 到 3 年,每天写入 13GiB,写入 3*365*13 GiB = 13.9TiB,比制造商说的要少得多(>100TiB)。
但是速度很重要,尤其是在 Windows 上(在 Linux 上,好的 2xHDD LVM2 条带化可以提供相同的启动时间,但它们在 25 年内都不会出现故障),因此使用每 GB 0.21 欧元(120GiB = 25 欧元)的 SSD 是值得的(对于 Windows 而言),其中它们必须在 2 或 3 年后更换;我希望技术能够提高可靠性。
对于 Linux,我不再需要 SSD 直到它们更可靠,但对于 Windows(Vista、7 和 10),系统分区是必须的(在某些情况下,启动时间缩短了 10 倍,使用 Windows Vista,在我的旧笔记本电脑上启动时间不是 >30 分钟,而是 >4 分钟)。
是的,根据我的经验,必须用零填满。
但是,只有当您收到 SSD 并在使用它进行任何操作之前才可以。
提示:如果 SSD 无法很好地进行垃圾收集,并且操作系统没有告诉它修剪所有数据,最好用零填充,这是 SSD 在丢弃数据块时内部所做的。此外,写入零会清除电子数据,这就是为什么它有助于恢复失败的读取数据块。
此外,每次你更改它上面的数据时,尝试进行克隆,SSD 都会通知写入正常,同样在不可读扇区上(它们可以写入但不能读取),没有操作系统设计来支持这种情况,它们都假设如果写入正常,则可以读取数据;不要将可读与读取与写入不同的数据相混淆。
这就是我对 SSD 和 HDD 的经验。对于 Windows 启动和应用程序,我使用 SSD,但总是在普通 HDD 上进行克隆,因为 SSD 会在不到 3 年的时间内损坏,但对于 Linux,我使用 2 倍或 3 倍好的 2.5 英寸 HDD,在正常使用中获得与 SSD 类似的时间,但使用寿命更长(>25 年)。
我不会为 100GiB 企业级 SSD 支付超过 1000 欧元,这样可以正常使用 10 年,我宁愿每 2 或 3 年支付 25 欧元,购买 130GiB。价格方面,100 欧元/年(企业级)与 10 欧元/年(Yucon、三星等)有关系,算一下就知道了。