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

ænd*_*rük 29 btrfs compression

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

现在会自动压缩现有文件,还是我必须明确地做一些事情来导致这种情况发生?

小智 29

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

常见问题

...考虑使用 重新挂载-o compress,并就地重写特定文件,或运行btrfs fi defragment以重新压缩所有内容。可能还要等一下。

  • `autodefrag` 挂载选项怎么样?这是否也使它在自动碎片整理时压缩以前未压缩的文件? (3认同)
  • 确保使用“-r”递归标志在目录内进行压缩。 (3认同)

小智 9

我已经做了 Norbert Fabritius 所说的,但我没有注意到现有文件中有任何压缩 - df -h / before btrfs fi defragment = 658MB | DF -h / 的btrfs音响整理= 658MB。新文件没问题。稍微搜索一下给我带来了这句话:

运行这个:

# btrfs filesystem defragment ~/stuff

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

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

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

在此之后,我的 / 它占用了 656MB - 没什么大不了的,但肯定有压缩。

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

希望这有帮助。

对不起我的英语。

  • 有一个“-r”递归标志,所以你现在可以这样做:`btrfs fi defrag -r -czlib ~/stuff` (7认同)
  • 如果您想实际压缩内容,您的命令行不应该包含`defrag -clzo` 或`defrag -czlib` 而不仅仅是`defrag`? (4认同)

Geo*_*off 7

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

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

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

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

看: