![当启用压缩时,btrfs 会自动压缩现有文件吗?](https://linux22.com/image/817171/%E5%BD%93%E5%90%AF%E7%94%A8%E5%8E%8B%E7%BC%A9%E6%97%B6%EF%BC%8Cbtrfs%20%E4%BC%9A%E8%87%AA%E5%8A%A8%E5%8E%8B%E7%BC%A9%E7%8E%B0%E6%9C%89%E6%96%87%E4%BB%B6%E5%90%97%EF%BC%9F.png)
我在 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。
看: