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

news/2024/11/25 9:31:02/

用户

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 硬盘每次写入新数据时,都需要复制和擦除其他的数据,因为它不知道哪些数据是无效的,哪些数据是有效的。这样就会造成写放大的影响。

用户

谢谢你的回答。

必应

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


http://www.ppmy.cn/news/117222.html

相关文章

c primer plus学习笔记(一)

1.int的大小恒定就是32位么? 不是的,int大小是跟着系统走的,不是在各个系统里固定不变的。 32位系统int就是32位。64位系统,int就是64位。short 和long的长度则跟着int走,一般来说int是32位,short就是16位…

【层次分析法】

层次分析法(Analytic Hierarchy Process)模型原理介绍及预测应用 引言 在决策分析中,我们经常需要在多个指标或因素之间进行权衡和选择。层次分析法(Analytic Hierarchy Process,AHP)是一种常用的多准则决…

win10 内存溢出修复

前两天换了块三星m.2的固态盘,重新做了一个系统,然后今天使用电脑系统内存崩了好几次,后来发现是桌面窗口管理器存在内存泄漏。 经研究,发现属于因特尔部分驱动存在问题,无需下载驱动精灵等软件,打开“菜单…

笔记本内存条的选择指南

目前市场上的内存条品牌众多,真假鱼龙混杂,好多贴牌产品的出现,让电脑小白花高价钱买了假内存条。 辨别内存条真假时主要看的是:品牌、颗粒、电阻。 主流品牌的内存条品牌:三星、海力士、镁光 上述的内存条品牌都有自…

三星内存编码_三星内存铭牌的详细说明|三星记忆棒标签存储参数的详细说明...

三星内存铭牌的详细说明|三星记忆棒标签的记忆参数的详细说明大多数朋友都知道记忆铭牌记录着重要的记忆数据. 但是大多数朋友对此不确定!出于这个原因三星内存条编码含义,我也想学习,现在分享相关的学习笔记,希望能给我的朋友们看…

三星服务器内存条型号区分,三星内存铭牌详解|三星内存条标签内存参数详解...

三星内存铭牌详解|三星内存条标签内存参数详解 大多数朋友都清楚内存铭牌上,记录着内存的重要数据。但是大多数朋友都对此不甚了然!为此小编也想学习下,现在把相关的学习笔记分享出来,希望和朋友们显摆下,小编原本就是个菜鸟!下面…

三星内存条辨别真假

参考: 1、贴吧大神文章 2、判断三星笔记本内存条真假的技巧 3、用软件判断内存的生产日期 M379B5273DHO-YKO M:Mmemory 3:3DIMM 台式机内存 79:台式机黑条 B:BDDR3 52DEPTH 2Gb78bank 1.5V38 bitD30nm制程HFBG…

计算机应用用什么样的笔记本,制图用什么笔记本好

以前人们常说的绘画都是在纸上,然而科技时代的到来也让绘画的方式有了改变,而且现实中还在发展电子商务,因此大家都开始使用计算机制图,不同的计算机制图的方式不一样,专业使用电脑制图的人都会对电脑比较挑剔。它们还…