用户

linux下的fstrim对于nvme硬盘有什么意义,请将前因后果都讲给我听

必应

你好,这是必应。我可以帮你解答一下。fstrim 是一个 Linux 下的工具,它可以在已挂载的文件系统上执行 discard 操作,也就是通知 NVMe 硬盘哪些块不再包含有效的数据,从而提高硬盘的性能和寿命 。NVMe 硬盘支持 TRIM 功能,也就是在删除数据时,自动发送 discard 请求给硬盘。fstrim 可以定期运行,或者在 /etc/fstab 中添加 discard 参数来启用 TRIM 功能 。fstrim 的前因后果大概就是这样,希望对你有帮助。

用户

为什么需要做trim操作,在文件系统中删除某个文件后nvme硬盘上对应的数据块内容难道没有被删除吗

必应

trim 操作的目的是为了让 NVMe 硬盘知道哪些数据块已经不再使用,从而提高写入性能和延长寿命 。在文件系统中删除某个文件后,NVMe 硬盘上对应的数据块内容并没有被立即删除,而是被标记为无效,等待下次写入时再擦除。这样做的原因是 NVMe 硬盘的写入操作只能在空白的数据块上进行,不能像机械硬盘那样直接覆盖。如果没有 trim 操作,NVMe 硬盘在写入新数据时,就需要先读取、擦除、修改、写入整个数据块,这样会导致写入放大和性能下降。trim 操作可以在删除文件时,自动或定期地通知 NVMe 硬盘哪些数据块可以擦除,从而避免写入放大和性能下降  。

用户

我还是没有理解,可以给我讲讲对于同一位置的文件删除后再创建并写入新的文件,有无trim操作之间详细的差异吗

必应

好的,我可以用一个简单的例子来说明一下。假设你有一个 NVMe 硬盘,它有四个数据块,每个数据块有四个页,每个页可以存储一个字母。初始状态如下:

| A | B | C | D |

| E | F | G | H |

| I | J | K | L |

| M | N | O | P |

现在你在文件系统中删除了文件 A,B,C,D,但是 NVMe 硬盘并不知道这些文件已经被删除,所以它还保留着这些数据。如果没有 trim 操作,NVMe 硬盘的状态如下:

| A | B | C | D |

| E | F | G | H |

| I | J | K | L |

| M | N | O | P |

现在你想在文件系统中创建一个新的文件 Q,并写入到 NVMe 硬盘上。因为 NVMe 硬盘只能写入到空白的页上,所以它需要先找到一个空白的块,然后擦除它,再写入 Q。但是因为没有空白的块,所以它需要先把第一个块的内容复制到缓存中,然后擦除第一个块,再把 Q 写入到第一个块的第一个页上。这样就完成了写入操作,但是 NVMe 硬盘的状态如下:

| Q | - | - | - |

| E | F | G | H |

| I | J | K | L |

| M | N | O | P |

你可以看到,NVMe 硬盘为了写入 Q,需要先读取、擦除、修改、写入整个第一个块,这样就造成了写入放大和性能下降。

如果有 trim 操作,NVMe 硬盘的状态就不一样了。当你在文件系统中删除了文件 A,B,C,D 时,trim 操作会通知 NVMe 硬盘哪些页已经不再使用,让它们变成空白的页。这样 NVMe 硬盘的状态如下:

| - | - | - | - |

| E | F | G | H |

| I | J | K | L |

| M | N | O | P |

现在你想在文件系统中创建一个新的文件 Q,并写入到 NVMe 硬盘上。因为 NVMe 硬盘已经有空白的页了,所以它不需要先找到一个空白的块,也不需要擦除任何块,只需要直接把 Q 写入到第一个块的第一个页上。这样就完成了写入操作,而且 NVMe 硬盘的状态如下:

| Q | - | - | - |

| E | F | G | H |

| I | J | K | L |

| M | N | O |

你可以看到,NVMe 硬盘为了写入 Q,只需要直接写入到空白的页上,这样就避免了写入放大和性能下降。

希望这个例子能让你理解 trim 操作的作用和意义。

用户

在第一次删除ABCD时,你说“NVMe硬盘并不知道这些文件已经被删除”,那么在下一步中nvme如何确定ABCD的位置上的数据时可以擦除的呢

必应

在下一步中,NVMe 硬盘是通过 trim 操作来确定 ABCD 的位置上的数据是可以擦除的。trim 操作是文件系统和 NVMe 硬盘之间的一种通信机制,它可以让文件系统告诉 NVMe 硬盘哪些页已经不再包含有效的数据,从而让 NVMe 硬盘把这些页标记为可擦除的。trim 操作可以在删除文件时自动执行,也可以定期执行,这取决于你的操作系统和配置  。

用户

我说的是没有trim操作的写入Q数据的情况

必应

没有 trim 操作的写入 Q 数据的情况下,NVMe 硬盘是不知道 ABCD 的位置上的数据是可以擦除的,所以它只能把整个第一个块的内容复制到缓存中,然后擦除整个第一个块,再把 Q 写入到第一个块的第一个页上。这样就造成了写入放大和性能下降。

