为什么 Linux 不需要碎片整理

如果您是 Linux 用户,您可能听说过不需要对 Linux 文件系统进行碎片整理。您还会注意到 Linux 发行版不附带磁盘碎片整理实用程序。但这是为什么呢?
要理解为什么 Linux 文件系统在正常使用中不需要碎片整理——而 Windows 文件系统需要——你需要理解为什么会产生碎片,以及 Linux 和 Windows 文件系统的工作方式有何不同。
什么是碎片化
许多 Windows 用户,即使是没有经验的用户,都认为定期对文件系统进行碎片整理会加快计算机速度。很多人不知道这是为什么。
简而言之,硬盘驱动器上有许多扇区,每个扇区可以包含一小段数据。文件,尤其是大文件,必须存储在多个不同的扇区中。假设您将许多不同的文件保存到您的文件系统。这些文件中的每一个都将存储在连续的扇区集群中。稍后,您更新了您最初保存的其中一个文件,增加了文件的大小。文件系统将尝试将文件的新部分存储在原始部分旁边。不幸的是,如果没有足够的不间断空间,文件必须分成多个部分——这一切对你来说都是透明的。当您的硬盘读取文件时,其磁头必须在硬盘驱动器上的不同物理位置之间跳来跳去以读取每个扇区块——这会减慢速度。
碎片整理是一个密集的过程,它移动文件的各个部分以减少碎片,确保每个文件在驱动器上都是连续的。

当然,这对于固态硬盘来说是不同的,它没有移动部件,不应该进行碎片整理——对 SSD 进行碎片整理实际上会缩短其使用寿命。而且,在最新版本的 Windows 上,您真的不需要担心对文件系统进行碎片整理——Windows 会自动为您完成这项工作。有关碎片整理最佳实践的更多信息,请阅读本文:
HTG 解释:您真的需要对 PC 进行碎片整理吗?
Windows 文件系统的工作原理
微软的旧 FAT 文件系统——最后一次默认出现在 Windows 98 和 ME 上,尽管它今天仍在 USB 闪存驱动器上使用——并没有尝试智能地排列文件。当您将文件保存到 FAT 文件系统时,它会将其保存在尽可能靠近磁盘开头的位置。当您保存第二个文件时,它会在第一个文件之后立即保存——依此类推。当原始文件变大时,它们总是会变得支离破碎。附近没有可供他们成长的空间。
微软较新的 NTFS 文件系统在 Windows XP 和 2000 的消费 PC 上取得了成功,它试图变得更智能一些。它会在驱动器上的文件周围分配更多“缓冲区”可用空间,但正如任何 Windows 用户都可以告诉您的那样,随着时间的推移,NTFS 文件系统仍然会变得碎片化。
由于这些文件系统的工作方式,它们需要进行碎片整理以保持最佳性能。 Microsoft 通过在最新版本的 Windows 的后台运行碎片整理过程来缓解这个问题。

Linux 文件系统的工作原理
Linux 的 ext2、ext3 和 ext4 文件系统——ext4 是 Ubuntu 和大多数其他当前 Linux 发行版使用的文件系统——以更智能的方式分配文件。 Linux 文件系统不是将多个文件彼此靠近放置在硬盘上,而是将不同的文件分散在整个磁盘上,从而在它们之间留出大量的空闲空间。当文件被编辑并需要增长时,通常有足够的可用空间供文件增长。如果确实发生碎片,文件系统将尝试四处移动文件以减少正常使用中的碎片,而不需要碎片整理实用程序。

由于这种方法的工作方式,如果您的文件系统已满,您将开始看到碎片。如果它已满 95%(甚至 80%),您将开始看到一些碎片。但是,文件系统旨在避免在正常使用中产生碎片。
如果您在 Linux 上遇到碎片问题,您可能需要更大的硬盘。如果您确实需要对文件系统进行碎片整理,最简单的方法可能也是最可靠的:将所有文件从分区中复制出来,从分区中擦除文件,然后将文件复制回分区中。当您将文件复制回磁盘时,文件系统会智能地分配文件。
您可以使用 fsck 命令测量 Linux 文件系统的碎片——在输出中查找“非连续索引节点”。
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts