磁盘碎片整理,一次讲清楚。
文件为什么会变成碎片,碎片为什么让机械硬盘变慢,碎片整理程序那几个小时里究竟在忙什么,以及你的电脑现在还需不需要它。
最后核对于
什么是磁盘碎片?
文件系统并不是一个字节一个字节地存放文件。它按固定大小的块来分配空间,这种块叫作簇(也叫分配单元或块),是一个文件所能占用的最小磁盘空间。在簇大小为 4 KB 的磁盘上,一个 10 KB 的文件要占用三个簇。
理想情况下,一个文件的各个簇紧挨在一起。如果不是这样,文件被分成好几段、散落在磁盘各处,这个文件就是碎片化的。
- 一个文件,分成四段
- 其他文件
- 可用空间
只要磁盘在用,碎片就会自然产生:
- 删除会留下空洞。删掉一个文件,它占用的簇就变成了一个空隙。下一个写入的文件可能比这个空隙大,于是只能被拆开:一部分放进空隙,其余的放到别处有空的地方。
- 文件会变大。给文档加一页,给日志文件添上一天的记录,新增的簇往往没法紧接在原来的簇后面,因为那里已经有别的文件了。
- 文件系统图的是快,不是整齐。FAT 是 MS-DOS 以及 Windows 95 和 98 使用的文件系统,它通常从上次分配的最后一个簇接着往下,拿下一个空闲的簇。这样很快,但时间一长,文件就散得到处都是。
碎片其实分两种。文件碎片是一个文件被拆成了好几段。可用空间碎片是空闲空间被切成了许多小空隙,而它正是前者的根源:当没有哪个空隙足够大时,每个新文件一写进来就是碎的。
磁盘碎片为什么会拖慢机械硬盘?
机械硬盘是一叠旋转的盘片,外加装在摆臂上的读写磁头。读取任何数据之前,摆臂要先把磁头移到正确的磁道上(即寻道),然后等盘片上的目标位置转到磁头下方(即旋转延迟)。之后数据才开始流出,而且只要数据是连续的一整段,读起来就很快。
每多一个碎片,就要多一次寻道、多等一次。微软的工程师把这两种延迟称为“两大罪魁祸首”。一个分成 50 段的文件,要付出 50 次这样的代价,而不是一次。
| 主轴转速 | 平均旋转延迟 | 典型硬盘 |
|---|---|---|
| 3600 转/分 | 8.3 毫秒 | 20 世纪 90 年代末的廉价硬盘,例如昆腾 Bigfoot CY |
| 5400 转/分 | 5.6 毫秒 | 笔记本硬盘,例如希捷 Momentus 5400 |
| 7200 转/分 | 4.2 毫秒 | 台式机硬盘,例如希捷 Barracuda 7200.14 |
| 固态硬盘 | 无 | 没有任何东西在转;数据放在哪里都没有区别 |
几毫秒听起来不算什么,但同一块硬盘在这段时间里,本可以连续读出几十甚至几百 KB 的数据。所以碎片多的磁盘用起来总是慢吞吞的:程序启动要等更久,磁头来回跳动时,硬盘还咔哒咔哒响个不停。
数据放在哪里也有讲究。采用区位记录(ZBR)技术时,外圈磁道比内圈磁道容纳更多扇区,所以磁盘的开头(最外圈)是速度最快的部分。好的碎片整理程序会利用这一点。
碎片整理程序到底在做什么?
碎片整理程序是个小心翼翼的搬运工。对每个碎片化的文件,它先找一段足够大的连续空闲区域,把各个片段按顺序复制过去,核对副本,让文件系统指向新位置,然后才释放原来的簇。万一中途出了问题,原文件还好好地待在原处。
在这个过程中,好的碎片整理程序还会:
- 合并可用空间,把零散的空闲区域集中成一大片,好让新文件能完整地写进去。
- 有意识地安排文件位置:系统文件和常用文件放在磁盘开头速度快的地方,不常用的放远一些。Windows 98 甚至会按照程序实际加载的顺序来排列程序文件。
- 有些东西不去动。在 Windows 2000 中,系统一直打开着的文件,比如分页文件和 NTFS 主文件表(MFT),在 Windows 运行时无法移动。有些工具会在开机时专门处理一遍。
碎片整理不会删除任何东西,也不会让磁盘变大。它只是挪动数据,让磁头少跑几趟就能把数据读完。
Windows 95 和 98 的磁盘碎片整理程序
对很多人来说,碎片整理程序指的就是它:一个窗口里满是小方块,随着程序一点点处理完驱动器 C,颜色慢慢改变。它随 Windows 95 一起推出,和 MS-DOS 6 里的 DEFRAG 命令一样,出自赛门铁克(Symantec)之手,也就是开发 Norton Utilities 及其中 Speed Disk 的那家公司。
点击显示详细信息,就会打开那张著名的磁盘图。图例解释了每一种方块:
- 已优化(已整理碎片)的数据已经处理好的文件:连成完整的一段,并且待在该待的位置。
- 未优化的数据仍需移动的数据,按它应在的位置分别标注:驱动器的开头、中间或末尾。
- 可用空间空着的簇,等待被填满。
- 不会被移动的数据碎片整理程序必须原封不动留在原处的文件。
- 磁盘的坏(损坏)区域被标记为不可用的簇。Windows 把它们画成一个白色方框,中间贯穿一条红线。
- 当前正在读取的数据磁头此刻正在拾取的块。
- 当前正在写入的数据这些块正被放下的位置。
图的底部有一行字,一句话就解释了整张图:“每个方框代表一个磁盘簇。”(“Each box represents one disk cluster.”)这里用的颜色,正是 Defragment 的 Classic 98 主题中的颜色。
Windows 98 新增了一个复选框:“重新安排程序文件,使程序启动更快”(“Rearrange program files so my programs start faster”)。它背后是英特尔的 Application Launch Accelerator(应用程序启动加速器):一个名为“任务监视器”(Task Monitor)的小程序会记下每个程序启动时读取了哪些文件的哪些部分,碎片整理程序再严格按照这个顺序排列这些部分。英特尔在 1997 年的测试中,Office 程序的启动时间从 11.3 秒缩短到了约 3.7 秒。
这也解释了一个出了名的烦恼:如果碎片整理程序工作时,有别的程序往磁盘里写东西(屏幕保护程序就是常见的元凶),它先前建立的磁盘图就过时了,只好从头再来。很多人都记得,碎片整理好像永远过不了 10%。
磁盘碎片整理简史
- 1986
Diskeeper 和 DiskExpress
Executive Software 为 VAX/VMS 小型机推出 Diskeeper,Alsoft 则为 Mac 推出 DiskExpress。
- 1987
Norton Speed Disk
Speed Disk 随 Norton Utilities 4.0 高级版问世,成为 DOS 时代最知名的碎片整理程序之一。
- 1993
MS-DOS 6.0:DEFRAG
DOS 有了自己的
DEFRAG命令:一个精简版的 Speed Disk,由赛门铁克授权。 - 1995
Windows 95
磁盘碎片整理程序(同样是赛门铁克的代码)把由簇组成的磁盘图带到了数以百万计的屏幕上。
- 1996
Windows NT 4.0
系统没有自带碎片整理程序,但新增的系统功能让 Diskeeper 等工具可以在 Windows 运行时安全地移动簇。
- 1998
Windows 98
借助英特尔的 Application Launch Accelerator,碎片整理学会了按加载顺序排列程序文件。
- 2000
Windows 2000 和 XP
碎片整理程序与 Diskeeper 的开发商 Executive Software 合作打造。它的条形图用红色表示碎片文件,蓝色表示连续文件,绿色表示无法移动的文件,白色表示可用空间。
- 2003
Mac OS X 10.3 Panther
Mac 的文件系统开始在打开文件时,自动为碎片严重的小文件整理碎片。
- 2007
Windows Vista
碎片整理改为在后台按计划运行,磁盘图也随之消失。
- 2009
Windows 7
进度重新变得可见,可以同时整理多个驱动器,固态硬盘也不再参与碎片整理。
- 2012
Windows 8:优化驱动器
工具改了名字,并学会区别对待固态硬盘:不再移动数据,而是向它发送 TRIM 指令。
- 2017
APFS
苹果的新文件系统专为闪存设计。在固态硬盘上,碎片整理从此根本不再是个问题。
Windows 10 和 11 如何整理磁盘碎片
Windows 依然会整理碎片,只是你看不到了。这个工具现在叫优化驱动器(在“开始”菜单中搜索“碎片整理和优化驱动器”),默认每周自动运行一次。
- 在机械硬盘上,它会分析驱动器并整理碎片。
- 在固态硬盘上,它改为执行重新剪裁(retrim):告诉硬盘哪些块已经不再使用。
- 在用 FAT 格式化的可移动 U 盘或 SD 卡上,它什么也不做。
有一个例外常常让人意外:如果开启了系统还原或其他卷快照,Windows 也会对固态硬盘进行碎片整理,大约每月一次。微软存储团队解释说,碎片严重的卷会拖慢快照,还可能触及文件系统对单个文件碎片数量的上限。
喜欢命令行的话,defrag C: /A 可以分析驱动器,defrag C: /O 会根据驱动器类型执行合适的优化,defrag C: /L 则对固态硬盘执行重新剪裁。完整的碎片整理需要驱动器至少有 15% 的可用空间。
固态硬盘需要碎片整理吗?
不需要。固态硬盘(SSD)没有磁头,也没有旋转的盘片,所以既不用寻道,也不用等待。它的主控维护着一张自己的映射表,把电脑使用的地址对应到数据真正所在的闪存单元,还会有意把写入分散到整个芯片上。在 Windows 看来碎片化的文件,在固态硬盘内部可能位于任何地方,而且无论怎样,读取速度都一样快。
碎片整理只会把原本好好待着的数据重写一遍,而闪存能承受的写入次数是有限的。全球最大的固态硬盘厂商之一三星明确表示,固态硬盘不需要碎片整理,并建议为其硬盘关闭自动碎片整理。
固态硬盘真正需要的是 TRIM:由操作系统告诉它哪些块已经空闲,让硬盘提前清理,从而保持快速写入。Windows 和 macOS 会自动执行,大多数 Linux 发行版也会定时运行。
Mac 需要碎片整理吗?
几乎不需要。在经典 Mac OS 时代,人们会用 Alsoft 的 DiskExpress 和 PlusOptimizer、Norton Utilities 中的 Speed Disk 或 TechTool Pro 之类的工具。从 Mac OS X 开始,大部分工作都由系统自己完成了。
- Mac OS X 10.2 加入了延迟分配:文件系统先等一等,再决定把新数据放在哪里,这样就能找到一整块连续的位置。
- Mac OS X 10.3 Panther 加入了自动碎片整理:当一个小于 20 MB、被分成超过八段的文件被打开时,系统会悄悄把它挪成完整的一段。
- 热文件聚集(Hot File Clustering)会把启动磁盘上最常读取的小文件,集中到磁盘上一块预留的“热”区域。
苹果当年自己的建议是:用 Mac OS X 的话,你很可能根本不需要做优化。如今的 Mac 在固态硬盘上使用 APFS,碎片无关紧要。如果是在机械硬盘上使用 APFS,macOS 提供了一个开关:diskutil apfs defragment,后面跟上卷以及 status、enable 或 disable。
Linux 上的碎片整理
Linux 的文件系统在设计上着重于避免碎片,而不是事后修补,所以很少需要整理碎片。
- ext4 通过区段(extent,用一条记录表示一长串连续的块)、延迟分配,以及让文件数据靠近其元数据,把文件保持在一起。偶尔需要时,还有
e4defrag。 - XFS 自带
xfs_fsr,它会重新整理碎片最严重的文件,默认每次最多运行两小时。 - Btrfs 提供
btrfs filesystem defragment命令和autodefrag挂载选项,后者默认关闭。使用快照时要小心:碎片整理会打破文件与其快照副本之间的共享,占用的空间可能随之增加。
为什么大家爱看碎片整理
在硬盘的咔哒声和小方块由浅变深之间,碎片整理不知不觉成了一件值得观看的事。一个缓慢、有条不紊、看得到终点的过程,每一步都让一切更整齐一点,看着竟莫名让人平静。
直到今天,还有人专门找来看。2018 年,TechCrunch 报道过一个 Twitch 频道,它什么都不做,只是全天候给一块 DOS 磁盘整理碎片;长达数小时、连硬盘噪音都一并录下的 Windows 98 碎片整理视频,至今在 YouTube 上仍有人观看。
这正是 Defragment 的全部初衷:享受看着磁盘慢慢变整齐的那份平静,却不需要一块真的需要整理的磁盘。你的 iPhone 或 iPad 上会显示一块假想的磁盘,永远在整理碎片,共有六款主题(包括 Classic 98),愿意的话还能在一旁显示时间。
常见问题
SSD 要不要做碎片整理?
不要。固态硬盘没有活动部件,碎片不会让它变慢,碎片整理只会增加磨损。Windows 会自动改为向固态硬盘发送 TRIM 指令,保持开启就好。
Win10、Win11 还会自动整理磁盘碎片吗?
会。“优化驱动器”默认每周运行一次:对机械硬盘整理碎片,对固态硬盘执行重新剪裁。如果开启了系统还原,它还会大约每月对固态硬盘整理一次碎片。
我的 Mac 要做磁盘碎片整理吗?
几乎从不需要。Mac OS X 从 10.3 版起就会自动整理小文件的碎片,而如今的 Mac 在固态硬盘上使用 APFS,碎片无关紧要。
碎片整理要多长时间?
取决于磁盘的大小、文件的数量、碎片的程度以及磁盘有多满。在 20 世纪 90 年代的电脑上,一次完整的碎片整理可能要花上好几个小时,Windows 98 的使用指南也正是这样提醒的。如今 Windows 会按计划自动运行,所以每次通常没剩多少活儿。
碎片整理进行到一半可以停止吗?
可以。“暂停”和“停止”按钮就是为此准备的,而且碎片整理程序会先复制并核对每个片段,再释放原来的位置。突然断电就是另一回事了,所以在笔记本电脑快没电时整理碎片,从来都不是个好主意。
碎片整理会删除文件吗?
不会,它只是移动文件。不过它会覆盖可用空间,所以之前删除的文件在整理之后就更难恢复了。
碎片整理需要多少可用空间?
需要足够的空间来腾挪。微软要求驱动器至少有 15% 的可用空间,才能完整地整理碎片;空间不够的话,有些文件会一直是碎的。
Windows 98 的碎片整理为什么总是重新开始?
因为它工作时有别的程序在往磁盘里写数据,通常是屏幕保护程序或后台程序。这样它的磁盘图就过时了,只好从头开始。关掉其他程序、停用屏幕保护程序会有帮助。
“每个方框代表一个磁盘簇”是什么意思?
在 Windows 95 和 98 的磁盘图里,每个小方块代表一个簇,也就是一个文件所能使用的最小磁盘空间。颜色表示簇里装的是什么:已整理好的数据、待移动的数据、可用空间等等。
还能再看一次碎片整理吗?
能:iPhone 和 iPad 上的 Defragment 就是干这个的,一块永远在整理碎片的磁盘,还有 Classic 98 主题。它不会碰任何真实数据。
看它再收拾一遍。
Defragment 是 iPhone 和 iPad 上一场安静、永无止境的碎片整理。免费,六款主题,带时钟,而且没有任何真实的东西需要整理。
即将登陆 App Store看看 Defragment参考资料
内容已对照使用手册、微软和苹果的文档以及当年的资料核实。
- Microsoft: Disk defragmentation background and engineering the Windows 7 improvements (2009)
- Microsoft: Disk defragmentation in Windows 2000
- Microsoft Learn: defrag command
- Microsoft Learn: Optimize-Volume
- Microsoft Support: Defragment or optimise your drives in Windows
- Microsoft KB Q120962: DEFRAG in MS-DOS 6 is developed by Symantec
- Microsoft KB Q160043: bad clusters in the Disk Defragmenter map
- Microsoft KB Q155679: Windows NT 4.0 has no disk defragmenter
- Microsoft KB 186978: Disk Defragmenter restarts repeatedly
- Intel: Application Launch Accelerator announcement (1997)
- Scott Hanselman: Does Windows defragment your SSD? (2014)
- Apple: About disk optimization with Mac OS X (HT1375)
- Amit Singh: Fragmentation in HFS Plus volumes
- Linux kernel documentation: ext4 block and inode allocators
- xfs_fsr manual page
- Btrfs documentation: Defragmentation
- Samsung Semiconductor: SSD FAQ
- Wikipedia: Hard disk drive performance characteristics
- Wikipedia: Quantum Bigfoot
- Seagate Barracuda 7200.14 data sheet
- Seagate Momentus 5400 product manual
- Alsoft: company history
- Wikipedia: Norton Utilities
- Wikipedia: Diskeeper
- TechCrunch: Watch a hard drive defrag forever on Twitch (2018)