迅维网

查看: 1960|回复: 20
打印 上一主题 下一主题

固态硬盘真的不需要整理碎片吗?

[复制链接]
跳转到指定楼层
1#
发表于 2017-12-7 10:32:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: LAN 来自 LAN

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x
固态硬盘真的不需要整理碎片吗?

2#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN

固态硬盘(SSD)每个块的读取时间都是恒定的,不像机械硬盘读取物理连续的扇区才有最快速度(因此机械硬盘才要“整理碎片”)。而且SSD的写入寿命(按次数)比机械硬盘少一到两个数量级,经常整理硬盘会大大加速老化。事实上,微软官方也不推荐对SSD进行碎片整理:Windows 7 & SSD: defragmentation, SuperFetch, prefetch

另外,SSD暴露给上层软件系统的是“逻辑块”,由控制器来映射到底层的闪存芯片上的物理块。(绝大多数情况下)软件无法绕过控制器直接管理物理块。而且不同于机械硬盘的是,SSD的逻辑块到物理块的映射是高度复杂和相当动态的(题主关注的读平衡问题已经被控制器算法考虑到了,另外控制器还要考虑写平衡、垃圾回收、坏块替换等问题),也不适合上层软件来管理。

回复 支持 反对

使用道具 举报

3#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
如果用接送孩子上学来比喻硬盘的数据读写,则机械硬盘相当于统一用一辆校车(磁头)接送(读写)全市(整个硬盘)的孩子(数据),如果能让孩子们都搬家挨在一起住(碎片整理),则校车的接送会很有效率;
固态硬盘:相当于每家都是家长开车接送孩子,这样孩子们的家是否挨在一起丝毫不影响接送效率,你非要让大家都搬家到一起住(碎片整理),只会是劳民伤财(增加擦写次数),没有任何意义;反而是大家分散住更有效率,可以缓解局部交通压力(均衡存储单元的擦写次数,避免局部过早达到擦写寿命的极限)。
=======================================
  • 碎片整理是让数据尽量集中并且连续存放,这样机械硬盘的磁头读取的时候可以效率更高;
  • 固态硬盘由于读写的原理与机械硬盘不同,就算进行碎片整理,并不能提高性能或效率;
  • 整理工具往往是根据硬盘分区存储数据的碎片化程度决定是否提示,可能并不考虑是否固态硬盘;
  • 固态硬盘存储单元的擦写次数十分有限,一般情况下尽量避免不必要的数据擦写,比如碎片整理;
  • 同样由于上一条原因,固态硬盘内部有芯片会尽量让整个硬盘的存储单元使用频率均衡化,当硬盘只有一个分区时,自动将新增数据放到使用频率较低的区域(PS:不太清楚这个调整能否跨越分区),这客观上导致数据存储很分散。也就是说固态硬盘的数据本来就应该是分散和碎片化的,这是正常的并且对硬盘寿命有好处。(很多人不建议固态硬盘分区,也是想避免有些区域超负荷有些区域闲置)

回复 支持 反对

使用道具 举报

4#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
普通用户日常使用,只要用稍微现代一点的文件系统(NTFS for Windows, ext3/4 for Linux, HFS+ for OS X),不管是机械硬盘还是固态硬盘都不需要手动整理碎片,效果微乎其微。

回复 支持 反对

使用道具 举报

5#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
有一天,你用着用着SSD发现有那么一两分钟好像速度变慢了,其实这时SSD Firmware在做后台整理了,不过对一般客户而言基本上没什么影响。
补充:如果您的应用是极高清视频流的即时存储之类,那么恭喜你,请选择企业级SSD,消费级SSD满足不了您的需求,企业级SSD贵30%是有道理的,内部需要预留更大的over-provision来防止客户发现性能下降。

回复 支持 反对

使用道具 举报

6#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
机械硬盘的瓶颈在于寻道时间,因此要减少文件的分散程度。
“磁盘碎片整理"的意义便是物理上把硬盘上代表某个文件的区块合并在一起的过程
-
闪存的弱点在于写入次数的寿命,垃圾回收和单个DIE的速率有限。
-
针对单个DIE速率有限,寻道时间极短的特点,闪存要求文件尽可能平均分散至每一个芯片里。
当然,在同一个DIE里怎么做,我就不知道了。但是这一定会导致电脑看到的闪存内的地址是逻辑地址,而非实际的物理地址。

