写点什么

为什么 Linux 和 macOS 不需要碎片整理

  • 2021-04-27
  • 本文字数:2602 字

    阅读完需:约 9 分钟

为什么 Linux 和 macOS 不需要碎片整理

为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。如果你有想要了解的问题,可以在文章下面留言。


相信今天很多的软件工程师使用的都是 Linux 或者 macOS 系统,与 Windows 不同,我们很难看到磁盘碎片整理这一概念,从个人的经验来看,作者在过去七八年没有在 macOS 中整理过磁盘的碎片,你在今天的磁盘工具中也找不到相关的操作,只能通过 diskutil 命令设置某一块磁盘是否开启或者关闭碎片整理。



图 1 - macOS 磁盘工具

我们在 前一篇文章 中曾经分析过为什么早期 Windows 操作系统每隔一段时间可能需要整理磁盘上的碎片1,该问题背后有两个原因,其一是 Windows 使用的 FAT 是很简单的文件系统,该文件系统的设计决定了同一份文件可能会散落在磁盘的不同位置,其二是固态硬盘在上古时代没有普及,机械硬盘的随机读写性能很差。


Linux 和 macOS 系统不需要碎片整理的原因与 Windows 需要碎片整理的原因正好相反:

  • Linux 和 macOS 使用的文件系统或者降低了碎片发生的概率或者实现自动整理碎片的特性;

  • 固态硬盘与机械硬盘具有不同的特性,碎片整理可能不仅对提高读写性能没有显著的帮助,还不利于硬件的使用寿命;

文件系统

Linux 一般都使用 Ext2、Ext3 和 Ext4 文件系统,今天的大多数 Linux 发行版都选择了 Ext4。与 Windows 将多个文件连续存储的方式不同,Linux 会把文件散落到磁盘的不同地方存储,同时在文件之间留下一些空间,保证文件在修改或者更新时不会造成碎片。



图 2 - Linux 文件系统2

今天的 macOS 多数都使用 APFS 文件系统3,它是苹果专门为固态硬盘等设备优化的文件系统。更早的 HFS 和 HFS+ 都是用了基于区块(Extent)的设计,每个区块都包含序号和一段连续的存储空间,这种分配方式会在文件系统中查找几个连续的区块来提供所需的空间。



图 3 - macOS 文件系统

无论是 Linux 还是 macOS,它们的文件系统都是基于区块设计的,而磁盘的空间分配也相对比较合理,所以不会出现 Windows 系统上碎片化的磁盘。


除了文件系统在设计就避免了碎片的出现之外,Linux 和 macOS 也都是引入了延迟分配空间的策略,它们会通过缓冲区尽可能延迟磁盘写入的时间,这样不仅能够降低刷盘的概率,还能增加文件写入相邻区块的概率,然而这种机制并不是没有副作用,在系统断电或者崩溃时可能会丢失更多的数据。


如果磁盘上确实出现了碎片,那么 Linux 和 macOS 的文件系统也会尝试移动出现碎片的文件,不需要额外的碎片整理工具,这种设计带来的用户体验会比手动触发耗时较长的碎片整理好很多。macOS 上的 HFS+ 系统还支持实时的去碎片化,当满足以下条件时会触发碎片整理4

  • 文件小于 20 MB;

  • 文件存储在 8 个以上的区块上;

  • 文件在过去一分钟没有被更新;

  • 系统已经启动了三分钟;


在多数情况下,这些操作系统中的磁盘碎片比例都非常低,只有在磁盘空间不足时才会开始出现碎片,所以在这时我们其实需要的是一个更大的磁盘或者更新的电脑,而不是整理磁盘上的碎片。

固态硬盘

固态硬盘其实已经是有着三十年历史的存储介质了,但是由于固态硬盘的价格在过去一直都十分昂贵,所以没有在数据中心和个人电脑中普及开来。哪怕是在今天,机械磁盘的价格与固态硬盘相比也有比较明显的优势。



图 4 - 固态硬盘和机械硬盘价格对比

新型的存储介质带来了全新的特性和性能,我们在前一篇文章中曾经介绍过,因为机械硬盘的机械结构,所以它的随机 I/O 与顺序的 I/O 性能可能相差几百倍,碎片整理可以将散落在磁盘上的数据合并到一处,随机 I/O 的次数减少自然也会提高读写文件的性能。


固态硬盘的顺序 I/O 和随机 I/O 在性能上虽然也有差异,但是差距可能在十几倍到几十倍之间,而固态硬盘的随机 I/O 延迟也比机械磁盘好几十倍甚至上千倍,到现在来看整理固态硬盘上的碎片虽然有收益,但是也比较有限。



图 5 - NAND 闪存的演进

作为电子元件的固态硬盘虽然有着较好的性能表现,但是固态硬盘都有循环擦写的次数限制,也被称作 P/E。它的寿命与机械硬盘相比却比较有限。如果一个 512 GB 的固态硬盘的擦写数目是 1000 次,每次写满数据都会消耗一次寿命,等擦写次数达到 1000 次之后硬盘就会报废,碎片整理其实就是主动移动硬盘上的数据,自然会影响硬件的寿命。

总结

在软件工程中有一个非常有趣的现象,做硬件和基础架构的工程师都在拼命优化系统的性能,然而应用层的工程师很多时候并不在乎性能上的微小差异,而这也是工作职责上的差异带来的结果,不同的位置决定了不同的关注点。


硬件的演进和革新深深地影响着上层软件的设计,想要设计出通用的系统是异常困难的,在设计文件系统时如果不考虑底层硬件的特性,也就无法充分利用硬件提供的性能并得到期望的结果。这里简单总结一下 Linux 和 macOS 不需要碎片整理的两个原因:

  • 文件系统基于区块分配的设计使得磁盘上出现碎片的概率很低,延迟分配和自动的整理策略解放了操作系统的使用者,在多数情况下不需要考虑磁盘的碎片化;

  • 固态硬盘的随机读写性能远远好于机械硬盘,随机读写和顺序读写虽然也有性能差异,但是没有机械硬盘的差异巨大,而频繁的碎片整理也会影响固态硬盘的使用寿命;


到最后,我们还是来看一些比较开放的相关问题,有兴趣的读者可以仔细思考一下下面的问题,与前面的问题不同,作者会在后面的文章中解答这两个问题:

  • 为什么固态硬盘的擦写次数有上限?

  • 机械硬盘在哪些情况下更容易损坏?


如果对文章中的内容有疑问或者想要了解更多软件工程上一些设计决策背后的原因,可以在博客下面留言,作者会及时回复本文相关的疑问并选择其中合适的主题作为后续的内容。

推荐阅读

参考资料

  1. 为什么早期的 Windows 需要整理碎片 https://draveness.me/whys-the-design-windows-defragmentation/ ↩︎

  2. Is there a tool to visualize a filesystem allocation map on Linux? https://unix.stackexchange.com/questions/30743/is-there-a-tool-to-visualize-a-filesystem-allocation-map-on-linux ↩︎

  3. Wikipedia: Apple File System https://en.wikipedia.org/wiki/Apple_File_System ↩︎

  4. HFS+ and File System Fragmentation https://developercoach.com/file-system-fragmentation/ ↩︎


本文转载自:面向信仰编程

原文链接:为什么 Linux 和 macOS 不需要碎片整理

2021-04-27 08:003796

评论 5 条评论

发布
用户头像
一个是自动,在后台默默的整理,一个是要人工整理。
2021-05-01 17:01
回复
用户头像
文中“早期的 Windows”系统可真早啊,还用 FAT 文件系统。Windows 2000 开始就默认使用 NTFS 文件系统了好吧。
2021-04-27 17:14
回复
用户头像
简单说来,macOS, Linux磁盘系统使用的链表来存储,Windows文件系统是数组,要连续存放
2021-04-27 17:01
回复
用户头像
请教一下,这个图像化显示的工具是什么?
2021-04-27 10:43
回复
用户头像
“每个区块都包含序号和一段连续的存储空间,这种分配方式会在文件系统中查找几个连续的区块来提供所需的空间”,连续区块来存储的话,那不是有很多没有充分使用的区块?
2021-04-27 09:19
回复
没有更多了
发现更多内容

基于需求文档、设计文档、测试用例的测试答疑助手

测吧(北京)科技有限公司

测试

嘉为蓝鲸受邀出席 2024 GOPS 全球运维大会 · 深圳站

嘉为蓝鲸

数字化运维 Ops GOPS大会

纬湃科技第一季度以稳健业绩开启2024财年

财见

【GaussDB(for MySQL)】 Big IN查询优化

华为云开发者联盟

数据库 华为云 华为云开发者联盟 华为云GaussDB(for MySQL) 企业号2024年5月PK榜

一文了解基于ITIL的运维管理体系框架

嘉为蓝鲸

ITSM ITIL 运维管理

一图带你解锁数字化运维的建设思路

嘉为蓝鲸

数字化运维 IT 运维

基于需求文档、设计文档、测试用例的测试答疑助手

测试人

人工智能 软件测试 测试开发

LLM 大模型学习必知必会系列(一):大模型基础知识篇

汀丶人工智能

prompt 工程 检索增强技术RAG LLM大模型

大模型驱动的新一代 BI 平台,Sugar BI 开启智慧决策新模式

百度Geek说

企业号 5 月 PK 榜 Sugar BI 企业号2024年5月PK榜

Parallels Desktop 18 for Mac(Pd虚拟机) 18.3.2通用激活版

Rose

暗黑破坏神II:狱火重生(暗黑破坏神2重制版)/毁灭之王中文版 Mac/win

Rose

淘宝商品详情API接口:实时更新商品信息与数据

技术冰糖葫芦

API 编排 API 文档 API】 API 策略 pinduoduo API

嘉为蓝鲸WeOps渠道沙龙:携手业界精英共探数字化运维新篇章

嘉为蓝鲸

weops IT 运维

LED无线显示屏的特色与优势

Dylan

性能 加密 信息 无线 LED显示屏

HBase Meta 元信息表修复实践

vivo互联网技术

HBase HBase meta表 HBase meta表修复

Mac电脑风扇控制软件:Macs Fan Control Pro 授权激活版

Rose

LLM 大模型学习必知必会系列(二):提示词工程-Prompt Engineering 以及实战闯关

汀丶人工智能

Prompt工程

为什么 Linux 和 macOS 不需要碎片整理_语言 & 开发_面向信仰编程_InfoQ精选文章