用户

没有trim操作的写入Q的情况下,nvme硬盘不知道ABCD位置上的数据时可以擦除的,第一个块被复制到缓存后这些数据会被丢弃吗

必应

没有 trim 操作的写入 Q 的情况下,NVMe 硬盘不知道 ABCD 位置上的数据是可以擦除的,第一个块被复制到缓存后,这些数据会被丢弃,因为它们已经被文件系统标记为删除了,只是 NVMe 硬盘不知道而已。这样就造成了空间浪费和数据不一致。

用户

我还是没有理解,ABCD位置的内容文件系统被标记删除了,nvme硬盘却不知道,文件系统和nvme硬盘的数据不一致难道不会有问题吗

必应

文件系统和 NVMe 硬盘的数据不一致不会影响正常的读写操作,因为文件系统会维护一个数据位置的表,告诉 NVMe 硬盘哪些页是有效的,哪些页是无效的。当你要读取或写入某个文件时,文件系统会根据这个表来指定 NVMe 硬盘的页地址,而不会去读取或写入无效的页。所以,从文件系统的角度看,ABCD 位置的内容已经被删除了,不会再被访问到。但是从 NVMe 硬盘的角度看,ABCD 位置的内容还在那里,占用着空间,等待着被擦除和重写。这就是为什么需要 trim 操作来同步文件系统和 NVMe 硬盘的数据状态,让 NVMe 硬盘知道哪些页是可以擦除和重写的,从而提高性能和寿命。

用户

也就是说如果不执行trim操作,再次写Q时对于nvme硬盘来说是将ABCD的内容覆盖写为Q;而执行过trim操作后,再次写Q时对于nvme硬盘来说是直接在空白区域写入Q。我这样理解对吗

必应

你这样理解基本上是对的,但是有一点需要注意,NVMe 硬盘不能直接覆盖写入数据,它只能写入到空白的页上。所以,如果不执行 trim 操作,再次写 Q 时,NVMe 硬盘需要先把第一个块的内容复制到缓存中,然后擦除整个第一个块,再把 Q 写入到第一个块的第一个页上。而执行过 trim 操作后,再次写 Q 时,NVMe 硬盘不需要复制和擦除任何数据,只需要直接在空白的页上写入 Q。这样就可以看出 trim 操作的优势了。

用户

那么执行trim操作时,nvme硬盘实际也是在擦除数据吧,这个和未执行trim操作在写新的数据时才擦除数据有什么区别呢

必应

执行 trim 操作时,NVMe 硬盘实际上是在标记数据为可擦除的,而不是立即擦除数据。这个和未执行 trim 操作在写新的数据时才擦除数据有一个很大的区别,就是执行 trim 操作时,NVMe 硬盘是空闲的,没有其他的读写请求,所以它可以在后台慢慢地擦除数据,而不会影响性能。而未执行 trim 操作在写新的数据时才擦除数据,NVMe 硬盘是忙碌的,有其他的读写请求,所以它需要在前台快速地擦除数据,这样就会影响性能。所以,执行 trim 操作可以让 NVMe 硬盘在空闲时提前做好擦除数据的准备工作,从而在忙碌时提高写入性能。

用户

对于性能的影响我是了解了,但是对于写放大的影响我没有理解

必应

写放大是指 NVMe 硬盘实际写入的数据量和文件系统请求写入的数据量的比值。如果这个比值大于 1,就说明 NVMe 硬盘写入了比文件系统请求更多的数据,这样就会增加 NVMe 硬盘的磨损和耗电。执行 trim 操作可以减少写放大的影响,因为它可以让 NVMe 硬盘在写入新数据时,直接写入到空白的页上,而不需要复制和擦除其他的数据。这样就可以减少 NVMe 硬盘实际写入的数据量,从而降低写放大的比值。

用户

但是在执行trim操作时不也是会复制和擦除无效的数据吗,而不执行trim操作只是将复制和擦除的动作放在了写数据时执行,对于写放大的影响有什么不一样

必应

执行 trim 操作时,NVMe 硬盘不一定会复制和擦除无效的数据,它只会标记无效的数据为可擦除的,然后在合适的时机进行擦除。这个时机可能是在空闲时,也可能是在写入新数据时。但是如果在写入新数据时,NVMe 硬盘已经有足够多的空白页,它就不需要复制和擦除其他的数据,只需要直接写入新数据。这样就可以避免写放大的影响。而不执行 trim 操作时,NVMe 硬盘每次写入新数据时,都需要复制和擦除其他的数据,因为它不知道哪些数据是无效的,哪些数据是有效的。这样就会造成写放大的影响。

用户

谢谢你的回答。

必应

不客气,很高兴能帮到你。

