Linux 使用hdparm命令发送ATA“Secure Erase”指令恢复SSD硬盘的写性能

 伤脑筋   2013-12-30 23:48   3427 人阅读  0 条评论

影响SSD性能的因素“写入放大(Write amplification)” 写入放大是闪存和固态硬盘之间相关联的一个属性,因为闪存必须先删除才能改写(我们也叫“编程”),在执行这些操作的时候,移动(或重写)用户数据和元数据(metadata)不止一次。这些多次的操作,不但增加了写入数据量,减少了SSD的使用寿命,而且还吃光了闪存的带宽(间接地影响了随机写入性能)。   由于闪存的动作特性,数据不能像普通机械硬盘里那样被直接覆盖。当数据第一次写入SSD的时候,由于SSD内所有颗粒都为擦除状态,所以数据能够以页为最小单位直接写入进去(一般是4K,参考颗粒资料),当有新的数据写入时需要替换旧的数据时,SSD主控器将把新的数据写入到另外的空白的闪存空间上(已擦除状态)然后更新逻辑LBA地址来指向到新的物理FTL地址。而旧的地址内容就变成了无效的数据,但是要在上面再次写入的话,就需要首先擦除掉这个无效数据。(由于闪存的物理特性,写入最小单位是页,而擦除最小单位是块,一般为128~256个页)。 那么问题就来了,对于单次操作,最简单的例子,比如我要写入一个4KB的数据,最坏的情况就是,一个块里已经淌有干净空间了,但是有无效数据可以擦除,所以主控就把所有的数据读出来,擦除块,再加上这个4KB新数据写回去,这个操作带来的写入放大就是:我实际写4K的数据,造成了整个块(512KB)的写入操作,那就是128倍放大。同时带来了原来只需要简单的写4KB的操作变成读取(512KB),擦(512KB),改写(512KB),造成了延迟大大增加,速度慢是自然了。 有兴趣可以看 http://bbs.pceva.com.cn/thread-3653-1-1.html 有比较详细的说明。   ATA安全擦除命令用来清除在磁盘上的所有用户数据,这个指令会让SSD回到出厂性能(最优性能,最少写入放大),但是随着之后的使用,GC,写入放大又会慢慢增加回来。 许多软件使用ATA安全擦除指令来重置磁盘,最著名的为HDDErase。对SSD来说,重置就是全盘加电(逻辑1),瞬间即可完成清除所有数据让SSD回到初始状态。  

  •   使用hdparm命令发送ATA“Secure Erase”指令恢复SSD硬盘的写性能

  1.   老版本hdparm 命令,支持的硬盘比较少,需要先下载新版本。

  1.   使用下载的的hdparm 替换/sbin/hdparm 文件(替换之前请自行备份),替换之后加上执行权限。

  •   cp /sbin/hdparm hdparm_v6.6              <-----将hdparm 备份到当前目录

  •   cp -f hdparm /sbin                                <-----用下载的hdparm 替换老版本hdparm (需要按Y确认)

  •   chmod 755 /sbin/hdparm                     <----将hdparm 的权限设为755 (就是-rwxr-xr-x)

  •   hdparm -V                                            <------测试hdparm 是否可执行,查看hdparm 的版本是否替换为新版本(如果不能运行请到http://sourceforge.net/projects/hdparm/files/hdparm/ 下载源码自行编译)

  1.   查看硬盘的状态,X代表sda,sdb,sdc等具体你要操作的硬盘:

  •   hdparm -I /dev/sdX

  •   主要看输出中的Security部份,如果结果中出现“not frozen",那么这个硬盘是可以用ATA Security Erase命令去清除硬盘数据的,(硬盘最好是直接接在主板上,接在SAS卡上,hdparm 会执行失败)

Security: Master password revision code = 65534 supported not     enabled not     locked frozen not     expired: security count supported: enhanced erase 44min for SECURITY ERASE UNIT. 44min for ENHANCED SECURITY ERASE UNIT. 如果结果是“frozen"的,那就需要通过热插拨将硬盘改为not frozen

  1.   给硬盘设置一个密码

  •   hdparm --user-master u --security-set-pass user123 /dev/sdX           <---------user123 是设置的一个密码

  •   如果设置成功,通过hdparm -I /dev/sdX 查看 Security 部份,not enabled 会变为 enabled

  1.   执行ATA Security Erase 命令

  •   hdparm --user-master u --security-erase user123 /dev/sdX

  1.   这样就将硬盘数据全部清空,可以暂时恢复硬盘的写性能。

本文地址:https://www.clrun.com/2013/12/13.html
版权声明:本文为原创文章,版权归 伤脑筋 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?