Btrfs对文件/文件夹进行碎片整理


9

我刚刚在Btrfs文件系统上安装了Ubuntu 11.10,我想问一个有关文件碎片整理的问题。

我是否真的需要对文件或整个系统进行碎片整理?

碎片整理#btrfs文件系统碎片整理/ pool1碎片整理

Btrfs碎片整理


不,btrs,ext4、3、2,ETC ...不需要您对驱动器进行碎片整理,就像其他任何文件系统一样,它们也会遭受它的困扰。
Uri Herrera

但是与NTFS几乎没有什么不同。
Uri Herrera

Answers:


13

您实际上不需要手动对Btrfs文件系统进行碎片整理。

是的,Btrfs是COW(写时复制),这意味着它对文件的碎片要比Ext多得多,但这在设计的几个方面得到了解决,包括在文件系统在线时轻松对其进行碎片整理的能力。此摘录提供了更多详细信息(重点是我的):

自动整理碎片

COW(写时复制)文件系统具有许多优点,但也有一些缺点,例如碎片。第一次将文件写入磁盘时,Btrfs会按顺序对数据进行布局,但是COW设计意味着对文件的任何后续修改都不得写在旧数据之上,而应放在空闲块中,这将导致碎片(RPM数据库是此问题的常见情况)。此外,它还遭受了所有文件系统共同的碎片问题。

Btrfs已经提供了解决此问题的替代方法:首先,它使用命令支持联机碎片整理btrfs filesystem defragment。其次,它具有挂载选项-o nodatacow,用于禁用数据的COW。现在,btrfs添加了第三个选项,即-o autodefragmount选项。该机制检测对文件的少量随机写入,并将它们排入队列以进行自动碎片整理过程,因此文件系统在使用时会对其自身进行碎片整理。它不适用于虚拟化或大型数据库工作负载,但适用于较小的文件,例如rpm,SQLite或bdb数据库。

因此,只要您不打算在大量负载下运行像数据库一样的IO密集型软件,只要您使用该autodefrag选项挂载文件系统,就应该一切都很好。

要检查文件的碎片,可以使用filefrag实用程序:

$ find /path -type f -exec filefrag {} + >frag.list
# Now you can use your favourite tools to sort the data

在Systemd系统上,/var/log/journal/可能是最零散的。您还可以查看~/.mozilla和其他浏览器数据库。

要进行碎片整理,请使用:

$ sudo btrfs fi defrag -r /path

我怎么知道它的碎片整理...。或不...检查碎片整理状态的命令
1

3
根据BTRFS Wiki,此答案是错误的:btrfs gotchas。通过在btrfs卷上运行systemd-journald可以很容易地重现文件碎片问题。尽管我尚未进行测试,但是自动碎片整理选项可以解决此问题。
乔纳斯·谢弗

我现在已经全职使用btrfs了至少18个月,包括systemd,firefox等。使用进行的快速检查filefrag显示,日志文件的确确实是碎片化的(每个碎片平均10k扩展区),但是我没有观察到CPU峰值或性能影响。我没有autodefrag启用,将启用它并在下次重新启动时报告。
费利克斯Saparelli

所以:文件碎片确实会发生,autodefrag确实有帮助,在日常系统上对性能的影响最多是很小的。显然,繁重的服务器可能需要进行测量和调整,但是同样,这是alpha软件,因此无论如何您都希望避免使用它。
费利克斯Saparelli

find /path -type f -exec filefrag {} + >frag.list避免了FIBMAP unsupported目录和其他非常规文件中的所有错误,并且不会在奇怪的文件名上中断。
彼得·科德斯

0

为了这个话题,我认为最好澄清一下:

任何文件系统!=恢复/管理实用程序

请记住,文件系统是关于如何在物理硬件上组织数据的,所有其他活动都是通过额外的软件和实用程序完成的,尤其是在GNU / linux中,这些操作可能是由与创建者没有严格关系的人们完成的。文件系统。

Btrfs可能不是这种情况,但是有时我们会接近,因为台式机和企业环境可以提供具有不同等级可实现性的不同解决方案。

您问题的答案为“否”,但与通用文件系统的正常行为相关的“否”,因此您可以找到的每个实用程序都只是一个不同的项目。

当需要对文件系统进行碎片整理时,请记住,您将使用与文件系统本身的寿命没有真正关系的外部软件,并且具有所有优点和缺点。


0

对btrfs文件系统进行碎片整理的命令是

btrfs filesystem defragment sync -r -v -f [-czlib] / /home

0

基于此答案,我想到了:

sudo find / -xdev -type f -exec filefrag {} + | sed -En 's/(.+): (\w+) extent.*/\2 \1/p' | sort -nr

这将首先列出碎片最多的文件,格式为:

<num-fragments> <pathname>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.