精华内容
下载资源
问答
  • linux 下开启 trim 功能

    2021-05-10 06:33:27
    linux 下可以通过启用 trim 功能让电脑自动重新生成 freelists 启用 trim 方法 1. 建议使用 ext4 格式 2. 内核必须大于 2.6.28 3.hdparm -I /dev/sda 查询是否支持 * Data Set Management TRIM supported (支持...

    对于 ssd 硬盘,假如长期使用, 并且已经用光磁盘 free lists 中的空间,  都会严重影响磁盘写能力 (就算磁盘空间空闲率为 90%) ,

    注,

    但实际上是由于 ssd 使用 flash 进行数据保存, 每次数据读写过程都需要将曾经使用过的磁盘数据块抹掉后再重写, 出现重复 Io 增加了系统额外资源, 而机械硬盘不需要把数据抹掉而是直接重写,因此,对于需要进行频繁写操作,(OverWrite 操作) 或者没有 freelists 空间的情况而言, Ssd 会发现产生严重的 Io

    1. linux 下可以通过启用 trim 功能让电脑自动重新生成 freelists

    启用 trim 方法

    1. 建议使用 ext4 格式

    2. 内核必须大于 2.6.28

    3.hdparm -I /dev/sda 查询是否支持

    * Data Set Management TRIM supported (支持提示)

    4. fstab 中加入 discard 参数

    /dev/sda1 / ext4 discard,defaults

    5. swap 分区启用方法

    echo 1 > /proc/sys/vm/swappiness

    2. 建议使用 noop 调度算法

    Linux has several different disk schedulers, which are responsible for determining in which order read and write requests to the disk are handled.  Using thenoop scheduler means that Linux will simply handle requests in the order they are received, without giving any consideration to where the data physically resides on the disk.  This is good for solid-state drives because they have no moving parts, and seek times are identical for all sectors on the disk.

    The 2.6 LinuxKernel includes selectable I/O schedulers. They control the way theKernel commits reads and writes to disks – the intention of providing different schedulers is to allow better optimisation for different classes of workload.

    Without an I/O scheduler, the kernel would basically just issue each request to disk in the order that it received them. This could result in massiveHardDisk thrashing: if one process was reading from one part of the disk, and one writing to another, the heads would have to seek back and forth across the disk for every operation. The scheduler’s main goal is to optimise disk access times.

    An I/O scheduler can use the following techniques to improve performance:

    Request merging

    The scheduler merges adjacent requests together to reduce disk seeking

    Elevator

    The scheduler orders requests based on their physical location on the block device, and it basically tries to seek in one direction as much as possible.

    Prioritisation

    The scheduler has complete control over how it prioritises requests, and can do so in a number of ways

    All I/O schedulers should also take into account resource starvation, to ensure requests eventually do get serviced!

    The Schedulers

    There are currently 4 available:

    No-op Scheduler

    Anticipatory IO Scheduler (AS)

    Deadline Scheduler

    Complete Fair Queueing Scheduler (CFQ)

    No-op Scheduler

    This scheduler only implements request merging.

    Anticipatory IO Scheduler

    The anticipatory scheduler is the default scheduler in older 2.6 kernels – if you've not specified one, this is the one that will be loaded. It implements request merging, a one-way elevator, read and write request batching, and attempts some anticipatory reads by holding off a bit after a read batch if it thinks a user is going to ask for more data. It tries to optimise for physical disks by avoiding head movements if possible – one downside to this is that it probably give highly erratic performance on database or storage systems.

    Deadline Scheduler

    The deadline scheduler implements request merging, a one-way elevator, and imposes a deadline on all operations to prevent resource starvation. Because writes return instantly withinLinux, with the actual data being held in cache, the deadline scheduler will also prefer readers – as long as the deadline for a write request hasn't passed. The kernel docs suggest this is the preferred scheduler for database systems, especially if you have TCQ aware disks, or any system with high disk performance.

    Complete Fair Queueing Scheduler (CFQ)

    The complete fair queueing scheduler implements both request merging and the elevator, and attempts to give all users of a particular device the same number of IO requests over a particular time interval. This should make it more efficient for multiuser systems.  It seems that Novel SLES sets cfq as the scheduler by default, as does the latestUbuntu release. As of the 2.6.18 kernel, this is the default schedular in kernel.org releases.

    Changing Schedulers

    The most reliable way to change schedulers is to set the kernel option “elevator” at boot time. You can set it to one of “as”, “cfq”, “deadline” or “noop”, to set the appropriate scheduler.

    It seems under more recent 2.6 kernels (2.6.11, possibly earlier), you can change the scheduler at runtime by echoing the name of the scheduler into/sys/block/$devicename/queue/scheduler, where the device name is the basename of the block device, eg “sda” for/dev/sda.

    Which one should I use?

    I've not personally done any testing on this, so I can't speak from experience yet. The anticipatory scheduler will be the default one for a reason however - it is optimised for the common case. If you've only got single disk systems (ie, no RAID - hardware or software) then this scheduler is probably the right one for you. If it's a multiuser system, you will probably find CFQ or deadline providing better performance, and the numbers seem to back deadline giving the best performance for database systems.

    The noop scheduler has minimal cpu overhead in managing the queues and may be well suited to systems with either low seek times, such as an SSD or systems using a hardware RAID controller, which often has its own IO scheduler designed around the RAID semantics.

    Tuning the I/O schedulers

    The schedulers may have parameters that can be tuned at runtime. Read theLinuxKernel documentation on the schedulers listed in theReferences section below

    More information

    Read the documents mentioned in the References section below, especially theLinuxKernel documentation on the anticipatory and deadline schedulers.

    link from http://www.wlug.org.nz/LinuxIoScheduler

    2. 启用 wiper 工具对 SSD 进行重新清空

    wiper.sh  由 hdparm 工具附带, 但 rhel5,6 都默认不带改工具, 建议重新编译安装

    展开全文
  • 固态硬盘;TRIM 指令;取证分析

    [1]张辉.TRIM指令在固态磁盘数据删除与恢复中的作用[J].电脑知识与技术,2020,16(18):218-220.

    机械硬盘删除数据时,Windows 仅对被删除文件的文件头进行十六进制的改写以标记,完成删除操作后,实际的文件数据依然存在。

    shift+Delete 仅仅会删除 FDT 上的内容。

    一般来讲,针对固态硬盘,数据几乎无法恢复,根本原因在于机械硬盘可以在写入数据时直接覆盖,而固态硬盘则必须针对纯零区域进行写入。

    TRIM (Disable Delete Notify, 禁用删除通知),SSD 盘支持 TRIM 指令,就会在删除数据时标记数据已删除,然后在数据搬运均衡负载时不会将标记数据移动,在空闲时擦除数据,从而起到延长 SSD 寿命的作用。在没有 Trim 的情况下,SSD 无法事先知道那些被‘删除’的数据页已经是‘无效’的,必须到系统要求在相同的地方写入数据时才知道那些数据可以被擦除(硬盘降速),这样就无法在最适当的时机做出最好的优化,既影响 GC 的效率(间接影响性能),又影响 SSD 的寿命。

    查看 TRIM 状态。
    fsutil behavior query disabledeletenotify NTFS

    • 0:【默认】,完犊子,很可能立刻会执行 TRIM 擦除。
    • 1:,还有一线生机,当数据要写入标记删除位置时,原来数据会被擦除而无法恢复,看删除时间间隔。

    fsutil behavior set disabledeletenotify 0 : 开启 TRIM,默认数据无法恢复,执行 TRIM 擦除(非立刻,在空闲时完成数据擦除操作,决定权在固态硬盘主控)。
    fsutil behavior set disabledeletenotify 1 : 关闭 TRIM,等到写入时才发现需要擦除再写,SSD 降速。

    不论 TRIM 开启与否,固态硬盘在删除数据的一瞬间,数据均不会立马物理消失,只是当开启 TRIM 后,物理消失的时间可能来的更快一些。
    机械硬盘只有大数据覆盖才能够有效的擦写数据。

    展开全文
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼1)Trim的作用原本在机械硬盘上,写入数据时,Windows会通知硬盘先将以前的擦除,再将新的数据写入到磁盘中。而在删除数据时,Windows只会在此处做个标记,说明这里应该是...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    1)Trim的作用

    原本在机械硬盘上,写入数据时,Windows会通知硬盘先将以前的擦除,

    再将新的数据写入到磁盘中。而在删除数据时,Windows只会在此处做

    个标记,说明这里应该是没有东西了,等到真正要写入数据时再来真正

    删除,并且做标记这个动作会保留在磁盘缓存中,等到磁盘空闲时再执行。

    这样一来,磁盘需要更多的时间来执行以上操作,速度当然会慢下来。

    而当Windows识别到SSD并确认SSD支持Trim后,在删除数据时,会不

    向硬盘通知删除指令,只使用Volume Bitmap来记住这里的数据已经删除。

    Volume Bitmap只是一个磁盘快照,其建立速度比直接读写硬盘去标记删

    除区域要快得多。这一步就已经省下一大笔时间了。然后再是写入数据的

    时候,由于NAND 闪存保存数据是纯粹的数字形式,因此可以直接根据

    Volume Bitmap的情况,向快照中已删除的区块写入新的数据,而不用花

    时间去擦除原本的数据。

    以上就是Trim的原理以及真正作用。

    注意:如果SSD组RAID0后,将失去Trim功能

    2)网上常见的方法是在挂载SSD分区时加(/etc/fstab)入discard参数,

    但是有人的观点是这样做对大多数SSD来说并不是一个好方法,这里介绍

    另一种方法——通过cron的daily任务来实现。下面介绍过程,非常简单

    A)确定内核版本在2.6.33以上(archlinux保持更新的话无需关心这一点)

    B)确保SSD支持TRIM,方法为终端运行:

    sudo hdparm -I /dev/sda | grep "TRIM supported"

    查看输出是否有TRIM supported字样(上面命令中sda根据实际情况进行替换)

    C)确保分区是btrfs或者ext4

    D)在/etc/cron.daily/下添加一个文本文件,这里就叫做trim,然后用编辑器

    (sudo)打开,输入下面内容:

    #!/bin/sh

    LOG=/var/log/trim.log

    echo "*** $(date -R) ***" >> $LOG

    fstrim -v / >> $LOG

    fstrim -v /home >> $LOG

    保存退出。最后两行是核心命令,这里举的例子适用于“/”和“/home”独立分区

    并挂载SSD的情形,实际情况因人而异,须做相应调整。

    你可以先在终端运行

    sudo fstrim -v /

    来查看fstrim是否可以正常运行,输出应该类似于:

    /: 8158715904 bytes were trimmed

    E)给/etc/cron.daily/trim增加可执行权限:

    sudo chmod +x /etc/cron.daily/trim

    F)这样就可以保持trim始终在后台运行了(当然你需要crond的后台进程)

    备注:我没有SSD,所以无法在这里做小白鼠,如果你希望提升SSD运行的性能,

    可以参考本贴的内容。

    展开全文
  • 昨天对新Nexus 7的评测中我们就已经说过,安卓4.3开启了fstrim——其实就是我们常说的TRIM,只不过后者是Windows系统的,它则是Linux系统的。它们的原理是相同的:在主控和闪存之间建立一个通信通道,操作系统籍此...

    接触固态硬盘的应该都会关心耐用性、寿命这样的指标,这源于闪存存储的特质。现代智能手机、平板机使用的基本也是闪存,但因为日常负载都是轻量级的,所以很少碰到类似问题,但也有例外。

    Nexus 7(旧版)就是比较突出的一个,它本身的存储I/O性能就不太够,影响系统流畅性,特别是随着时间的流逝、应用的增多,很容易会变得非常慢,大大影响了人们对这款平板的评价。

    新版的Nexus 7大大提升了存储性能,而且借助新的安卓4.3,耐用性问题也得到了解决。事实上,所有的Nexus设备都能享受这种福利!

    昨天对新Nexus 7的评测中我们就已经说过,安卓4.3开启了fstrim——其实就是我们常说的TRIM,只不过后者是Windows系统的,它则是Linux系统的。它们的原理是相同的:在主控和闪存之间建立一个通信通道,操作系统籍此告知SSD/eMMC主控某些闪存区块已经不再使用,无需继续追踪,可以执行垃圾回收了。

    这对维持闪存存储长时间性能稳定是至关重要的。要知道,在闪存设备上删除软件的时候,执行的只是一个软件标记,让用户看起来空间释放了,但物理存储并未发生变化,在主控看来响应的区块还在使用中,仍旧有正常数据。

    比如说,你向手机存储中拷贝了一部3GB的电影,看完了删了,3GB空间看起来解放了,但在你重新向这些区块写入数据之前,在主控眼里,电影还在那儿。

    安卓4.3对此是这么处理的:系统框架发出一个“start idle maintenance window”(开始空闲维护窗口)的事件,MountService系统服务接听到之后,便通过磁盘管理进程vold联系fstrim文件系统,执行清理。

    不过这一系列操作是需要满足一定前提条件才会触发的:设备未使用超过一个小时、过往24小时没有空闲维护窗口事件、电池剩余电量不低于80%、设备正在充电且电量不低于30%。

    如果你习惯每天晚上插上充电,fstrim会大概每24小时执行一次。

    验证fstrim是否工作也很简单,只要在ADB中执行以下命令:

    adb logcat -d | grep -i fstrim

    下边就是输出示例(系统都是4.3):

    Nexus 7 (2013):

    ┌─[brianklug@MBP] - [~/Downloads/APKs] - [Mon Jul 29, 03:30]

    └─[$] <> ./adb  logcat -d | grep -i fstrim

    I/fstrim  (  172): Starting fstrim work...

    I/fstrim  (  172): Invoking FITRIM ioctl on /cache

    I/fstrim  (  172): Trimmed 564789248 bytes on /cache

    I/fstrim  (  172): Invoking FITRIM ioctl on /data

    I/fstrim  (  172): Trimmed 25105637376 bytes on /data

    I/fstrim  (  172): Invoking FITRIM ioctl on /persist

    I/fstrim  (  172): Trimmed 0 bytes on /persist

    I/fstrim  (  172): Finished fstrim work.

    I/fstrim  (  172): Starting fstrim work...

    I/fstrim  (  172): Invoking FITRIM ioctl on /cache

    I/fstrim  (  172): Trimmed 0 bytes on /cache

    I/fstrim  (  172): Invoking FITRIM ioctl on /data

    I/fstrim  (  172): Trimmed 1045696512 bytes on /data

    I/fstrim  (  172): Invoking FITRIM ioctl on /persist

    I/fstrim  (  172): Trimmed 0 bytes on /persist

    I/fstrim  (  172): Finished fstrim work.

    Nexus 7 (2012):

    ┌─[brianklug@MBP] - [~/Downloads/APKs] - [Mon Jul 29, 03:46]

    └─[$] <> ./adb  logcat -d | grep -i fstrim

    I/fstrim  (  122): Starting fstrim work...

    I/fstrim  (  122): Invoking FITRIM ioctl on /cache

    I/fstrim  (  122): Trimmed 122961920 bytes on /cache

    I/fstrim  (  122): Invoking FITRIM ioctl on /data

    I/fstrim  (  122): Trimmed 1087574016 bytes on /data

    E/fstrim  (  122): Cannot stat mount point /radio

    I/fstrim  (  122): Finished fstrim work.

    I/fstrim  (  122): Starting fstrim work...

    I/fstrim  (  122): Invoking FITRIM ioctl on /cache

    I/fstrim  (  122): Trimmed 118923264 bytes on /cache

    I/fstrim  (  122): Invoking FITRIM ioctl on /data

    I/fstrim  (  122): Trimmed 782077952 bytes on /data

    E/fstrim  (  122): Cannot stat mount point /radio

    I/fstrim  (  122): Finished fstrim work.

    Nexus 4:

    ┌─[brianklug@MBP] - [~/Downloads/APKs] - [Mon Jul 29, 03:47]

    └─[$] <> ./adb  logcat -d | grep -i fstrim

    - waiting for device -

    I/fstrim  (  169): Starting fstrim work...

    I/fstrim  (  169): Invoking FITRIM ioctl on /cache

    I/fstrim  (  169): Trimmed 115343360 bytes on /cache

    I/fstrim  (  169): Invoking FITRIM ioctl on /data

    I/fstrim  (  169): Trimmed 888254464 bytes on /data

    I/fstrim  (  169): Invoking FITRIM ioctl on /persist

    I/fstrim  (  169): Trimmed 0 bytes on /persist

    I/fstrim  (  169): Finished fstrim work.

    I/fstrim  (  169): Starting fstrim work...

    I/fstrim  (  169): Invoking FITRIM ioctl on /cache

    I/fstrim  (  169): Trimmed 113246208 bytes on /cache

    I/fstrim  (  169): Invoking FITRIM ioctl on /data

    I/fstrim  (  169): Trimmed 1431195648 bytes on /data

    I/fstrim  (  169): Invoking FITRIM ioctl on /persist

    I/fstrim  (  169): Trimmed 0 bytes on /persist

    I/fstrim  (  169): Finished fstrim work.

    如果你的设备经历着性能倒退的问题,升级到4.3之后让sftrim工作几次应该就能满血复活了。至于究竟能恢复多少,请等测试。

    4354e83afb4918a98fbfabcf82918449.gif

    展开全文
  • 如 果你要问当前PC最大的性能瓶颈是什么,大多数资深玩家会告诉你是存储系统。若你要问如何弥补这个...其实不然,玩 家们纠结的其实是一个叫trim的技术……相 信玩家们对Trim都不陌生了,虽然它是一项诞生不到三年...
  • echo DEVICE /dev/sd{b,c,d} >> /etc/mdadm.conf echo DEVICE /dev/sd{e,f} >> /etc/mdadm.conf mdadm -Evs >> /etc/mdadm.conf 然后格式化、写入挂载信息、挂载 开启trim和定期指定trim: fstrim --verbose --all ...
  • 打开StringUtils类的源码定位到方法trim,相信绝大多数程序猿都使用过这个方法,因为它太过平常,所以大家可能没有留意其内部实现,一下是方法代码:public static String trim(String str) {ret...
  • TRIMcheck帮你查看TRIM指令是否生效2013年02月26日 00:09作者:bolvar编辑:汤炜炜分享泡泡网固态硬盘SSD频道2月26日越来越多的玩家已经开始用上了SSD固态硬盘,也感受到了开机如飞的感觉了吧,不过因为使用原理的...
  • 拼 命 加 载 中 ...越来越多的玩家已经开始用上了SSD固态硬盘,也感受到了开机如飞的感觉了吧,不过因为使用原理的不同,SSD依然有一些问题很烦人,比如P/...用户可以自行检查TRIM指令开启与否,打开CMD窗口定位到“...
  • ” 经过众多资料的洗礼,我发现TRIM仿佛并非有想像中那么好,因为开启TRIM功能后,每次删除文件是真正的删除,SSD就可能去回收那些垃圾块,会降低SSD的性能! 解决之法是定时TRIM,而Systemd管理的Linux系统中都有一...
  • 【转载】在linux下开启TRIM对SSD性能优化(通过cron的daily任务来实现)(2014-03-28 20:50:52)标签:it1)Trim的作用原本在机械硬盘上,写入数据时,Windows会通知硬盘先将以前的擦除,再将新的数据写入到磁盘中。...
  • 玩转SSD中的TRIM技术

    2021-06-24 12:39:32
    这其实是TRIM的功劳,你了解它吗?高效SSD必备技术我们在使用普通HDD时Windows会自动在一定时间段去整理磁盘碎片,但如果你的SSD支持TRIM的话是无需碎片整理的。现在的硬盘厂商早已对SSD固件算法做了优化,并且提供...
  • TRIM回收指令

    2021-11-30 13:29:17
    机械硬盘存储新数据只是在原有数据(以此8x8表格为例)上覆盖,并不会先清零再覆盖; 而固态硬盘必须先清零再覆盖,因此磁盘恢复数据只适用于机械硬盘 因此,固态硬盘在某一区域写入新数据时,...如图:0表示打开 TRIM
  • PHP的Trim截取乱码

    2021-04-06 08:02:18
    一直使用Trim过滤首尾两端的字符串,关于Trim的官方描述:trim—去除字符串首尾处的空白字符(或者其他字符)今天发现一个很奇怪的问题, 代码如下:$str='研发、产品、';echotrim($str,'、');猜下这个会返回什么?...
  • Mac SSD TRIM的终极方案

    2021-03-13 09:57:34
    该方法在 Mac 10.9.1 版本上面有效。...试了多种打开SSD TRIM的教程,总不能成功,有一次还弄到系统无法启动。今天大盘开始盘整了,于是可以静下心来把那些教程仔细debug一遍,发现了问题所在,成功开启了SSD...
  • TRIM功能在RAID 0模式下的验证之一Intel已经实现了Win7系统下的7系芯片组RAID 0模式下的TRIM功能支持,但是有两个前提,首先是Optional ROM SATA(OROM)控制器BIOS版本要高于11.0,第二个则是RST驱动版本高于11.2...
  • 最近有一个朋友无意间吐槽他的固态硬盘有了比较明显的掉速现象,小编问他是否执行过TRIM指令或使用相关软件缓解这一情况,他表示只管用从来没有顾忌过这些,实在不行就只有申请质保了。其实这是完全没有必要的。下面...
  • TRIM_UNUSED_KSYMS 和 ko 导出符号解耦 背景介绍 随着内核代码越来越多,导致内核的体积也开始增长起来。TRIM_UNUSED_KSYMS 宏控可以一定程度上减小内核体积,主要是通过对内核中一些用不到的符号进行裁剪。 裁剪...
  • TRIM 是一个设备软件与板载存储间的沟通渠道,有了 TRIM 软件就会知道什么时候存储区块正在闲置并且可以做垃圾回收处理。对硬件工作原理比较清楚的读者应该知道,当你在设备中“删除”一个文件时,文件并没有从存储...
  • 关于RAID 0模式下TRIM支持一事,Intel此前的说法是RST 11.X版本的驱动都支持这一功能了,不过目前只限于7系主板和Win7系统,言外之意就是6系主板不支持RAID 0模式下的TRIM功能,不过Anandtech论坛有用户验证了6系...
  • 在 Excel 中,Trim函数用于去文本的前后空格和字符之间的空格,但在去字符之间的空格时,它不会把所有空格都去除,而是留下一个空格;如果要把字符之间的所有空格都去掉,需要用Substitute函数。在 Excel 去空格时,...
  • /** 4,模拟一个trim功能一致的方法。去除字符串两端的空白* 思路:* 1,定义两个变量。* 一个变量作为从头开始判断字符串空格的角标。不断++。* 一个变量作为从尾开始判断字符串空格的角标。不断--。* 2,判断到不是...
  • 因为之前一个移动硬盘因为坏道蔓延导致没办法继续使用,我略冲动地跑去买了一块 120GB ...在买固态硬盘前我是做了些功课的,了解到要使固态硬盘发挥出它应有的性能以及延长它的寿命,需要对它进行 4K 对齐并且开启 T...
  • TRIM的命令是允许操作系统传播信息向下到SSD哪些数据块已不再使用的操作。 这允许SSD的内部系统更好地管理耗损均衡并为将来的写入准备设备。 TRIM可以对设备的性能随时间和其整体寿命具有重大影响。虽然可以在Linux...
  • 在 Excel 中,Trim函数用于去掉字符前后和字符之间的空格;当用于去掉字符前后空格时,只要是正常的空格,不管有多少个都能去掉,但用于去掉字符之间的空格时,会留下一个空格,不管字符是汉字还是英文。Trim函数...
  • 在 Excel 中,Trim函数用于去掉字符前后和字符之间的空格;当用于去掉字符前后空格时,只要是正常的空格,不管有多少个都能去掉,但用于去掉字符之间的空格时,会留下一个空格,不管字符是汉字还是英文。Trim函数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 96,124
精华内容 38,449
关键字:

trim开启