如何让Btrfs文件系统的压缩级别设置自动传递给文件和子文件夹?
如何让Btrfs文件系统的压缩级别设置自动传递给文件和子文件夹?
你遇到的这个情况其实是Btrfs早期属性继承机制的一个小局限——默认情况下,给目录设置的带级别压缩属性(比如zstd:8),只会把压缩类型(zstd)传递给新创建的文件和子目录,具体的级别不会被继承。不过现在有几种实用的解决办法:
方法一:升级内核与Btrfs工具到新版本
从Linux内核5.15版本、btrfs-progs 5.16版本开始,Btrfs已经修复了这个问题。只要把系统的内核和Btrfs工具升级到这个版本以上,你最初执行的命令:
btrfs property set -t directory <folder> compression zstd:8
设置的zstd:8完整压缩规则就会自动传递给文件夹下所有新创建的文件和子目录了。
方法二:手动开启属性继承(适配旧版本系统)
如果暂时没法升级系统,可以通过设置inherit属性强制让目录的完整压缩设置传递下去。执行下面两条命令:
# 先给目录设置zstd:8的压缩属性 btrfs property set -t directory <folder> compression zstd:8 # 开启compression属性的继承功能 btrfs property set -t directory <folder> inherit compression
完成后,新创建的文件和子目录就会继承zstd:8的完整压缩配置了。
方法三:给已存在的文件补设压缩级别
如果文件夹里已经有一批文件没带上目标压缩级别,可以用碎片整理命令重新压缩并应用级别:
btrfs filesystem defrag -czstd:8 -r <folder>
这个命令会递归处理目标文件夹下的所有文件,用zstd:8重新压缩它们,同时更新文件的压缩属性。
额外提醒:部分应用程序在创建文件时可能会显式设置自身的压缩属性,这会覆盖继承的设置,遇到这种情况就需要单独处理这些文件啦。
备注:内容来源于stack exchange,提问作者Kurt Fitzner
相关产品推荐
相关产品推荐