针对写入次数寿命有限,抹除时只能以”块“为最小单位的特点
意味着闪存不能在删除数据的同时直接执行抹除操作,而要等到整一块都被标记为已删除/空后才可行动。但是也不能等到整个闪存里都塞满了恰好部分内容被标记为删除,部分被占用的情况。又要减少/平均化抹除操作。
这些也需要专门的管理芯片。

那么,为了要尽可能把已标记为删除但未擦除的区块回收(也就是擦除)---这个是闪存的磁盘整理。
在操作系统的层面出现了TRIM指令。TRIM可以帮助固态硬盘更好的执行垃圾回收工作。

回复 支持 反对

使用道具 举报

7#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
由于机械硬盘将数据的存储在一个转动的圆盘上,读取数据时磁头需要在圆盘上来回移动来寻找数据。假如数据碎片多,一个文件的内容被写到硬盘的不同位置上,则磁头就需要多次移动来读取一个文件,浪费了时间,降低了效率。因此机械硬盘为了减少磁头移动次数,事先整理碎片,把同一个文件挪到一个连续的区域,这样磁头就可以只用移动一次就可以读完一个文件。
而固态硬盘是通过片选信号来访问硬盘上的不同区块,众所周知,电信号不像磁头,是没有延迟的。因此即使数据再零碎,对于硬盘控制器来说都是一样的,不会额外增加读取时间。

结论:机械硬盘和固态硬盘都会有碎片,文件碎片不会影响固态硬盘的效率,因此没必要整理。

补充几点:1,固态硬盘写入次数有限,碎片整理会严重损耗固态硬盘寿命。
2,固态硬盘还有许多磨损均衡的算法,垃圾回收啊等等,这些算法会与碎片整理冲突。
3,win8的碎片整理程序针对固态硬盘特别设计(实质就是trim),因此可以在win8使用自带的碎片整理程序(trim)。其他版本的Windows最好不要用自带的碎片整理程序。

片选信号是指:在每个存储单元都有一个开关(低电平有效或者高电平有效,看芯片设计),开关被打开时,这个对应的单元便与总线接通,这时控制器就可以通过总线读取存储区内的数据。
固态硬盘中每个存储单元开关都会被分派一个地址,这个地址就是片选信号。
当控制器想要读取某个存储单元时,控制器就会根据片选信号接通相应的存储单元与总线的连接。

回复 支持 反对

使用道具 举报

8#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
win7和win8都会自动关闭对固态硬盘的整理 你说xp?2001年xp发布的时候还没有固态硬盘

回复 支持 反对

使用道具 举报

9#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
1,不需要整理碎片。
2,但是随着文件增多,性能会下降。
3,怎么办,用优化软件优化文件系统,说白了每个文件系统都有一个位图啊,链表啊,B-Tree 啊存储文件、文件夹关系。这个东西是可优化的。当你发现文件读写效率降低,可以去优化这个东西,而不是给 SSD 做碎片整理。

回复 支持 反对

使用道具 举报

10#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
相当于每家都是家长开车接送孩子,这样孩子们的家是否挨在一起丝毫不影响接送效率,你非要让大家都搬家到一起住(碎片整理),只会是劳民伤财(增加擦写次数),没有任何意义;反而是大家分散住更有效率,可以缓解局部交通压力(均衡存储单元的擦写次数,避免局部过早达到擦写寿命的极限)。

回复 支持 反对

使用道具 举报

11#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
由于SSD有TRIM和GC就不需要碎片整理了。

但是如果您实在有闲可以通过Secure Erase恢复性能,但是用了一会性能还是会下降。

此外,对于NTFS等日志型文件系统存在文件表/MFT碎片,不过除非你一直在SSD上编译大工程一般不需要关心这个。

回复 支持 反对

使用道具 举报

12#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
windows 10 已经发布了,可以识别Solid state drive,并且已经有了很好的回答


有文件系统,就有碎片。
更高级的说法,有固定长度的数组来存储不等长的数据,必然产生碎片。
和硬件一点关系都没有。明明就是文件系统导致碎片。
大块顺序传输磁带,磁盘,SSD相比优势很大么?机械设备并没有被数量级的甩开。
OS控制文件系统存到硬盘/SSD 不同的块区,中间当然产生碎片,内存管理道理也一样。
也许我的回答还不够精确,但起码我会用脑子思考问题的正确性。
哀其不搜,怒其不思。

补充
SSD修改操作是最恶心的。也就是因为这个恶心的机制,产生了碎片问题。
但NTFS,ext3,4文件系统又不是专门为SSD设计的,当然不会考虑到这个问题了。
但不排除未来有patch优化。
SSD的block是由128个4KB page组成,可以读写4KB,但是修改的基础单位是block。是512KB。

修改有两种可能
1. 非常理想的,我之前的block都写满了,我只是追加。申请新block写就可以了。
2. 不理想的,我必须写到碎片里,因为我SSD容量有限啊。没办法,写把旧数据读到
SSD cache,然后在cache里面追加数据之后,再写回到block。

这个过程掉电就搞笑了,文件系统之所以要fsck,也是这个问题,OS没有收到写入磁盘/SSD的确认。这也是为什么Enterprise SSD需要加上一排电容,保证写入靠谱。
我之前就想一个问题,为什么nand flash density的密度越高,性能越差呢?
这个也是因素之一。

使用SSD,大家问的最多一个问题就是,为什么我SSD用了一段时间,就没有刚装系统的时候快了?
碎片整理方式改变,不代表没有碎片。
目前的技术,任何把软件和硬件企图分开的想法都是纸老虎。我一看最佳回答就无语了,完全没有提到OS和固件对SSD的管理(或者说是文件系统和SSD沟通过程)。
win8也在磁盘管理里面,加入了对SSD的优化操作。
首先要搞清楚,硬件和文件系统是两个玩意,文件系统只是告诉硬件,我要存多少多少数据,硬件返回实际数据存放的硬件地址,当然期间就是内核驱动与硬件固件之间的一个沟通。一层又一层展开说就太复杂了。

请看贴
ssd - What does "Optimize Drives" do in Windows 8?
Q. I heard solid state disks (SSDs) suffer from a decline in write performance as they're used. Why?
Trim (computing)

请看图,清晰明了。

回复 支持 反对

使用道具 举报

13#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
来自微软的回答,当中提到“Windows会根据驱动器的不同类型自动选择合适的优化方式”似乎能回答卤煮的问题了。简单地说,保持系统默认的优化方式就好了。

回复 支持 反对

使用道具 举报

14#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
在今天, 我想郑重的说, 请不要进行磁盘碎片整理.忘了他吧
碎片整理这个概念是伴随着fat32文件系统和机械硬盘产生的. 因为fat32 是用排队的方法存取文件,机械硬盘上连续的空闲扇区存放文件整体, 随着早先存放的文件的删除, 被删除的部分空闲出来可以存放其他文件, 但如果连续扇区空间不够那就要把后来的较大文件分成几份存放. 如此反复,  不连续的文件愈来愈多. 然而机械硬盘的长处在于连续的扇区读取, 但短处却在于物理的磁头寻找文件块的过程,打比方你坐电梯送快递, 你是喜欢从1楼2楼连续送到20楼还是1楼20楼7楼6楼这样的乱续呢?电梯运行的过程好比机械硬盘移动磁头的过程, 所以早先的重新安排文件存放的方法对当时的磁盘读写的确有点作用.
然而, 从xp时代开始, 我们的电脑逐渐换了ntfs文件系统, 与fat32在存放文件的策略上是有区别的, 针对fat32这种容易产生碎片的策略有了改进. 硬盘的磁头移动策略和操作系统的文件系统算法和外设缓冲算法都在进步, 碎片变少, 磁盘读取策略和缓冲策略有改进, 根本没必要在机械硬盘上进行磁盘碎片整理, 因为windows速度真正的瓶颈是它庞大的注册表.
以上说的是机械硬盘, 至于固态硬盘ssd, 频繁的写操作对于ssd就是自杀, 多写一次闪存单元寿命少一次.从工作原理来说压根没有旋转的盘片和磁头(想像一下磁带和闪存mp3的感觉), 随机读取也就是任意位置的读取速度一样, 文件不连续又有什么关系?
这个概念在今天就是糊弄人的,当年糊弄人的可能性也不小.你想 你有n个小时整理的功夫, 还不如格式化重装一遍痛快, 反正不长时间以后还要变成那样 . 吐槽一下在linux这样的ext文件系统下压根没这概念.
结论: 除了心理安慰, 磁盘碎片整理没有任何用处, 纯让硬件烧电罢了, 还得让你惦记, 何苦.

回复 支持 反对

使用道具 举报

15#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
反对固态盘碎片整理会把所有数据整在一块闪存上的评论,再反对固态盘数据越分散越高效的答案。

无论是机械盘还是固态盘,都是数据越连续越高效,这不用质疑。机械盘是因为机械装置限制。固态盘是因为页表大小限制,或者是树状表存储空间限制,看FTL具体实现,FTL就是具体实现坏块管理,磨损均衡,地址映射和纠错的一个将闪存模拟为硬盘的适配层。至于单块多块闪存问题,目前基本上大家都是用类似内存双通道的方式来控制,也不能算数据分散,因为按照地址上来说,还是统一的,只是位宽加大了。

但是,机械盘暴露给上层的LBA是直接能够对应到具体位置的地址,因此连续LBA对机械盘的性能提升非常明显。

固态盘甭管你哪里,忽略查表时间(确实很短),基本读取时间是恒定的。读取速度基本取决于主控目前的状态和flash性能。比如正在进行GC的时候,就会明显的掉速。因为flash只能先擦后写,为了解决flash寿命问题,只能用带外更新加动态映射的方式来做。否则写入放大会高到不可承受,因此,固态盘的页表(混合映射实现)要爆炸的时候,和正在进行垃圾回收(把页表指向的日志页给规整到块表的连续数据块内,类似硬盘碎片整理)的时候,就会掉速。因为此时硬盘的日志块不够了,必须进行整理才能够释放块表条目,从而允许小量随机写入。当然垃圾回收也是有代价的,就是写入放大升高。因此如果要flash活久点,少点随机写入,多点顺序和大块写入,就可以了。

另外,TRIM开启也有助于遏止页表爆炸问题,因为如果固态盘不知道你要删除哪里的数据,你如果直接写小块数据,它又以为是小块更新,又用页表映射,等你啪啪啪写完一大块数据后,垃圾回收君又要忙活了,而且可能不止一次,带来掉速和大量写放大的问题。如果直接告诉固态盘,这几个逻辑块俺不要了,固态盘可以直接这个时候执行可能的垃圾回收动作,然后擦掉不需要的数据。后续写入文件基本上就可以直接找个新块,不用页表,清清爽爽的就把文件连续的写进去咯。总而言之,就是脏块越少,性能越好。尽量减少SSD的GC时间,比如尽量大块的顺序写入,随时TRIM。这样就不易引起掉速。

所以说固态盘自身就包含了碎片整理的功能(注意和硬盘的物理连续不同),系统上层无需干预,就算干预也是无用,反而引发页表爆炸(混合映射式),进而大量触发垃圾回收操作。而且就算LBA给整理整齐了,那也是好看而已,真正的PBA,没准被你整了这么一次,和以前没有变化(固态盘还是喜欢数据连续存放的,垃圾回收也是这个目的,物理上不连续页表会难受,但是具体物理连续不连续,高层根本不知道,但是固态盘一定朝着物理连续的方向行进就对了╮(╯▽╰)╭)。所以除了空耗时间寿命外,根本没什么卵用。

顺便吐槽一下FTL这东西。。。放在驱动或者固件层只能粗略预判上层文件系统想要干嘛,总有点隔靴搔痒的意味,真希望有朝一日直接在PC上用MTD驱动加FlashFS,这样就彻底不用考虑FTL模拟flash为传统硬盘要实现的种种蛋疼又引发系统不稳定的问题了,比如SSD的预估寿命问题。╮(╯▽╰)╭

回复 支持 反对

使用道具 举报

16#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
应该是不需要的吧,或者说即便整理了效果也不明显。

回复 支持 反对

使用道具 举报

17#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
对于老玩家而言,“磁盘碎片整理”一词一定不会陌生。作为Windows内置的专为硬盘等存储设备进行碎片整理的工具,在一定程度上减少了硬盘冗杂文件的堆积,加速了磁盘运转速度,从而提升了电脑整体的运行速度。这一点的提升对于一些性能落后的、使用机械硬盘的老旧主机来说,还是特别有价值的。
然而,到了固态硬盘跑马圈地,机械存储式弱式微的当下,磁盘碎片整理却淡出了我们的视野,越来越多的人表示,固态硬盘压根就不需要磁盘碎片整理。
那么为什么固态硬盘不需要磁盘碎片整理呢?
在解决这个问题之前,我们先来看看到底什么是磁盘碎片整理。
磁盘碎片整理顾名思义,就是通过系统软件或者专业的磁盘碎片整理软件对电脑磁盘在长期使用过程中产生的碎片和凌乱文件重新整理,可提高电脑的整体性能和运行速度。
我们知道,由于文件被分散保存到整个磁盘的不同地方,而不是连续地保存在磁盘连续的簇中,久而久之便产生了磁盘碎片。

