当启用压缩时,btrfs 会自动压缩现有文件吗?

当启用压缩时,btrfs 会自动压缩现有文件吗?

我在 Ubuntu 12.04 LTS 安装程序中选择了 btrfs 作为文件系统格式/。安装完成后,我将其添加compress=lzo到挂载选项中/etc/fstab并重新启动。

现有文件现在会自动压缩吗,还是我必须明确地做一些事情才能使其发生?

答案1

您必须运行btrfs fi defragment以强制重新压缩现有数据。否则,只会压缩新数据。

常见问题解答

...考虑使用 重新挂载-o compress,然后就地重写特定文件,或运行btrfs fi defragment以重新压缩所有内容。这可能需要一段时间。

答案2

我按照 Norbert Fabritius 所说的做了,但我没有注意到现有文件有任何压缩 -DF-H / btrfs fi 碎片整理= 658MB |DF-H / btrfs fi 碎片整理= 658MB。新文件没问题。稍微搜索一下,我找到了以下引文:

运行这个:

# btrfs filesystem defragment ~/stuff

不对目录的内容进行碎片整理。

这是设计使然。btrfs fi defrag 对传递给它的单个文件系统对象进行操作。这意味着该命令仅对目录对象所持有的元数据进行碎片整理,而不是对目录的内容进行碎片整理。如果您想对目录的内容进行碎片整理,类似这样的操作会更有用:

# find -xdev -type f -exec btrfs fi defrag '{}' \;

在此之后,我的 / 它占用了 656MB——不算很大,但肯定存在压缩。

来源:https://btrfs.wiki.kernel.org/index.php/Problem_FAQ#Defragmenting_a_directory_doesn.27t_work

答案3

根据 Oracle 的文档,您可以通过使用 -c、-clzo 或 -czlib 选项对现有在线文件​​系统中的每个文件进行碎片整理来压缩现有文件。建议使用 LZO 以提高速度。

find / -xdev \( -type f -o -type d \) -exec btrfs filesystem defragment -v -clzo -- {} +

这将使用 find 命令对根文件系统中的每个文件运行 btrfs 碎片整理程序(由开头的“find”命令后面的斜杠给出)。如果您有其他子卷,则可以再次使用它,并使用子卷的路径(例如,我在 /home 有一个子卷)而不是单个斜杠。

为此,您需要 root 权限,因此如果需要,请在前面添加 sudo。

看:

答案4

根据维基百科

提示:也可以不使用 compressmount 选项,而是针对每个文件启用压缩;只需应用于chattr +c文件即可。当应用于目录时,它将导致新文件在出现时自动压缩。

非常好!上帝保佑 BTRFS!

另外,来自BTRFS 维基

我可以在不使用压缩安装选项?

是的。该实用程序chattr支持设置文件属性c,标记inode以压缩新写入的数据。

相关内容