首页 >>  正文

trim是什么命令

来源:baiyundou.net   日期:2024-09-21

作者:sfezen

今年SSD降幅明显,相信站内很多朋友都买了SSD固态硬盘,笔者也分别入手了京造、移速的固态硬盘。虽然两者都是京东自营并负责售后,不过谁也不想硬盘在毫无预期的时候突然挂掉,笔者挂在锐角云上的某讯H1硬盘因突然跳电导致敲盘,恢复docker配置、虚拟机花费了大半天时间。

TRIM不仅可以延长 SSD 的使用寿命,还可以提高读写速度,但仍需要注意:TRIM涉及到数据安全!!!所以建议各位观众姥爷们切勿在正式环境上盲目启用!

先说结论:想要开启TRIM功能需要软硬件同时支持,目前市面上绝大多数硬件都已支持TRIM,但USB移动硬盘固件支持较弱。

  • 我的硬件支持TRIM吗?

1. SSD固态硬盘首先要支持TRIM,一般较新的SSD都支持,可以使用查看CrystalDiskInfo查看

2. 如果你的SSD是使用硬盘盒的方式接入主机USB,那么移动硬盘盒的主控芯片是否支持TRIM成为关键的影响因素!当然如果你是直接接在主板的M.2或SATA接口上,就免去了这部分烦恼!

关于某一型号的硬盘盒或者某一主控是否支持TRIM,各家都众说纷纭,究其原因笔者理解为:TRIM这项技术并未被厂商作为主要卖点;同一主控芯片也存在不同厂商不同固件,所以我们的测试就像盲人摸象,得出来的结论自然也是大相径庭,这里也希望硬盘盒厂商能重视这一点。

有请正方一辩:

有请反方一辩:

支不支持首先看主控芯片,这里可以通过芯片厂商的官网查询,其次看硬盘盒厂家固件,可以通过询问客服或技术人员索取固件。目前市面上的绝大多数主控都支持TRIM,但硬盘盒固件支持较弱!

  • 我的系统支持TRIM吗?

系统也需要支持TRIM,笔者查阅资料发现,Windows阵营从Win7系统开始便已支持TRIM,不需要特殊操作。这点给巨硬点赞!

fsutil behavior query DisableDeleteNotify

再看Linux这边对于TRIM支持相对比较保守,虽然在2008年内核已支持TRIM,但应用较少,毕竟服务器的稳定性高于一切,通过磁盘阵列等方式可以弥补机械硬盘的速度短板,对于商用而言机械硬盘依然是首选,再加上TRIM对RAID的影响。但是TRIM非常适用我们个人的应用场景,比如系统中的缓存文件以及各种小文件。因为我们的固态硬盘通常不会写满,TRIM能大大提高固态硬盘的工作效率。

Linux下如何查询TRIM支持(笔者这里使用debian10作为演示,硬盘盒为绿联,设备路径为/dev/sda

安装必要软件

apt install sg3-utils hdparm -y

查看设备

lsusb

df -h查看设备路径

运行命令:

hdparm -I /dev/sda | grep TRIM

注意命令中 /dev/sda 需要改成你自己的设备路径

第二种方式:

lsblk --discard

当然还有第三种判断方法,直接运行命令手动执行裁剪,看看SSD是否在其中

fstrim -a -v

  • USB固态硬盘可能出现的问题

笔者使用的绿联在3项测试中仅通过第1种测试,到底是支持还是不支持呢?

经过学习终于在ArchWiki中找到了答案:

一些USB转SATA芯片(如VL715、VL716等)以及在外接NVMe硬盘盒(如IB-1817M-C31[失效链接 2022-09-23 ]))中使用的USB转PCIe芯片(如 智微(JMicron) JMS583 )支持类似TRIM的命令,这些命令可通过 USB Attached SCSI 驱动程序(在Linux下称为"uas")发送。

首先运行

sg_readcap -l /dev/sda

如果有Logical block provisioning: lbpme=0这一行,继续执行

sg_vpd -a /dev/sda

设备支持UNMAP,只需要在对应的provisioning_mode中添加unmap参数即可

echo "unmap" >/sys/block/sda/device/scsi_disk/*/provisioning_mode

通过添加udev配置文件实现该设备自动配置

nano /etc/udev/rules.d/99-sata-adapter-trim-enable.rules

添加以下文件,使用lsusb命令查看设备PID VID,修改对应的ID

ACTION=="add|change", ATTRS{idVendor}=="174c", ATTRS{idProduct}=="225c", SUBSYSTEM=="scsi_disk", ATTR{provisioning_mode}="unmap"

这样内核便自动检测到并启用UAS,再次测试这次3项全部通过。

  • 软硬件均支持TRIM,如何才能启用TRIM?

开启TRIM有两种方式:Continuous TRIM和Periodic TRIM

Continuous TRIM即通过修改/etc/fstab中硬盘的挂载参数加入discard以实现每次在文件被删除后就立即执行TRIM指令,由于Continuous TRIM会拖慢系统,并且有可能导致的数据损坏,目前已不推荐这种方式。

btrfs分区支持ssd这个参数,但ext4并不支持该参数,所以挂载时注意分区格式,建议加入nofail参数以免因挂载失败导致系统无法启动。

Periodic TRIM则是定期在支持TRIM的设备上执行修剪,更推荐这种方式。

启动命令

systemctl enable fstrim.timer

systemctl start fstrim.timer

systemctl status fstrim.timer

至此,配置TRIM的相关步骤就结束了,在此感谢各位观众姥爷们的点赞、评论、打赏!希望本文能给各位带来帮助!

恰逢双十一,笔者这里也推荐几款固态硬盘给各位观众姥爷们:

首先是本次使用的绿联硬盘盒,笔者到手的主控是ASM2235,没有难为我去刷固件

笔者购买的原因主要是:京东自营并提供5年质保,目前用于OMV中替换坏了的H1

京造的这块硬盘目前在挂某PCDN,自营售后没毛病

再推荐下笔者双十一准备购买的两款 

本文参考:

Solid state drive (简体中文) - ArchWiki (archlinux.org)

Fix SSD TRIM on UGREEN UASP USB SATA adapter/enclosure - DEV Community

LemonTeaTT https://www.bilibili.com/read/cv16918890/

","force_purephv":"0","gnid":"94d46333ab0096f8f","img_data":[{"flag":2,"img":[{"desc":"","height":"616","title":"","url":"https://p0.ssl.img.360kuai.com/t014ad557fd5d1baf8e.jpg","width":"600"},{"desc":"","height":"568","title":"","url":"https://p0.ssl.img.360kuai.com/t019c2fb27f1d54efce.jpg","width":"600"},{"desc":"","height":"195","title":"","url":"https://p0.ssl.img.360kuai.com/t01d9ef865d3de11c34.jpg","width":"600"},{"desc":"","height":"291","title":"","url":"https://p0.ssl.img.360kuai.com/t01ebc7e2c383947c40.jpg","width":"600"},{"desc":"","height":"139","title":"","url":"https://p0.ssl.img.360kuai.com/t0174bc374e661052db.jpg","width":"464"},{"desc":"","height":"174","title":"","url":"https://p0.ssl.img.360kuai.com/t014c345750e7598915.jpg","width":"600"},{"desc":"","height":"336","title":"","url":"https://p0.ssl.img.360kuai.com/t016a028c67e98f6eec.jpg","width":"600"},{"desc":"","height":"95","title":"","url":"https://p0.ssl.img.360kuai.com/t018c7b85da1d059b60.jpg","width":"600"},{"desc":"","height":"186","title":"","url":"https://p0.ssl.img.360kuai.com/t01c5fbd2c8e4897d77.jpg","width":"596"},{"desc":"","height":"158","title":"","url":"https://p0.ssl.img.360kuai.com/t012117987f5f42cd83.jpg","width":"495"},{"desc":"","height":"184","title":"","url":"https://p0.ssl.img.360kuai.com/t01cbac7e52a4906a1e.jpg","width":"600"},{"desc":"","height":"154","title":"","url":"https://p0.ssl.img.360kuai.com/t01b28dfa811824332f.jpg","width":"585"},{"desc":"","height":"165","title":"","url":"https://p0.ssl.img.360kuai.com/t015986d9088fd5784d.jpg","width":"600"},{"desc":"","height":"202","title":"","url":"https://p0.ssl.img.360kuai.com/t01b500a5055d16239e.jpg","width":"600"},{"desc":"","height":"142","title":"","url":"https://p0.ssl.img.360kuai.com/t01f77a0bd0140d3fdb.jpg","width":"600"}]}],"original":0,"pat":"art_src_1,sexf,sex2,sexc,disu_label,fts0,sts0","powerby":"hbase","pub_time":1668044665000,"pure":"","rawurl":"http://zm.news.so.com/268074fbed261a8214b3715bce78f6f6","redirect":0,"rptid":"cd0bbf37159c3a72","s":"t","src":"什么值得买","tag":[{"clk":"kdigital_1:sata","k":"sata","u":""},{"clk":"kdigital_1:硬盘","k":"硬盘","u":""},{"clk":"kdigital_1:固态硬盘","k":"固态硬盘","u":""}],"title":"如何延长SSD寿命提高读写速度?固态硬盘TRIM开启指南

巫洪到1350ssd垃圾收集都去除什么类型垃圾?“TRIM指令:告诉SSD哪些数据是无效的”怎么理解?每天上网垃圾算不算?
吉花瑶19485786620 ______ 首先要强调,硬盘中的数据在你删除之后实际上还是存在这的,无论是HDD还是SSD都是这样. 区别在于HDD可以在进行写入时直接将之前的数据覆盖来达到擦除效果,SSD却必须进行擦除之后才能开始写入数据. 但是SSD在写入数据时,是按照区块来的进行的(擦除也是一种写入操作),如果在写入之前在区块里有数据,就需要进行擦除操作,这就占用了一定的时间,表现出来的就是写入速度下降. TRIM指令就是标记之前删除的数据区,在SSD空闲时将其擦除,并且指引SSD向之前已经擦除好的区块直接写入. 此时的垃圾是指已经删除,却没有在硬盘上擦除的数据.

巫洪到1350java中trim()方法是用来干什么的? -
吉花瑶19485786620 ______ trim()方法可以将调用字符串对象的一个副本返回,同时zhidao删除所有起始和结尾的空格.1. 定义和用法$.trim() 函数用于去除字符串两端的空白字符.注意:$.trim()函数会移除字符串开始和末尾处的所有换行符,回空格(包括连续的空格)和制表符.如果这些空白字符在字符串中间时,它们将被保留,答不会被移除.2.语法$.trim( str )3.例子 这个函数的功能就是去除一个字符串两边的空格.Strng str = " abc " ; String newStr = str.trim() ; //此时newStr = "abc" ;

巫洪到1350天正建筑常用的快捷键命令有哪些? -
吉花瑶19485786620 ______ L, *LINE(直线) XL, *XLINE(射线) PL, *PLINE(多段线) ML, *MLINE(多线) SPL, *SPLINE(样条曲线) POL, *POLYGON(正多边形) REC, *RECTANGLE(矩形) C, *CIRCLE(圆) A, *ARC(圆弧) DO, *DONUT(圆环) EL, *...

巫洪到1350string的Trim()方法是做什么的? -
吉花瑶19485786620 ______ Java String.trim()方法用法实例教程,该方法返回一个复制该字符串的开头和结尾的白色空格去掉,或字符串,如果它没有头或尾空白. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 packagecom.yiibai; importjava.lang.*; ...

巫洪到1350fortran语句 open(unit = 10,file = trim(output - file),status = 'unknown')中trim是什么意思 -
吉花瑶19485786620 ______ trim 就是去掉字符串后面的空格.如果 output_file = 'abcdef.txt '那么 trim 后就是 '...

巫洪到1350TRIM(修剪)命令的快速剪切技巧?
吉花瑶19485786620 ______ 回复:最初由 秋枫 发布F指fence选择模式.拉出来的线碰到物体时相当于鼠标以碰到点选中物体.对于裁剪多条线很有用. 对,Fence 选择的方式,不仅在Trim 时有用,凡在选择多个物体的命令中都有用,很方便!

巫洪到1350C#中的String.Trim()的功能是什么? -
吉花瑶19485786620 ______ String.Trim(Char[])如下,无参数的Trim方法相当于参数是空格: 从当前 String 对象移除数组中指定的一组字符的所有前导匹配项和尾部匹配项. 命名空间: System 程序集: mscorlib(在 mscorlib.dll 中) 语法 Visual Basic(声明) Public ...

巫洪到1350CAD中的 “LTMITS”命令的作用是什么 -
吉花瑶19485786620 ______ 界限设置的大小,跟你做图的尺寸有关啊,比如一个零件长10mm,另一个零件长100mm,你设置界限的时候肯定就不能一样,以能放下这个零件为准.当然,这只是打个比方,与你想出图的图幅也有关系的.这是图形界限命令,主要用于设置绘图区域的大小 ,其实实际应用时,很少用到. 我做了几年的图了,一次也没用过.可能新手会用到吧,因为新手不能确定自己做图的界

巫洪到1350trim() 是什么意思? -
吉花瑶19485786620 ______ 这是一个很常见的函数,他的所用是去掉字符序列左边和右边的空格,如字符串 str = " ai lafu yo "; str = trim(str); cout << str; 输出的将是"ai lafu yo" 中间的空格他不管,如果字符串中没有任何非空格字符,如" ",那么trim(str)后的结果就是"" 明白了吗

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024