收起左侧

OESPlus升级到1.2.0302以后硬盘挂载失败的解决办法。

2
回复
59
查看
[ 复制链接 ]

0

主题

2

回帖

0

牛值

江湖小虾

飞牛 fnOS 升级后硬盘无法挂载的修复记录

一、故障现象

升级 fnOS 后:

  • 硬盘仍能被系统识别;
  • 删除并重新创建存储空间时提示“内部错误”;
  • 数据卷无法挂载;
  • 系统日志出现:
btrfs: Unknown parameter 'trimacl'
ext4: Unknown parameter 'trimacl'
mount failed

本次故障的原因是:

系统软件和 SATA 系统盘里的内核已经更新,但设备实际从 eMMC 启动。eMMC 中仍是旧内核,而新版飞牛服务要求内核支持 <span>trimacl</span>,最终导致数据卷挂载失败。

二、重要警告

执行前请注意:

  1. 不要在飞牛界面继续“删除”“重建”或“格式化”存储空间。
  2. 本操作只同步启动内核,不会主动格式化数据盘。
  3. 如果已经删除并重建过存储空间,原文件系统可能已经被格式化。
  4. 必须确保新内核与当前系统的软件包匹配。
  5. 建议准备显示器、键盘或串口,以便极端情况下恢复启动配置。

以下步骤以本次机器环境为例:

SSH 地址:192.168.8.99
SSH 端口:22
系统盘:/dev/sda
实际启动分区:/dev/mmcblk1p1
旧内核:6.12.41-trim
新内核:6.18.18.c944-trim
数据卷挂载位置:/vol1

三、连接机器

在本地电脑执行:

ssh -i /path/to/your/private-key -p 22 root@服务器地址

例如:

ssh -i /Users/用户名/keys/claw -p 22 root@192.168.8.99

四、检查当前运行内核

uname -r
uptime -s
cat /proc/cmdline

本次故障机器显示:

6.12.41-trim

同时 <span>/proc/cmdline</span> 中包含:

ubootpart=/dev/mmcblk1p1

这表示设备实际由 <span>/dev/mmcblk1p1</span> 上的 eMMC 启动。

五、确认数据盘并未丢失

lsblk -e7 -o NAME,PATH,TYPE,SIZE,FSTYPE,UUID,MOUNTPOINTS,RO,MODEL
blkid

继续检查 RAID、LVM 和 Btrfs:

mdadm --detail /dev/md0

pvs -a -o pv_name,pv_uuid,vg_name,pv_attr,pv_size,pv_free
vgs -a -o vg_name,vg_uuid,vg_attr,vg_size,vg_free
lvs -a -o lv_name,vg_name,lv_uuid,lv_attr,lv_size,devices

btrfs filesystem show

如果 RAID 状态显示:

State : clean
Failed Devices : 0

说明阵列本身正常。

查看挂载失败日志:

journalctl -b --no-pager |
grep -C 5 -E "trimacl|mount failed|/vol1|/dev/dm-0"

如果看到:

btrfs: Unknown parameter 'trimacl'

则可以继续检查内核版本问题。

六、确认新内核已经安装

查看 <span>/boot</span> 中的内核:

ls -lh /boot/vmlinuz*
ls -lh /boot/uInitrd*
ls -lh /boot/System.map-*
ls -lh /boot/config-*

查看已安装的内核软件包:

dpkg -l | grep -E "^ii[[:space:]]+(linux-image|linux-headers|linux-modules)"

本次使用的新内核为:

6.18.18.c944-trim

确认新内核包含 <span>trimacl</span>

grep -i trimacl /boot/System.map-6.18.18.c944-trim

正常情况下应看到类似:

is_trimacl
trimacl_check_acl
ext4_xattr_trimacl_access_handler
btrfs_xattr_trimacl_access_handler

如果没有任何输出,不要继续复制这个内核。

七、检查系统盘的启动配置

sed -n '1,80p' /boot/fnEnv.txt

本次正确配置为:

verbosity=1
bootlogo=false
console=both
fdtfile=amlogic/meson-g12b-s922x-oes-plus.dtb
kernelfile=vmlinuz-6.18.18.c944-trim
rootdev=PARTUUID=0060e0e9-02
instdisk_bootuuid=0060e0e9-01
instdisk_rootuuid=0060e0e9-02
initrdfile=uInitrd-6.18.18.c944-trim

不要直接复制上述 PARTUUID 到你的机器。你的机器必须使用它自己 <span>/boot/fnEnv.txt</span> 中的值。

确认系统根分区 PARTUUID:

findmnt -n -o SOURCE /
blkid /dev/sda2

八、挂载实际的 eMMC 启动分区

创建临时挂载目录:

mkdir -p /mnt/emmcboot

先以只读方式挂载:

mountpoint -q /mnt/emmcboot ||
mount -o ro /dev/mmcblk1p1 /mnt/emmcboot

检查 eMMC 中的旧内核:

sed -n '1,80p' /mnt/emmcboot/fnEnv.txt
ls -lh /mnt/emmcboot/vmlinuz*
ls -lh /mnt/emmcboot/uInitrd*

本次故障时,eMMC 中仍指向:

kernelfile=vmlinuz-6.12.41-trim

而系统盘 <span>/boot/fnEnv.txt</span> 已经指向:

kernelfile=vmlinuz-6.18.18.c944-trim

由此可以确认两个启动分区未同步。

九、检查 eMMC 剩余空间

df -h /mnt/emmcboot

新内核、initrd、配置和设备树通常需要约 70~100MB。确保剩余空间充足后再继续。

十、备份 eMMC 原启动文件

将 eMMC 临时改为可写:

mount -o remount,rw /mnt/emmcboot

备份启动配置:

cp -a \
  /mnt/emmcboot/fnEnv.txt \
  /mnt/emmcboot/fnEnv.txt.pre-6.18.18-c944

备份当前设备树:

cp -a \
  /mnt/emmcboot/dtb/amlogic/meson-g12b-s922x-oes-plus.dtb \
  /mnt/emmcboot/dtb/amlogic/meson-g12b-s922x-oes-plus.dtb.pre-6.18.18-c944

旧内核文件不要删除,它可以用于回退。

十一、同步新内核到 eMMC

复制新内核:

cp -a \
  /boot/vmlinuz-6.18.18.c944-trim \
  /mnt/emmcboot/vmlinuz-6.18.18.c944-trim

复制 initrd:

cp -a \
  /boot/uInitrd-6.18.18.c944-trim \
  /mnt/emmcboot/uInitrd-6.18.18.c944-trim

复制内核配置和符号表:

cp -a \
  /boot/System.map-6.18.18.c944-trim \
  /mnt/emmcboot/System.map-6.18.18.c944-trim

cp -a \
  /boot/config-6.18.18.c944-trim \
  /mnt/emmcboot/config-6.18.18.c944-trim

复制对应设备树:

cp -a \
  /boot/dtb/amlogic/meson-g12b-s922x-oes-plus.dtb \
  /mnt/emmcboot/dtb/amlogic/meson-g12b-s922x-oes-plus.dtb

复制这台机器自身的新启动配置:

cp -a /boot/fnEnv.txt /mnt/emmcboot/fnEnv.txt

这里必须使用目标机器自己的 <span>/boot/fnEnv.txt</span>,不要使用其他机器的文件。

十二、校验复制结果

计算源文件校验值:

sha256sum \
  /boot/vmlinuz-6.18.18.c944-trim \
  /boot/uInitrd-6.18.18.c944-trim \
  /boot/dtb/amlogic/meson-g12b-s922x-oes-plus.dtb

计算 eMMC 中的校验值:

sha256sum \
  /mnt/emmcboot/vmlinuz-6.18.18.c944-trim \
  /mnt/emmcboot/uInitrd-6.18.18.c944-trim \
  /mnt/emmcboot/dtb/amlogic/meson-g12b-s922x-oes-plus.dtb

两边对应文件的 SHA-256 必须完全一致。

再次确认启动配置:

sed -n '1,80p' /mnt/emmcboot/fnEnv.txt

确认至少包含:

kernelfile=vmlinuz-6.18.18.c944-trim
initrdfile=uInitrd-6.18.18.c944-trim

写入磁盘并恢复只读挂载:

sync
mount -o remount,ro /mnt/emmcboot

十三、重启机器

sync
systemctl reboot

等待约 1~3 分钟后重新连接:

ssh -i /path/to/your/private-key -p 22 root@服务器地址

确认新内核:

uname -r

预期结果:

6.18.18.c944-trim

确认 <span>trimacl</span> 已生效:

grep -w is_trimacl /proc/kallsyms

应看到类似:

ffff8000804c6064 T is_trimacl

地址每台机器或每个内核可能不同,只要存在 <span>is_trimacl</span> 即可。

十四、验证数据卷挂载

lsblk -e7 -o NAME,TYPE,SIZE,FSTYPE,UUID,MOUNTPOINTS,RO
findmnt /vol1
df -hT /vol1

正常结果应包含:

/vol1
btrfs
rw
trimacl

查看完整挂载参数:

findmnt -rn -o SOURCE,TARGET,FSTYPE,OPTIONS |
grep -E "(/vol1|/dev/mapper/trim_)"

本次修复后显示:

/dev/mapper/trim_...-0 /vol1 btrfs rw,relatime,ssd,discard=async,trimacl,...

十五、验证飞牛相关服务

systemctl is-active \
  trim_main.service \
  filestor_service.service \
  dsmgr.service \
  docker.service \
  docker.socket

正常应全部显示:

active

确认没有新的挂载错误:

journalctl -b --no-pager |
grep -E "Unknown parameter 'trimacl'|mount failed|/vol1"

新内核启动后不应再出现:

Unknown parameter 'trimacl'

十六、故障结论

本次故障链路为:

fnOS 更新
  ↓
SATA 系统盘 /boot 更新到新内核
  ↓
实际 eMMC 启动分区没有同步
  ↓
机器重启后仍运行旧内核
  ↓
新版飞牛服务使用 trimacl 挂载参数
  ↓
旧内核不支持 trimacl
  ↓
Btrfs/EXT4 挂载失败
  ↓
飞牛界面显示“内部错误”

修复方式是将系统盘 <span>/boot</span> 中的新内核、initrd、设备树和 <span>fnEnv.txt</span> 同步到实际使用的 eMMC 启动分区,再重启验证。

以上是全部内容,感谢观看,谢谢!

收藏
送赞
分享

1

主题

4

回帖

0

牛值

江湖小虾

感谢大佬,已经恢复了,我害怕出错就让codex帮我弄的,已经可以正常挂载了,系统版本也升上来了

0ee68b7397859adf945c9de6b6c95dc4.png

6794e3ffa76dbd0b2d61e48222e275c2.png

f8d9a856e30efc4d2e9a498616cd0971.png

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

0

主题

5

回帖

0

牛值

江湖小虾

看着好复杂,先等等再升级,不过总算是有了办法。赞!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则