固态硬盘不需要磁盘碎片整理的原因:
从磁盘碎片的产生原理,我们看出,磁盘碎片整理能够提升个人电脑性能的秘密在于,通过整理磁盘碎片文件,让碎片文件合成一体,加速了磁盘的寻道时间,从而整体上加速了电脑运行速度。
电荷寻道耗时几乎为零
而我们知道固态硬盘的存储单元,是基于闪存颗粒的电子存储,因而在寻道时间上理论上是永恒不变的,影响其性能的则取决于主控芯片的性能和闪存颗粒的工艺。这也是为什么许多玩家都建议在固态硬盘时代,不需要磁盘碎片整理的第一大原因。
固态硬盘读写次数的珍贵
其二,由于磁盘碎片整理的工作机制是重新将存储在磁盘中的文件按照一定的顺序重新读写一遍并整理,这对于把擦写次数视为生命的固态硬盘而言,无异于自取灭亡。固态硬盘的闪存存储特性决定了其擦写次数是有限的,一旦超过限额,磁盘将无法写入成为废盘。因而,固态硬盘时代进行磁盘碎片整理实在是一种近乎自杀的行为,这是玩家们不建议磁盘碎片整理的第二大原因。
固态硬盘自带TRIM的功能优势
其三,则是固态硬盘自带的TRIM功能,开启后能够充分发挥固态硬盘的整体读写性能,某种意上来说,其实已经充当了磁盘碎片整理的工作。
综合以上原因,无论是从原理上还是从现实作用中,磁盘碎片整理功能其实在固态硬盘时代的存在价值真的微乎其微了,虽然从win8开始微软已经针对固态硬盘的特性进行了相关磁盘整理功能的革新换代,但是就目前固态硬盘的闪存特性而言,其作用也是极小的。

回复 支持 反对

使用道具 举报

18#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
细心的人可以发现win8以后就不是磁盘整理了,(磁盘优化)改成优化了

回复 支持 反对

使用道具 举报

19#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
我做过flash驱动,ssd就是由flash构成的。
操作系统通过文件系统向flash里面写入,然而并不是立即写入。而是在内存里有个缓存。文件系统有自己的策略,有的是数据量大了,才向flash写入,有的则小一点。
但是文件系统也不是直接写入的,而是透过flash驱动程序写入。
flash的特性是每个地方(页,相当于硬盘的磁道)写入次数不能超过3000次。而且这还是早期的flash,越到后期,随着flash里面每一个cell里面可以存2个3个甚至更多比特(注意不是字节),每个页可以被重写的次数也越来越少。
有一种使用情况是:有一些小文件不停的被修改然后写入。这种情况下,如果只是向同一个地方写,很快这个地方就达到使用寿命了。因此,flash驱动里面做了“磨损平衡”。
这个磨损平衡目的就是把每一个块(相当于机械硬盘的扇区)每一个页,每个cell,的写入次数做到相似,而不是只使用其中一部分。
机械硬盘每个地方使用寿命是比较大的。所以不需要磨损平衡,他就随便写,哪有空余的地方就往哪写就可以了。随着使用过程的增加,写入、删除次数也越来越多。会出现某些大文件不是连续存储在硬盘上,而是这里放一点,那里放一点。
机械硬盘是这样读写的:首先文件系统接受操作系统的命令向硬盘读写。硬盘根据文件系统确定文件位置,硬盘首先将读写头移动到对应的磁道上,然后等待磁道转到读写头下方后,开始读写。
如果文件不连续,在硬盘里到处都是,那就要不停的移动读写头,不停的等待磁道转到对应位置。这样导致机械硬盘读写文件变得非常慢,解决的办法就是需要整理碎片,重新把所有文件连续的存储在硬盘上。这样机械硬盘只要做一次读写头的移动和磁道等待就可以了。大大提高机械硬盘效率。
由于ssd是flash,它是直接硬件电路读写的,没有机械,一切都是瞬间完成。因此,不需要整理碎片。上面也说了,整理也是白整理,人家还要做磨损平衡呢,实际上也不可能给你写成连续的。对于ssd的碎片整理,不但浪费自己的生命,还浪费ssd的生命(早期最好的才3000次而已啊,现在完全不行啊,达不到啊)
而且,对于SSD,不推荐使用NTFS这种日志型文件系统。除非真的要有超过4G的文件要存储在硬盘上。

回复 支持 反对

使用道具 举报

20#
发表于 2017-12-7 10:32:58 | 只看该作者 来自: LAN 来自 LAN
你的理解是错误的,固态硬盘在存储数据时即会根据控制器算法将数据分为多份存储在不同的区块上,读取时从这些区块同时读取,不存在通过整理将数据分散以提高读取速度的过程。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图 AI维修
助手



芯片搜索

快速回复