mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
531 字
2 分钟
为什么 Linux 和 macOS 不需要碎片整理
2023-12-09

Windows 用户经常需要运行磁盘碎片整理工具,但 Linux 和 macOS 用户几乎从不需要。这是为什么?

一、什么是磁盘碎片#

1.1 碎片是如何产生的#

flowchart LR subgraph 初始状态 F1[文件 A] F2[文件 B] F3[文件 C] end subgraph 删除文件 B 后 G1[文件 A] G2[空白] G3[文件 C] end subgraph 写入新文件 D(大于空白,小于 A+C) H1[文件 A] H2[文件 D 部分1] H3[文件 C] H4[文件 D 部分2] end Note over H1,H4: 文件 D 被分散到多处

1.2 碎片的影响#

碎片程度读取延迟增加
0%基准
10%~5%
20%~15%
50%~50%

二、Windows 的碎片问题#

2.1 NTFS 的设计#

NTFS(New Technology File System)在小文件处理和磁盘空间管理上有一些历史包袱:

特性影响
MFT 预留预留 12.5% 空间
日志写入频繁小量写入
磁盘空间分配容易产生碎片

2.2 Windows 的碎片整理#

# Windows 碎片整理
defrag C: /H /V
# /H - 在系统运行时也能整理
# /V - 显示详细输出

三、Linux 的 ext4 设计#

3.1 ext4 的延迟分配#

flowchart LR A[应用程序写入] --> B[数据写入内存] B -->|延迟| C[等待更多数据] C -->|累积足够| D[一次性写入连续块] D --> E[减少碎片] Note: ext4 不会立即写入磁盘<br/>而是等待累积足够数据后<br/>一次性写入连续区域

3.2 ext4 的块组#

flowchart TB subgraph ext4 块组结构 G1[块组 0] -->|元数据| M1[MFT] G1 -->|数据| D1[数据块] G2[块组 1] G3[块组 2] G2 --> D2[数据块] G3 --> D3[数据块] end Note: 每个块组尽可能<br/>将文件数据放在组内

3.3 ext4 的多块分配#

// ext4 可以一次分配多个数据块
// 写入大文件时,尽可能分配连续块
// mballoc 分配器
ext4_mb_regular_allocator()

四、macOS 的 APFS 设计#

4.1 APFS 的空间共享#

flowchart LR subgraph APFS 容器 V1[卷 1: 用户数据] V2[卷 2: 系统] V3[卷 3: 工作文件] C[共享容器池] end Note: APFS 使用空间共享<br/>而不是预分配

4.2 APFS 的写入优化#

# APFS 的写入策略
# 1. 延迟写入
# 2. 写入时复制 (Copy-on-Write)
# 3. 克隆文件(不占用额外空间)

五、现代文件系统的优化#

5.1 SSD 的影响#

flowchart LR subgraph SSD 的特性 R[随机读取] S[顺序读取] Note: SSD 随机读取 ≈ 顺序读取 Note: 碎片影响大幅降低 end

SSD 时代:碎片整理不再是性能瓶颈,反而会损耗 SSD 寿命。

5.2 Btrfs 和 ZFS#

# Btrfs 的自动平衡
btrfs balance start /path
# Btrfs 会自动整理数据分布
# 但不是传统意义上的碎片整理

六、Linux 真的不需要碎片整理吗?#

6.1 极端情况#

# 检查文件系统碎片
sudo fsck.ext4 -n /dev/sda1
# 查看 f_files 和 f_blocks 的比例
# 或者使用 e2freefrag
sudo e2freefrag /dev/sda1

6.2 何时需要整理#

场景是否需要
SSD + ext4不需要
HDD + ext4极端情况下可能需要
数据库大文件可能需要
虚拟机磁盘可能需要

七、总结#

7.1 Linux/macOS 不需要碎片整理的原因#

原因说明
延迟分配ext4 延迟写入,合并小写入
块组设计ext4 将相关数据放在同组
SSD 普及随机读写不再慢
Copy-on-WriteAPFS/ZFS 使用 COW

7.2 文件系统对比#

文件系统碎片整理需求原因
NTFS需要历史设计
ext4不需要延迟分配、多块分配
XFS不需要延迟分配、B+ 树管理
APFS不需要Copy-on-Write
Btrfs不需要COW + 平衡

核心观点:现代文件系统通过延迟分配、连续块分配和 COW 等技术,在设计层面就避免了碎片问题。SSD 的普及进一步降低了对碎片整理的需求。

参考资料#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

为什么 Linux 和 macOS 不需要碎片整理
https://blog.souloss.com/posts/why-the-design/why-linux-and-macos-dont-need-defragmentation/
作者
Souloss
发布于
2023-12-09
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时