btrfs怎么开启透明压缩功能
sudo mount -o compress=zstd /dev/sdd3 /mnt/roms
✅ 看到compress=zstd就是开好。
======================================================================
一、前提确认
目标分区(比如/dev/sdd3)必须是 Btrfs 格式,可通过命令确认:
输出中FSTYPE列显示btrfs即可。
(/mnt/roms是挂载点,后续复用即可,不用重复创建)
sudo mount -o compress=zstd /dev/sdd3 /mnt/roms
sudo mount -o compress=zstd,uid=1000,gid=1000 /dev/sdd3 /mnt/roms
(uid=1000,gid=1000适配 Ubuntu 默认用户,确保你能正常读写文件)
✅ 成功标志:输出中包含compress=zstd。
cat /proc/mounts | grep /mnt/roms
✅ 成功标志:输出中包含compress=zstd。
✅ 成功标志:OPTIONS列中包含compress=zstd。
-
临时开启特性:此方法仅对当前系统生效,重启电脑后挂载会失效,需要重新执行步骤 3 的挂载命令。
-
仅新文件生效:透明压缩只对后续写入的新文件自动压缩,旧文件不会自动压缩。若需压缩旧文件,可执行:
sudo btrfs filesystem defragment -r -v -czstd /mnt/roms
-
关键注意:挂载命令中,参数之间的逗号后不能有空格(如compress=zstd, uid=1000会报错,正确写法是compress=zstd,uid=1000)。
(只留必要步骤,关键项单独说明,测试通过再重启)
-
看输出:找到UUID="一串字母数字",复制引号里面这一整串。
sudo cp /etc/fstab /etc/fstab.bak
拉到文件最底部,单独新加一行,格式:
UUID=你刚复制的UUID /mnt/roms btrfs compress=zstd 0 0
-
替换:把你刚复制的UUID换成第 1 步复制的那串
-
参数解释:
-
compress=zstd:永久透明压缩
-
无多余垃圾参数,和你临时能用的命令保持一致
Ctrl+O→ 回车 →Ctrl+X
-
无任何文字、无报错 = 完全正确
-
要是爆红报错:立刻删掉刚才加的那行就行
-
看输出OPTIONS列:有 compress=zstd 就成功
-
现在不用重启,已经永久生效;后续关机、断电、重启自动挂载 + 自动开压缩。
-
全程只用了稳定参数,没有之前出错的冗余选项,不会冲突。
-
旧文件依旧不会自动压缩,只对新建 / 复制进去的文件生效。
======================================================
先把你之前的命令清掉,用这两条里的任意一条,完全复制粘贴,别改任何东西:
sudo mount -o compress=zstd /dev/sdd3 /mnt/roms
sudo mount -o compress=zstd,uid=1000,gid=1000 /dev/sdd3 /mnt/roms
⚠️ 注意:
-
选项里绝对不能有空格,比如compress=zstd, uid=1000这种逗号后面带空格的写法会直接报错。
-
必须先执行过sudo mkdir -p /mnt/roms(你已经做过了,不用再弄)。
挂载命令执行后,如果终端没有任何报错(直接回到$提示符),就说明挂载成功了,然后用下面任意一条命令看有没有开成zstd:
如果输出里有compress=zstd,就说明开好了。
看OPTIONS那一行,有没有compress=zstd。
cat /proc/mounts | grep /mnt/roms
这条是直接读系统的挂载表,只要有compress=zstd,就绝对没问题。
适合长期用,比如给 Batocera 用,重启不用手动挂载,稳到不出错的步骤:
-
先获取分区的 UUID(用 UUID 挂载比盘符稳,不会因为插硬盘顺序变了出错):
输出里会有类似UUID="7b522281-a1d1-4c43-9e6f-3615cd9ffb5f"的内容,把引号里的 UUID 复制下来。
-
备份配置文件(关键!防止写错开不了机):
sudo cp /etc/fstab /etc/fstab.bak
-
编辑配置文件:
-
在文件最后加一行(把你的UUID替换成刚才复制的,其他别动):
UUID=你的UUID /mnt/roms btrfs defaults,compress=zstd,uid=1000,gid=1000 0 0
比如你的 UUID 是7b522281-a1d1-4c43-9e6f-3615cd9ffb5f,就写成:
UUID=7b522281-a1d1-4c43-9e6f-3615cd9ffb5f /mnt/roms btrfs defaults,compress=zstd,uid=1000,gid=1000 0 0
-
保存退出:按Ctrl+O→ 回车 → 按Ctrl+X
-
测试配置有没有错误(关键!这步能避免写错导致开不了机):
没报错就是写对了!
-
重启验证:
重启后再执行mount | grep /mnt/roms,能看到compress=zstd就成功了。
透明压缩只对新写入的文件生效,旧文件不会自动压缩。想把旧文件也压了,执行这个命令(确保文件没被占用,比如别在复制 / 打开文件的时候跑):
sudo btrfs filesystem defragment -r -v -czstd /mnt/roms
-
-r:递归处理所有文件
-
-v:显示进度,能看到过程
-
-czstd:用 zstd 重新压缩
跑完之后,用这个命令看压缩率(比如Data ratio: 1.30,就是说 1.3G 的文件只占了 1G 空间):
btrfs filesystem usage /mnt/roms
-
别写错压缩算法:只能用compress=zstd/compress=lzo/compress=zlib,推荐zstd,别写别的。
-
挂载时别忘加-o:比如写成mount /dev/sdd3 /mnt/roms compress=zstd会报错,必须是-o compress=zstd。
-
别用compress-force:会强制压缩所有文件(包括本来就压过的 zip/7z),反而浪费 CPU,用默认的compress=zstd就行,它会自动跳过已压缩的文件。
-
配置文件写错了怎么办?如果重启进不去系统,用 Ubuntu Live 盘启动,挂载系统盘,把/etc/fstab.bak恢复成/etc/fstab就行,所以之前的备份一定要做。
你直接按场景 1 或场景 2 的步骤做就行,不用混着来,每一步都有验证,不会出问题。