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


26

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

现在是否会自动压缩现有文件,或者我必须明确执行某些操作来导致这种情况发生?


1
您不必重新引导,只需重新启动,sudo mount -o remount /新的fstab选项即会生效。
2014年

注意,无论您做什么,您可能都需要使用compress-force选项,否则某些文件仍将保持未压缩状态……
rogerdpack 2014年

关于压缩力的注释。普通压缩的功能是,如果检测到压缩几乎没有好处,就不会为特定文件继续进行压缩(从而节省了CPU的时间)。通过使用压缩力,它无论如何都会尝试无用的压缩。适用于此的很好的例子是已经压缩的文件(多媒体,zip文件等)。换句话说,压缩力通常不是一个主意。;)
zaTricky

Answers:


27

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

常见问题解答

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


btrfs fi碎片整理-r -clzo / path / to / fs
David Goodwin,

2
关于什么autodefrag安装选项?这还会使它在自动碎片整理时压缩以前未压缩的文件吗?
Geremia

1
确保使用“ -r”递归标志在目录内进行压缩。
萨拉米香肠

10

我已经做了Norbert Fabritius所说的,但是我没有注意到现有文件中的任何压缩-df -h / btrfs fi碎片整理 = 658MB之前| DF -h / 的btrfs音响整理 = 658MB。可以使用新文件。搜索一点带给我这个报价:

运行此:

# btrfs filesystem defragment ~/stuff

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

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

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

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

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

希望能有所帮助。

对不起,我的英语。


1
1.使用btrfs时,请勿使用或信任df。2.为获得更好的压缩率,请使用zlib(但是速度较慢)
ignis 2013年

3
如果您想实际压缩内容,您的命令行不应该包含defrag -clzodefrag -czlib仅包含defrag
jbo5112

5
这里有一个“ -r”递归标志,所以您现在就可以这样做:btrfs fi defrag -r -czlib ~/stuff
Salami

8

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

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

这使用find命令在根文件系统中的每个文件上运行btrfs碎片整理程序(在开始处的“ find”命令后紧跟斜杠)。如果还有其他子卷,则可以将其与子卷的路径(例如,我在/ home中有一个)一起使用,而不是使用单个斜杠。

为此,您需要root特权,因此如果需要,可以在前面添加sudo。

看到:


3

根据https://btrfs.wiki.kernel.org/index.php/Mount_options#List_of_options提供 以下压缩算法:


compress,compress-force
Enable compression. Starting with kernel 2.6.38 you can choose the algorithm for compression:

 - compress=zlib - Better compression ratio. It's the default and safe for olders kernels.
 - compress=lzo - Faster compression.
 - compress=no - Disables compression (starting with kernel 3.6). 

compress-force= - Enable compression even for files that don't compress well, like videos and dd images of disks. The options compress-force=zlib and compress-force=lzo works for kernels >2.6.38.

Note that old (before 2012) btrfs-progs versions will probably fail some operations (e.g. fsck) on filesystems with LZO compression. 

注意:这篇文章是针对以下问题的答案:哪种压缩算法可用,请问以下问题...所以请不要怪我。


2

根据ArchWiki

提示:也可以在不使用compressmount选项的情况下按文件启用压缩 。只需将其应用于chattr +c文件即可。当应用于目录时,它将导致新文件在出现时被自动压缩。

非常好!愿上帝保佑BTRFS!

另外,从BTRFS Wiki

是否可以在不使用compress挂载选项的情况下强制对文件进行压缩

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


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.