Che*_*ewi 5 linux raid ssd trim mdadm
Red Hat 建议不要在 SSD 上使用 mdadm RAID 1 的其他问题中已经提到过。
Red Hat 还警告说,不建议在 SSD 上使用软件 RAID 级别 1、4、5 和 6。在这些 RAID 级别的初始化阶段,一些 RAID 管理实用程序(例如 mdadm)会写入存储设备上的所有块以确保校验和正常运行。这将导致 SSD 的性能迅速下降。
我明白这背后的原因。但是,我怀疑这是在mdtrim到来之前编写的,它是专门为 mdadm RAID 1 设计的。这是否回避了问题?如果我对 TRIM 的理解是正确的,那么我相信它确实如此,但我不确定,因此我在问。
不过,TRIM 可能不适合我。我需要这个用于生产系统,而 mdtrim 看起来充其量是实验性的。更重要的是,我需要强大的加密功能,研究表明,TRIM 通过突出显示驱动器的哪些部分实际在使用,从而透露了太多信息。有什么方法可以避免性能问题并且仍然具有强大的加密功能?我想知道是否有可能进行部分 TRIM,释放一些块以提高性能,但不要太多以至于放弃太多。
我看到的一个建议是只使用每个磁盘的 80% 左右,这样在 mdadm 进行初始检查后,仍有少量块未使用。但是这些块不会是第一个在随后使用磁盘时使用的块吗?它们仍然会很快用完,然后我也不会好过,对吧?
当然,您可以使用 mdtrim(请参阅--reserve
选项)进行部分修剪,以始终保留一些未修剪的可用空间。或者您可以简单地在加密的 FS 上使用 dd(1) 创建一些大文件来占用一些空间,然后这些空间将永远不会被修剪(也不会被您使用)。我猜想,修剪除约 30% 之外的所有未使用空间将为您带来大量性能优势,同时不会对安全性造成太大影响。
您可以(按照您的建议)进行过度配置,而不是修剪(在新的或 ATA 安全擦除的 SSD 上)创建仅 80% 空间的分区,然后使用它。它不会“很快用完,然后你的情况也不会好转”。原因如下:
假设(为简单起见)您的磁盘有 10000 个扇区 (LBA)。当您进行分区时,仅使用其中的一半(同样是为了简单起见),您将仅使用 LBA 0-4999,而 LBA 5000-9999 将永远不会被触及。现在,驱动器中的水平磨损固件有两种方法可以了解哪些扇区未使用 - 那些由 TRIM 指定的操作系统,以及那些正在重写的扇区。因此,如果您第一次写入 LBA 100,它将被使用(例如在物理块 123 上)。当您第二次写入LBA 100时,SSD会将其写入新位置(例如物理块124),然后将LBA 100的旧版本(即物理块123)标记为未使用(TRIMed),因此稍后当 SSD 空闲时,它可以进行垃圾收集,并且(如果该擦除块中的所有其他物理块也未使用),擦除整个擦除块(比物理写入块大得多 - 例如 512KB 与 4KB)
因此,通过将 LBA 的使用范围减少一半,您就增加了驱动器可以使用的过度配置的物理扇区的数量。它们不会“用完”,但您需要拥有足够的它们,以便它们上的碎片(同一擦除块中的部分使用和部分未使用的物理块)将在您用完可用空间之前消失(否则,SSD 固件在擦除整个擦除块之前,需要将已使用的块复制到其他位置,从而导致写入放大,性能低下,并缩短SSD的寿命)
TRIM 命令仍然有用,因为它通过在需要再次写入之前标记未使用的扇区来加快处理速度(并且不会损失太多空间)(从而避免额外写入并延长 SSD 的使用寿命)。
归档时间: |
|
查看次数: |
2937 次 |
最近记录: |