【验证OK】【透明压缩】怎样在batpcera系统的【SHARE】分区设置成进入【batacera】系统自动开启透明压缩格式
全程在 Ubuntu 里操作、一次搞定、进 Batocera 自动生效的极简流程,全程不碰 Batocera 系统,压缩和自动挂载都在 Ubuntu 里提前配置好,不会失效。
核心原理先给你说清(只说关键)
全程 Ubuntu 操作流程(按顺序来,别跳步)
1. 格式化目标分区为 Btrfs,并设置默认 Zstd 透明压缩
-
打开 GParted,找到你要做 Btrfs 的那个146.01 GiB未分配空间,右键「新建」。
- 文件系统:选btrfs
- 分区大小:默认占满所有空间即可
- 分区名:随便填(比如BATOCERA_ROMS)
- 点击「添加」,然后点工具栏的✔️应用,完成格式化。
- 打开 Ubuntu 终端,给刚建好的 Btrfs 分区设置默认压缩属性(关键,永久写入分区元数据)
(-O compress-force=zstd是关键:把 zstd 设为分区默认压缩,任何系统挂载都会自动启用)
2. 获取 Btrfs 分区的 UUID(必须,后面配置要用)
复制输出里UUID="一串字母数字"中引号内的完整字符串,后面要用。
========================================
3. 挂载 Batocera 的SHARE分区(你的那个 59.98G 的 exfat 分区)
4. 写入 Batocera 的自动挂载配置(关键,进系统自动挂载)
在文件里单独加一行,格式如下(把你的UUID换成第 2 步复制的那串):
====【UUID=你的UUID /userdata/roms btrfs defaults 0 0 】=====
加入磁盘跳过检测(重要)不然没办法开机,卡开机
完整配置行(直接复制替换即可)
==【UUID=你的分区UUID /userdata/roms btrfs defaults,nofail 0 0】====
=========================================
=【UUID=你的分区UUID /userdata/roms btrfs defaults,nofail 0 0 】===
=========================================================
修改说明(仅补充你要的部分)
- 关键添加项:在defaults后面加,nofail(用逗号隔开,无空格)
- 参数作用:nofail会让系统在检测不到该分区时直接跳过挂载,不会卡在开机流程
- 替换项:把你的分区UUID换成你用blkid命令获取到的 Btrfs 分区 UUID 即可
========================================
- 这里不用写compress=zstd,因为我们第 1 步已经把 zstd 设为分区默认属性了,Batocera 挂载时会自动启用。
- 挂载点/userdata/roms是 Batocera 默认识别的游戏目录,直接用这个就行。
因为前面创建的是临时文件所以还不能够保存【新开一个终端,执行如下】
编辑好配置行后,按Ctrl+O→ 回车 →Ctrl+X就能正常保存了。
5. 卸载所有分区,完成操作
=【# 卸载SHARE分区 sudo umount /mnt/batocera_share # (可选)验证Btrfs分区的默认压缩是否生效 sudo mkdir -p /mnt/test_btrfs sudo mount /dev/sdc4 /mnt/test_btrfs sudo btrfs filesystem df /mnt/test_btrfs # 看到输出里有compress: zstd,说明压缩属性已经写入分区,没问题 sudo umount /mnt/test_btrfs 】=====
=============================================================
操作完成,直接插回电脑启动 Batocera 即可
- 系统会自动读取你写的配置,挂载 Btrfs 分区到/userdata/roms
- 分区的默认 zstd 压缩会自动启用,新建 / 复制进去的文件都会自动透明压缩
- 配置永久生效,重启 / 断电都不会失效
=============================
一、快速进入终端(3种方式)
-
虚拟TTY直达(推荐,游戏全屏卡死时)按下组合键:【Ctrl】+【Alt】+【F5】(Batocera v32+)旧版(v31及以前):【Ctrl】+【Alt】+【F3】登录凭证:用户名root,密码linux(默认,无需修改)
-
快捷键快速杀模拟器(优先尝试)无需进终端:【RIGHT ALT】+【F3】→ 执行batocera-es-swissknife --emukill,直接强制关闭当前模拟器/游戏
-
系统菜单打开Xterm(游戏未完全卡死时)按【F1】打开文件管理器 → 进入Applications菜单 → 启动Xterm终端
二、终端内杀进程(按优先级执行)
-
精准杀模拟器进程(推荐)bash运行
# 查RetroArch类模拟器PID pidof retroarch # 强制终止(-9信号) kill -9 [PID] # 替换[PID]为实际数值 # 或批量终止所有RetroArch进程 killall -9 retroarch ```{insert\_element\_4\_}
-
通用杀法(适配所有游戏/模拟器)bash运行
# 查进程名(如Steam游戏) ps aux | grep 游戏名/模拟器名 # 按进程名强制终止所有实例 pkill -9 进程名 # 或 killall -9 进程名
-
极端情况:重启核心服务bash运行
# 重启EmulationStation(游戏列表界面) batocera-es-swissknife --restart # 或 /etc/init.d/S31emulationstation restart {insert\_element\_5\_} # 重启Xorg服务器(显示系统崩溃时) /etc/init.d/S30xorg restart # 或快捷键:【RIGHT ALT】+【F2】 {insert\_element\_6\_} # 安全重启系统(所有方法无效时) reboot
三、返回Batocera图形界面
四、实用技巧与避坑
- 优先用快捷键:RIGHT ALT+F3(杀模拟器)、RIGHT ALT+F2(重启显示)比进终端更快
- 慎用kill -9:先尝试kill [PID](温和终止),无效再用-9强制信号
- SSH远程操作:若主机无键盘,可通过SSH连接(ssh root@batocera-IP,密码linux)执行上述命令
五、命令速查清单
| 场景 | 命令 |
|---|---|
| 查RetroArch PID | pidof retroarch |
| 强制杀单个进程 | kill -9 [PID] |
| 批量杀进程 | killall -9 进程名 |
| 重启EmulationStation | batocera-es-swissknife --restart |
| 重启Xorg | /etc/init.d/S30xorg restart |
| 重启系统 | reboot |
极简一步到位,不啰嗦
-
卡死直接按:Ctrl + Alt + F5 进纯终端
-
登录用户名:root密码:linux
-
直接复制输这行,全部卡死程序一键杀光,不用找进程名:
pkill -9 -f .*
- 杀完按:Ctrl + Alt + F2 切回游戏界面
就用这两条,百分百能杀掉,复制直接输,别搞别的
killall -9 retroarch
batocera-es-swissknife --restart
reboot
一、这个报错是什么意思?
- 核心问题:你运行的游戏《随动回旋镖》(Boomerang Fu.exe)在Wine环境里运行出错,直接崩了。
- 报错原因:要么是游戏本身有bug,要么是Batocera里的Wine(跑Windows游戏的兼容层)版本不兼容这个游戏。
- 你之前杀不掉的原因:左上角的WineDbg attached to pid 0104是Wine自带的调试器,它也在后台占着进程,所以普通的杀游戏进程命令清不干净。
二、直接复制就能用的命令(按顺序试,100%清干净)
- 按Ctrl+Alt+F5进纯终端
- 账号:root,密码:linux
1. 先杀这个游戏的进程(精准定位)
pkill -9 -f "Boomerang Fu.exe"
2. 再杀所有Wine相关进程(把调试器一起清掉)
pkill -9 -f wine
3. 还卡就重启显示服务(直接回到Batocera主界面)
/etc/init.d/S30xorg restart
4. 终极兜底:直接重启系统
reboot
三、后续如果每次都崩怎么办?
1. 【首选】一键杀光所有Wine/兼容层进程(解决你之前杀不死的问题)
pkill -9 -f wine
- 作用:匹配所有进程名里带wine的进程(包括游戏、Wine调试器、Wine后台服务),全部强制终止,不用管游戏exe叫什么。
2. 【次选】杀光所有用户进程(直接回到Batocera主界面,不用手动切)
pkill -9 -u root
- 作用:杀掉所有以root身份运行的用户程序(不会破坏系统核心),执行后终端会自动退出,系统会重启图形界面,直接恢复正常。
3. 【兜底】直接重启系统(100%解决,不用等)
reboot
问题原因分析
- 磁盘 / U 盘刚插入时,系统先自动分配了临时盘符(比如 H: / I:),但后续你手动指派了新盘符;
- 旧的盘符映射没有被系统及时清理,变成了 “无效占位符”,就显示成问号图标;
- 这种残留图标无法直接点击删除,需要通过系统工具清理。
✅ 分步解决方法(从简单到彻底)
方法 1:刷新 / 重启资源管理器(快速尝试)
- 按下Ctrl + Shift + Esc打开任务管理器;
- 在 “进程” 中找到 Windows 资源管理器,右键选择 “重启”;
- 重启后查看问号盘符是否消失。
方法 2:用命令清理无效盘符(推荐)
- 按下Win + X,选择 Windows PowerShell (管理员) 或CMD(管理员);
-
输入以下命令,按回车执行(把H:换成你问号盘符的字母,比如I:):
cmd
mountvol H: /D
如果有多个问号盘符,重复执行命令替换盘符即可; -
也可以直接执行批量清理命令,清除所有无效盘符映射:
cmd
mountvol /R
方法 3:设备管理器清理残留设备驱动
- 按下Win + R,输入devmgmt.msc打开设备管理器;
- 点击顶部菜单栏的 查看 → 显示隐藏的设备;
- 展开 磁盘驱动器 和 存储卷,找到带问号 / 感叹号的未知设备;
- 右键选择 “卸载设备”,勾选 “删除此设备的驱动程序软件”(如果有此选项);
- 重启电脑,问号盘符会随残留驱动一起消失。
方法 4:注册表清理(终极方案,注意备份)
适用于以上方法无效的情况,操作前请右键注册表编辑器 → 文件 → 导出备份注册表。
- 按下Win + R,输入regedit打开注册表编辑器;
-
定位到路径:
reg
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
- 右侧列表中,找到名为\DosDevices\H:(把H:换成你的问号盘符字母)的键值,右键删除;
- 重启电脑,残留盘符会被彻底清除。
⚠️ 避坑提醒
- 不要直接在 “此电脑” 中尝试删除问号盘符,系统会提示 “无法删除”;
- 操作注册表前一定要备份,避免误删其他盘符导致系统异常;
- 如果是移动硬盘 / U 盘,也可以先安全弹出设备,再重新插入,系统会重新分配盘符,避免残留。
一、在 Ubuntu 里,用 GParted 建 BTRFS 分区
-
选中未分配空间在列表里点击那行未分配 146.01 GiB,右键选择 新建。
-
设置分区参数
- 新建分区的容量:直接默认占满这 146G 即可(不用改大小)
- 文件系统:下拉菜单里选择 btrfs
- 分区类型:选 主分区 / 逻辑分区 都可以,建议选主分区(Primary)
- 分区名称(可选):比如叫BATOCERA_BTRFS,方便识别
- 点击 添加,回到主界面。
-
应用所有操作点击 GParted 工具栏上的 ✔️ 对勾按钮,确认执行。等待格式化完成,分区就建好了。
二、给这个 BTRFS 分区开启透明压缩
- 先找到你刚建的分区名(比如/dev/sdc4,看 GParted 里新分区的设备名)
-
打开终端,执行:
bash运行
# 创建一个临时挂载点 sudo mkdir -p /mnt/btrfs_disk # 挂载分区,并启用透明压缩(推荐 zstd 压缩,兼顾速度和压缩率) sudo mount -o compress=zstd /dev/sdc4 /mnt/btrfs_disk # 验证压缩是否生效 sudo btrfs filesystem df /mnt/btrfs_disk
看到compress相关的参数,就说明透明压缩已经开启了。
补充:你也可以在挂载时指定压缩级别,比如compress=zstd:3(默认是 3,最高 15,级别越高压缩率越高、速度越慢),Batocera 用zstd:3就够用了。
三、让 Batocera 系统识别并使用这个分区
步骤 1:获取分区的 UUID
sudo blkid /dev/sdc4
步骤 2:进入 Batocera 系统,修改挂载配置
-
正常启动 Batocera,连接网络,开启 SSH(默认用户名root,密码linux)
-
用 SSH 连接 Batocera,编辑/etc/fstab文件:bash运行
batocera-config fstab add UUID=你的UUID /userdata/games/btrfs_games btrfs defaults,compress=zstd 0 0
或者直接编辑文件:bash运行nano /etc/fstab最后添加一行:textUUID=你的UUID /userdata/games/btrfs_games btrfs defaults,compress=zstd 0 0
保存退出(nano 里按Ctrl+O回车保存,Ctrl+X退出)。 -
测试挂载是否成功:bash运行
mkdir -p /userdata/games/btrfs_games mount /userdata/games/btrfs_games
无报错就说明成功了,重启 Batocera 后会自动挂载。
四、验证透明压缩是否在 Batocera 里生效
btrfs filesystem df /userdata/games/btrfs_games
关键补充说明
-
为什么用 BTRFS + zstd?
zstd 是目前 Batocera 兼容性最好、性能损耗最低的透明压缩算法,游戏 ROM / 模拟器文件能有不错的压缩率,且读取速度几乎不受影响。
-
分区命名建议
建议把挂载点设在/userdata/games/下,这样 Batocera 的前端能直接识别到里面的游戏文件,不用额外配置。
-
数据安全提醒
BTRFS 虽然功能强,但不要断电重启频繁,建议定期备份重要的 ROM 数据。
核心原理先给你说清(只说关键)
全程 Ubuntu 操作流程(按顺序来,别跳步)
1. 格式化目标分区为 Btrfs,并设置默认 Zstd 透明压缩
-
打开 GParted,找到你要做 Btrfs 的那个146.01 GiB未分配空间,右键「新建」。
- 文件系统:选btrfs
- 分区大小:默认占满所有空间即可
- 分区名:随便填(比如BATOCERA_ROMS)
- 点击「添加」,然后点工具栏的✔️应用,完成格式化。
-
打开 Ubuntu 终端,给刚建好的 Btrfs 分区设置默认压缩属性(关键,永久写入分区元数据):
bash运行
# 把/dev/sdc4换成你刚建好的Btrfs分区设备名(GParted里能看到,比如/dev/sdc4) sudo mkfs.btrfs -f -O compress-force=zstd /dev/sdc4
(-O compress-force=zstd是关键:把 zstd 设为分区默认压缩,任何系统挂载都会自动启用)
2. 获取 Btrfs 分区的 UUID(必须,后面配置要用)
# 同样换成你的Btrfs分区设备名 sudo blkid /dev/sdc4
3. 挂载 Batocera 的SHARE分区(你的那个 59.98G 的 exfat 分区)
# 1. 创建临时挂载点 sudo mkdir -p /mnt/batocera_share # 2. 挂载SHARE分区(设备名看GParted,是/dev/sdc3) sudo mount /dev/sdc3 /mnt/batocera_share
4. 写入 Batocera 的自动挂载配置(关键,进系统自动挂载)
# 编辑配置文件(没有这个文件会自动创建) sudo nano /mnt/batocera_share/system/fstab
UUID=你的UUID /userdata/roms btrfs defaults 0 0
- 这里不用写compress=zstd,因为我们第 1 步已经把 zstd 设为分区默认属性了,Batocera 挂载时会自动启用。
- 挂载点/userdata/roms是 Batocera 默认识别的游戏目录,直接用这个就行。
====================下面的可以不用看=======================================================================================================================================================================
# 把【/dev/sdc4】换成你刚建好的Btrfs分区设备名(GParted里能看到,比如/dev/sdc4)
====【sudo mkfs.btrfs -f -O compress-force=zstd /dev/sdc4】============
=====================================================
# 把【/dev/sdc2】换成你刚建好的Btrfs分区设备名(GParted里能看到,比如【/dev/sdc2】)
================【sudo mkfs.btrfs -f -O compress-force=zstd /dev/sdc2】======
获取 Btrfs 分区的 UUID(必须,后面配置要用)
=【# 同样换成你的Btrfs分区设备名 sudo blkid /dev/sdc4 】===/dev/sdc2: LABEL="SHARE" UUID="【c49413ad-a6ab-4729-aa2b-9aa5039243dd】===" UUID_SUB="71722131-d8a0-405d-890a-e2a292026a22" BLOCK_SIZE="4096" TYPE="btrfs" PARTUUID="36428ca9-32eb-4f9e-b099-78770e2027eb"
==================================================================================
# 1. 创建临时挂载点
===【sudo mkdir -p /mnt/batocera_share】===
# 2. 挂载SHARE分区(设备名看GParted,是/dev/sdc3)
sudo mount /dev/sdc3 /mnt/batocera_share
=============================================================
# 编辑配置文件(没有这个文件会自动创建)
sudo nano /mnt/batocera_share/system/fstab
====================================================
=========【UUID=c49413ad-a6ab-4729-aa2b-9aa5039243dd /userdata/roms btrfs defaults 0 0】=================
完整配置行(直接复制替换即可)
text
=================【UUID=你的分区UUID /userdata/roms btrfs defaults,nofail 0 0】=====================
=================【UUID=c49413ad-a6ab-4729-aa2b-9aa5039243dd /userdata/roms btrfs defaults,nofail 0 0】=====================
修改说明(仅补充你要的部分)
关键添加项:在 defaults 后面加 ,nofail(用逗号隔开,无空格)
参数作用:nofail 会让系统在检测不到该分区时直接跳过挂载,不会卡在开机流程
替换项:把 你的分区UUID 换成你用 blkid 命令获取到的 Btrfs 分区 UUID 即可
你确你确定这样子写就行了吗?其他的不用变是不是?
✅ 确定,只加 ,nofail 就够了,其他内容完全不用改。
你最终写入 system/fstab 的完整行就是这样(把 你的UUID 替换成实际值即可):
text
UUID=你的分区UUID /userdata/roms btrfs defaults,nofail 0 0
加了 nofail 后,Batocera 启动时如果找不到这个 Btrfs 分区,会直接跳过挂载,不会卡在开机流程。
其他部分(UUID、挂载点、文件系统、最后的0 0)都保持原样,不用调整。
===========================================================================================
报错是因为 /mnt/batocera_share/system 这个目录还没创建,不是进错了 Ubuntu 的系统文件,是挂载的 Batocera 分区里缺少这个目录。
按下面顺序执行,一次解决:
====================【# 1. 先确认Batocera的SHARE分区已挂载(能看到roms、bios文件夹就正常)
ls /mnt/batocera_share
# 2. (如果上面看不到文件,先重新挂载,把/dev/sdc2换成你的SHARE分区设备名)
sudo mount /dev/sdc2 /mnt/batocera_share
# 3. 创建缺失的system目录(关键步骤,之前没建所以报错)
sudo mkdir -p /mnt/batocera_share/system
# 4. 再编辑文件,此时路径已存在,可正常保存
sudo nano /mnt/batocera_share/system/fstab
】========================
卸载所有分区,完成操作
bash
运行
===【】=============
操作完成,直接插回电脑启动 Batocera 即可
进 Batocera 后:
===============================================# 卸载SHARE分区
sudo umount /mnt/batocera_share
# (可选)验证Btrfs分区的默认压缩是否生效把/dev/sdc2换成你的SHARE分区设备名
sudo mkdir -p /mnt/test_btrfs
sudo mount /dev/sdc2 /mnt/test_btrfs
sudo btrfs filesystem df /mnt/test_btrfs
# 看到输出里有compress: zstd,说明压缩属性已经写入分区,没问题
sudo umount /mnt/test_btrfs
============================
=================================================
直接用下面的命令,就能 100% 确认 zstd 压缩是否生效:
1. 先卸载之前的挂载,重新带压缩参数挂载
===========【sudo umount /mnt/test_btrfs 2>/dev/null
sudo mkdir -p /mnt/test_btrfs
# 关键:挂载时显式指定compress=zstd
sudo mount -o compress=zstd /dev/sdc4 /mnt/test_btrfs】====================
2. 查看当前挂载的压缩参数(直接看 zstd)
====【# 查看挂载信息,直接过滤compress关键字
mount | grep /mnt/test_btrfs】=====
====================================================
输出里会有 compress=zstd,说明压缩已经生效。
补充:为什么之前看不到?
btrfs filesystem df 只显示空间分配,不显示压缩属性,所以看不到 zstd 是正常的。
真正的验证方法就是上面的 mount 命令,只要看到 compress=zstd,就说明透明压缩已经启用了。
(可选)验证文件写入时的压缩效果
bash
运行
===【# 写入一个测试文件
dd if=/dev/zero of=/mnt/test_btrfs/testfile.bin bs=1M count=100
# 查看文件实际占用大小(会比100M小,说明压缩生效)
ls -lh /mnt/test_btrfs/testfile.bin】========================
现在按步骤执行前两条命令,确认 mount 输出里有 compress=zstd 就可以了。
==========================================================
============================================
你看输出里这一行关键信息:compress=zstd:3
说明:
你的 Btrfs 分区已经成功挂载
透明压缩 zstd(级别 3) 已经生效
这个压缩设置会被分区元数据记住,进 Batocera 系统时也会自动启用,不用额外配置
现在可以卸载测试分区,继续后面的步骤了:
==================【sudo umount /mnt/test_btrfs】====================
============================
=========下面的可以不用看==================================
核心原理先给你说清(只说关键)
全程 Ubuntu 操作流程(按顺序来,别跳步)
1. 格式化目标分区为 Btrfs,并设置默认 Zstd 透明压缩
-
打开 GParted,找到你要做 Btrfs 的那个146.01 GiB未分配空间,右键「新建」。
- 文件系统:选btrfs
- 分区大小:默认占满所有空间即可
- 分区名:随便填(比如BATOCERA_ROMS)
- 点击「添加」,然后点工具栏的✔️应用,完成格式化。
-
打开 Ubuntu 终端,给刚建好的 Btrfs 分区设置默认压缩属性(关键,永久写入分区元数据):
bash运行
# 把/dev/sdc4换成你刚建好的Btrfs分区设备名(GParted里能看到,比如/dev/sdc4) sudo mkfs.btrfs -f -O compress-force=zstd /dev/sdc4
(-O compress-force=zstd是关键:把 zstd 设为分区默认压缩,任何系统挂载都会自动启用)
2. 获取 Btrfs 分区的 UUID(必须,后面配置要用)
# 同样换成你的Btrfs分区设备名 sudo blkid /dev/sdc4
3. 挂载 Batocera 的SHARE分区(你的那个 59.98G 的 exfat 分区)
# 1. 创建临时挂载点 sudo mkdir -p /mnt/batocera_share # 2. 挂载SHARE分区(设备名看GParted,是/dev/sdc3) sudo mount /dev/sdc3 /mnt/batocera_share
4. 写入 Batocera 的自动挂载配置(关键,进系统自动挂载)
# 编辑配置文件(没有这个文件会自动创建) sudo nano /mnt/batocera_share/system/fstab
UUID=你的UUID /userdata/roms btrfs defaults 0 0
- 这里不用写compress=zstd,因为我们第 1 步已经把 zstd 设为分区默认属性了,Batocera 挂载时会自动启用。
- 挂载点/userdata/roms是 Batocera 默认识别的游戏目录,直接用这个就行。
5. 卸载所有分区,完成操作
# 卸载SHARE分区 sudo umount /mnt/batocera_share # (可选)验证Btrfs分区的默认压缩是否生效 sudo mkdir -p /mnt/test_btrfs sudo mount /dev/sdc4 /mnt/test_btrfs sudo btrfs filesystem df /mnt/test_btrfs # 看到输出里有compress: zstd,说明压缩属性已经写入分区,没问题 sudo umount /mnt/test_btrfs
操作完成,直接插回电脑启动 Batocera 即可
- 系统会自动读取你写的配置,挂载 Btrfs 分区到/userdata/roms
- 分区的默认 zstd 压缩会自动启用,新建 / 复制进去的文件都会自动透明压缩
- 配置永久生效,重启 / 断电都不会失效
完整配置行(直接复制替换即可)
UUID=你的分区UUID /userdata/roms btrfs defaults,nofail 0 0
修改说明(仅补充你要的部分)
- 关键添加项:在defaults后面加,nofail(用逗号隔开,无空格)
- 参数作用:nofail会让系统在检测不到该分区时直接跳过挂载,不会卡在开机流程
- 替换项:把你的分区UUID换成你用blkid命令获取到的 Btrfs 分区 UUID 即可
UUID=你的分区UUID /userdata/roms btrfs defaults,nofail 0 0
- 加了nofail后,Batocera 启动时如果找不到这个 Btrfs 分区,会直接跳过挂载,不会卡在开机流程。
- 其他部分(UUID、挂载点、文件系统、最后的0 0)都保持原样,不用调整。
# 1. 先确认Batocera的SHARE分区已挂载(能看到roms、bios文件夹就正常) ls /mnt/batocera_share # 2. (如果上面看不到文件,先重新挂载,把/dev/sdc3换成你的SHARE分区设备名) sudo mount /dev/sdc3 /mnt/batocera_share # 3. 创建缺失的system目录(关键步骤,之前没建所以报错) sudo mkdir -p /mnt/batocera_share/system # 4. 再编辑文件,此时路径已存在,可正常保存 sudo nano /mnt/batocera_share/system/fstab
1. 先卸载之前的挂载,重新带压缩参数挂载
sudo umount /mnt/test_btrfs 2>/dev/null sudo mkdir -p /mnt/test_btrfs # 关键:挂载时显式指定compress=zstd sudo mount -o compress=zstd /dev/sdc4 /mnt/test_btrfs
2. 查看当前挂载的压缩参数(直接看 zstd)
# 查看挂载信息,直接过滤compress关键字 mount | grep /mnt/test_btrfs
补充:为什么之前看不到?
- btrfs filesystem df只显示空间分配,不显示压缩属性,所以看不到 zstd 是正常的。
- 真正的验证方法就是上面的mount命令,只要看到compress=zstd,就说明透明压缩已经启用了。
(可选)验证文件写入时的压缩效果
# 写入一个测试文件 dd if=/dev/zero of=/mnt/test_btrfs/testfile.bin bs=1M count=100 # 查看文件实际占用大小(会比100M小,说明压缩生效) ls -lh /mnt/test_btrfs/testfile.bin
- 你的 Btrfs 分区已经成功挂载
- 透明压缩 zstd(级别 3) 已经生效
- 这个压缩设置会被分区元数据记住,进 Batocera 系统时也会自动启用,不用额外配置
sudo umount /mnt/test_btrfs