【AI问答】fstrim对于nvme硬盘有什么意义相关推荐

  1. (原创)修改BIOS让华硕Z87-A老主板支持NVMe硬盘启动(采坑实录)

    当年经典的华硕Z87-A主板至今仍然老当益壮,美中不足就是不支持NVMe SSD作为启动盘.由于工作生活繁忙,2年多来陆陆续续查了好多资料,再加上有CH341A编程器加持,自认已经准备得够充分.最近乘 ...

  2. 想搞一套AI问答游戏系统?简单,Google又开源了

    本文来自AI新媒体量子位(QbitAI) 刚刚,Google开源了一套问答游戏App系统. 通过一套模板工具可以,你只要给出问题和答案,就能搞出一套功能齐备的AI问答游戏.这套问答系统基于Google ...

  3. 新硬盘显示有储存空间但无法分区_容量更足高速无忧,奥睿科迅龙V500 NVME硬盘体验...

    经济宽松的时候总会想要折腾折腾各种电子设备啥的,特别是对笔记本,电脑啥的总想着升级升级,拥有更宽松的储存容量,用来安装更多的游戏,下载更精彩的视频,或者是从网上搜集搜集更多电纸书籍用于自己充电或者教育 ...

  4. MacBook Air 2014 安装NVME硬盘并纯UEFI安装和引导Win7

    前言: 本文是关于在苹果笔记本上安装NVME固态硬盘.纯UEFI安装及引导win7的实践,供电脑爱好者参考. 手里有一台MacBook Air(MBA) 2014,256G,跟现在的笔记本比较,性能肯 ...

  5. 什么是NVMe硬盘?

    本文摘自:https://zhidao.baidu.com/question/590890784.html NVMe硬盘指的是非易失性内存主机控制器接口规范(Non-Volatile Memory e ...

  6. linux控制NVme硬盘点灯,一种实现多NVMe硬盘背板点灯的设计方法与流程

    本发明涉及服务器硬盘背板领域,具体来说涉及一种实现多NVMe硬盘背板点灯的设计方法. 背景技术: 随着CPU.显卡性能的不断提升,服务器的计算瓶颈逐渐向存储设备转移,存储技术也随之升级,硬盘传输速率从 ...

  7. 服务器nvme硬盘识别不了,NVMe硬盘无法安装win7怎么办|安装win7找不到nvme硬盘解决方法...

    现在很多固态硬盘采用的是NVMe新协议,如果安装win7系统,往往会找不到硬盘,在选择硬盘界面是空白,找不到这个nvme硬盘,因为win7系统没有集成nvme驱动,所以这种情况下nvme硬盘无法安装w ...

  8. VMware ESXi添加NVMe硬盘扩容

    18年春节,也就是2月份,我买了第一块NVMe固态硬盘,容量是250G,价格是499块,券后481块.当时对于这种读取2100 MBps,写入1300 MBps的高性能产品,我直呼太值了!毕竟当时SA ...

  9. 联想H61主板升级BIOS,支持nvme硬盘

    本教程升级有一定风险:请阅读文章最后的"遗憾"部分接受再升级 最近因为手上有一台联想的i7 2600主机,他的主板是H61的,正好看见pcie接口空着,在网上看见有人用它升级了拜滕 ...

最新文章

  1. Django REST framework API 指南(12):验证器
  2. JAVA自学笔记24
  3. 6.2 K-Means 算法步骤-机器学习笔记-斯坦福吴恩达教授
  4. 减少HTTP请求的方法
  5. 自动驾驶模拟器Carla之python编程-(2)控制汽车
  6. 2017.4.21 螺旋矩阵 思考记录
  7. SQL 存储过程传入多个ID
  8. SpringMVC 框架系列之组件概述与配置详解
  9. cloverconfig机型修改_Clover的Config新手设置教程
  10. iphone查看python文件_通过python获取苹果手机备份文件中的照片,视频等信息采集...
  11. Java 快递物流查询 api对接
  12. 微软放弃收购雅虎的提议
  13. 基于stm32f103c8t6的Flash地址空间的数据读取
  14. H5互动小游戏开发案例
  15. 小程序商品数据对象累加加入购物车缓存导致的数组嵌套在上一层数组中的问题
  16. 普通话水平测试软件怎么样,求测试普通话标准的软件?6款普通话软件推荐
  17. oracle 中fuser,关于fuser的使用方法
  18. 想利用业余时间学习计算机知识,但是不想学习编程该怎么学习
  19. 移动端的bug和坑(主要针对样式方面)
  20. linux usb驱动教学视频教程,详解linux usb host驱动编写入门

热门文章

  1. IXWebHosting子域名共享独立IP的方法
  2. MapReduce分布式计算框架
  3. 前后端分离项目nginx搭建静态页面服务器cors做后台跨域接收前台请求
  4. [Phonegap+Sencha Touch][转] 移动开发32 使sencha touch的store在离线状态下也能显示数据
  5. 关于oracle的几个概念(一)
  6. Wallace 树乘法器
  7. 中概互联ETF基金(513050)跌到自去年6月以来新低
  8. 一分钟搞定Spring AOP实现权限控制
  9. 卷积、互相关、自相关
  10. MPlayer移植步骤