btrfs怎么开启透明压缩功能



临时开启 Btrfs 透明压缩(Ubuntu 版,精简可直接记录)


全是我之前加多余参数、杂项内容搞出的坑,全部作废。只留你实测能正常用、零报错的纯净版,直接复制保存,干净无坑:

Btrfs 临时开启 Zstd 透明压缩(最终稳定版)

1. 仅首次执行(创建文件夹)

bash
运行
sudo mkdir -p /mnt/roms

2. 卸载分区(防止占用)

bash
运行
sudo umount /dev/sdd3

3. 【最终稳定挂载命令|你实测可用】

bash
运行
sudo mount -o compress=zstd /dev/sdd3 /mnt/roms

4. 验证是否开启成功(任选一个)

bash
运行
mount | grep /mnt/roms
bash
运行
findmnt /mnt/roms
✅ 看到compress=zstd就是开好。



======================================================================

一、前提确认
目标分区(比如/dev/sdd3)必须是 Btrfs 格式,可通过命令确认:
bash
运行
lsblk -f /dev/sdd3
输出中FSTYPE列显示btrfs即可。

二、操作步骤(按顺序执行)

步骤 1:创建固定挂载目录(仅需执行 1 次)

bash
运行
sudo mkdir -p /mnt/roms
(/mnt/roms是挂载点,后续复用即可,不用重复创建)

步骤 2:卸载目标分区(若之前挂载过,避免占用报错)

bash
运行
sudo umount /dev/sdd3

步骤 3:挂载并开启透明压缩(二选一,推荐版本 1)

版本 1(最简版,无冗余参数,100% 稳定)

bash
运行
sudo mount -o compress=zstd /dev/sdd3 /mnt/roms

版本 2(带用户权限,避免复制文件报错)

bash
运行
sudo mount -o compress=zstd,uid=1000,gid=1000 /dev/sdd3 /mnt/roms
(uid=1000,gid=1000适配 Ubuntu 默认用户,确保你能正常读写文件)

三、验证方法(任选其一即可)

方法 1(直接查看挂载信息)

bash
运行
mount | grep /mnt/roms
✅ 成功标志:输出中包含compress=zstd。

方法 2(读取系统挂载表,100% 准确)

bash
运行
cat /proc/mounts | grep /mnt/roms
✅ 成功标志:输出中包含compress=zstd。

方法 3(查看文件系统详情)

bash
运行
findmnt /mnt/roms
✅ 成功标志:OPTIONS列中包含compress=zstd。

补充说明(记录要点)

  1. 临时开启特性:此方法仅对当前系统生效,重启电脑后挂载会失效,需要重新执行步骤 3 的挂载命令。
  2. 仅新文件生效:透明压缩只对后续写入的新文件自动压缩,旧文件不会自动压缩。若需压缩旧文件,可执行:
    bash
    运行
    sudo btrfs filesystem defragment -r -v -czstd /mnt/roms
  3. 关键注意:挂载命令中,参数之间的逗号后不能有空格(如compress=zstd, uid=1000会报错,正确写法是compress=zstd,uid=1000)。














































==================================================================

Btrfs 永久挂载 + 永久开启 Zstd 压缩

