如何在 Linux 中整理磁盘碎片

有一个神话是 linux 的磁盘历来不须要整理碎片。在大多数状况下这是真的,大多数由于是使用的是优秀的日志文件系统(ext三、4等等)来处理文件系统。然而,在一些特殊状况下,碎片仍旧会产生。若是正巧发生在你身上,解决方法很简单。linux

 

什么是磁盘碎片安全

文件系统会按块更新文件,若是这些块没有连成一整块而是分布在磁盘的各个角落中时,就会造成磁盘碎片。这对于 FAT 和 FAT32 文件系统而言是这样的。在 NTFS 中这种状况有所减轻,但在 Linux(extX)中却几乎不会发生。下面是缘由:运维

在像 FAT 和 FAT32 这类文件系统中,文件紧挨着写入到磁盘中。文件之间没有空间来用于增加或者更新:spa

NTFS 中在文件之间保留了一些空间,所以有空间进行增加。但因块之间的空间是有限的,碎片也会随着时间出现。.net

Linux 的日志型文件系统采用了一个不一样的方案。与文件相互挨着不一样,每一个文件分布在磁盘的各处,每一个文件之间留下了大量的剩余空间。这就给文件更新和增加留下了很大的空间,碎片不多会发生。日志

此外,碎片一旦出现了,大多数 Linux 文件系统会尝试将文件和块从新连续起来。视频

 

Linux 中的磁盘整理教程

除非你用的是一个很小的硬盘或者空间不够了,否则 Linux 不多会须要磁盘整理。一些可能须要磁盘整理的状况包括:get

 

若是你编辑的是大型视频文件或者 RAW 照片,但磁盘空间有限it

若是你使用一个老式硬件,如旧笔记本,你的硬盘会很小

若是你的磁盘开始满了(大约使用了85%)

若是你的家目录中有许多小分区

最好的解决方案是购买一个大硬盘。若是不可能,磁盘碎片整理就颇有用了。

 

如何检查碎片

fsck 命令会为你作这个,换句话说,若是你能够在 LiveCD 中运行它,那么就能够用于全部卸载的分区。

这一点很重要:在已经挂载的分区中运行 fsck 将会严重危害到你的数据和磁盘。

你已经被警告过了。开始以前,先作一个完整的备份。

免责声明: 本文的做者与本站将不会对您的文件、数据、系统或者其余损害负责。你须要本身承担风险。若是你继续,你须要接受并了解这点。

你应该启动到一个 live 会话中(如使用安装磁盘,系统救援CD等)并在你卸载的分区上运行 fsck 。要检查是否有任何问题,请在使用 root 权限运行下面的命令:

fsck -fn [/path/to/your/partition]

您能够运行如下命令找到分区的路径

sudo fdisk -l

有一个在已挂载的分区中运行 fsck(相对)安全的方法是使用-n开关。这会对分区进行只读文件系统检查,而不会写入任何东西。固然,这并不能保证十分安全,你应该在建立备份以后进行。在 ext3 中,运行

 

sudo fsck.ext3 -fn /path/to/your/partition

这会产生大量的输出,大多数错误信息的缘由是分区已经挂载了。最后会给出一个碎片相关的信息。

 

若是碎片率大于 20% 了,那么你应该开始整理你的磁盘碎片了。

 

如何简单地在 Linux 中整理碎片

你要作的是备份你全部的文件和数据到另一块硬盘中(手动复制他们),格式化分区,而后从新复制回去(不要使用备份软件)。日志型文件系统会把它们做为新的文件,并将它们整齐地放置到磁盘中而不产生碎片。

要备份你的文件,运行

cp -afv [/path/to/source/partition]/* [/path/to/destination/folder]

记住星号(*)是很重要的。

注意:一般认为复制大文件或者大量文件,使用 dd 或许是最好的。这是一个很是底层的操做,它会复制一切,包含空闲的空间甚至是留下的垃圾。这不是咱们想要的,所以这里最好使用 cp。

如今你只须要删除源文件。

 

sudo rm -rf [/path/to/source/partition]/*

可选:你可使用以下命令将空闲空间用零填充。也能够用格式化来达到这点,可是若是你并无复制整个分区而仅仅是复制大文件(它一般会造成碎片)的话,就不该该使用格式化的方法了。

sudo dd if=/dev/zero of=[/path/to/source/partition]/temp-zero.txt

等待它结束。你能够用 pv 来监测进度。

sudo apt-get install pv

sudo pv -tpreb | of=[/path/to/source/partition]/temp-zero.txt

这就完成了,只要删除这个用于填充的临时文件就行。

sudo rm [/path/to/source/partition]/temp-zero.txt

待你清零了空闲空间(或者跳过了这步)。从新复制回文件,将第一个cp命令翻转一下:

 

cp -afv [/path/to/original/destination/folder]/* [/path/to/original/source/partition]

 

使用 e4defrag

若是你想要简单的方法,安装 e2fsprogs,

sudo apt-get install e2fsprogs

用 root 权限在分区中运行 e4defrag。若是你不想或不能卸载该分区,你可使用它的挂载点而不是路径。要整理整个系统的碎片,运行:

sudo e4defrag  /

在挂载的状况下不保证成功(你也应该在它运行时不要使用你的系统),可是它比复制所有文件再从新复制回来简单多了。

 

总结

linux 系统中因为它的日志型文件系统有效的数据处理不多会出现碎片。若是你因任何缘由产生了碎片,简单的方法是从新分配你的磁盘,如复制出去全部文件并复制回来,或者使用e4defrag。然而重要的是保证你数据的安全,所以在进行任何可能影响你所有或者大多数文件的操做以前,确保你的文件已经被备份到了另一个安全的地方去了。

免费领取兄弟连IT教育原创linux运维工程师视频/细说linux教程,详情咨询官网客服:http://www.lampbrother.net/linux/

或者勾搭Q2430675018

欢迎加入linux交流群 478068715

相关文章
相关标签/搜索