(只留必要步骤,关键项单独说明,测试通过再重启

1. 查看你的分区 UUID(必须)

bash
运行
blkid /dev/sdd3
  • 看输出:找到UUID="一串字母数字",复制引号里面这一整串。

2. 备份系统挂载配置(防翻车,必做)

bash
运行
sudo cp /etc/fstab /etc/fstab.bak
  • 作用:改错能还原,不会系统崩溃。

3. 编辑永久配置文件

bash
运行
sudo nano /etc/fstab
拉到文件最底部,单独新加一行,格式:
plaintext
UUID=你刚复制的UUID   /mnt/roms   btrfs   compress=zstd   0 0
  • 替换:把你刚复制的UUID换成第 1 步复制的那串
  • 参数解释:
    • compress=zstd:永久透明压缩
    • 无多余垃圾参数,和你临时能用的命令保持一致

保存退出

Ctrl+O→ 回车 →Ctrl+X

4. 检测配置有没有错(关键!不用重启)

bash
运行
sudo mount -a 
  • 无任何文字、无报错 = 完全正确
  • 要是爆红报错:立刻删掉刚才加的那行就行

5. 验证永久压缩是否生效

bash
运行
findmnt /mnt/roms
  • 看输出OPTIONS列:有 compress=zstd 就成功

补充关键说明

  1. 现在不用重启,已经永久生效;后续关机、断电、重启自动挂载 + 自动开压缩。
  2. 全程只用了稳定参数,没有之前出错的冗余选项,不会冲突。
  3. 旧文件依旧不会自动压缩,只对新建 / 复制进去的文件生效。







































======================================================

零报错的挂载命令(临时开启透明压缩)

先把你之前的命令清掉,用这两条里的任意一条,完全复制粘贴,别改任何东西

版本 1(稳妥版,适合大多数情况)

bash
运行
sudo mount -o compress=zstd /dev/sdd3 /mnt/roms

版本 2(带权限,避免复制文件报错)

bash
运行
sudo mount -o compress=zstd,uid=1000,gid=1000 /dev/sdd3 /mnt/roms
⚠️ 注意:
  • 选项里绝对不能有空格,比如compress=zstd, uid=1000这种逗号后面带空格的写法会直接报错。
  • 必须先执行过sudo mkdir -p /mnt/roms(你已经做过了,不用再弄)。

✅ 三种验证方法(挂载成功后用,哪个都行)

挂载命令执行后,如果终端没有任何报错(直接回到$提示符),就说明挂载成功了,然后用下面任意一条命令看有没有开成zstd:

方法 1(最直接)

bash
运行
mount | grep /mnt/roms
如果输出里有compress=zstd,就说明开好了。

方法 2(更稳定,不会漏)

bash
运行
findmnt /mnt/roms
看OPTIONS那一行,有没有compress=zstd。

方法 3(看内核级挂载信息,100% 准确)

bash
运行
cat /proc/mounts | grep /mnt/roms
这条是直接读系统的挂载表,只要有compress=zstd,就绝对没问题。





============================================================================

场景 2:永久开启(写到配置文件,重启自动带压缩)

适合长期用,比如给 Batocera 用,重启不用手动挂载,稳到不出错的步骤:
  1. 先获取分区的 UUID(用 UUID 挂载比盘符稳,不会因为插硬盘顺序变了出错):
    bash
    运行
    blkid /dev/sdd3
    输出里会有类似UUID="7b522281-a1d1-4c43-9e6f-3615cd9ffb5f"的内容,把引号里的 UUID 复制下来。
  2. 备份配置文件(关键!防止写错开不了机)
    bash
    运行
    sudo cp /etc/fstab /etc/fstab.bak
  3. 编辑配置文件:
    bash
    运行
    sudo nano /etc/fstab
  4. 在文件最后加一行(把你的UUID替换成刚才复制的,其他别动):
    bash
    运行
    UUID=你的UUID /mnt/roms btrfs defaults,compress=zstd,uid=1000,gid=1000 0 0 
    比如你的 UUID 是7b522281-a1d1-4c43-9e6f-3615cd9ffb5f,就写成:
    bash
    运行
    UUID=7b522281-a1d1-4c43-9e6f-3615cd9ffb5f /mnt/roms btrfs defaults,compress=zstd,uid=1000,gid=1000 0 0 
  5. 保存退出:按Ctrl+O→ 回车 → 按Ctrl+X
  6. 测试配置有没有错误(关键!这步能避免写错导致开不了机)
    bash
    运行
    sudo mount -a 
    没报错就是写对了!
  7. 重启验证:
    bash
    运行
    sudo reboot 
    重启后再执行mount | grep /mnt/roms,能看到compress=zstd就成功了。

补充:旧文件怎么压缩?

透明压缩只对新写入的文件生效,旧文件不会自动压缩。想把旧文件也压了,执行这个命令(确保文件没被占用,比如别在复制 / 打开文件的时候跑):
bash
运行
sudo btrfs filesystem defragment -r -v -czstd /mnt/roms
  • -r:递归处理所有文件
  • -v:显示进度,能看到过程
  • -czstd:用 zstd 重新压缩
跑完之后,用这个命令看压缩率(比如Data ratio: 1.30,就是说 1.3G 的文件只占了 1G 空间):
bash
运行
btrfs filesystem usage /mnt/roms

避坑提醒(别踩这些错)

  1. 别写错压缩算法:只能用compress=zstd/compress=lzo/compress=zlib,推荐zstd,别写别的。
  2. 挂载时别忘加-o:比如写成mount /dev/sdd3 /mnt/roms compress=zstd会报错,必须是-o compress=zstd。
  3. 别用compress-force:会强制压缩所有文件(包括本来就压过的 zip/7z),反而浪费 CPU,用默认的compress=zstd就行,它会自动跳过已压缩的文件。
  4. 配置文件写错了怎么办?如果重启进不去系统,用 Ubuntu Live 盘启动,挂载系统盘,把/etc/fstab.bak恢复成/etc/fstab就行,所以之前的备份一定要做。

你直接按场景 1 或场景 2 的步骤做就行,不用混着来,每一步都有验证,不会出问题。




刀神道一奶-商品自动发货系统

联系我们 订单查询