背景
在使用 PetaLinux 执行如下命令时:
|
|
出现大量报错:
|
|
初看像是 XSA 文件问题,但实际上根本原因完全不同。
本文记录一次完整排查与修复过程。
—
现象分析
1. 直接报错
|
|
说明当前目录所在文件系统不可写。
2. 查看内核日志
|
|
出现关键报错:
|
|
这几行是核心。
—
根因分析
内核日志已经说明问题:
- ext4 文件系统检测到错误
- 中止 journal
- 自动将文件系统重新挂载为只读 (ro)
这是一种保护机制,用来防止进一步数据损坏。
因此:
- 不是 XSA 文件问题
- 不是 PetaLinux 问题
- 不是权限问题
- 而是 ext4 文件系统损坏
—
为什么会发生?
常见原因:
- 虚拟机强制断电
- 宿主机磁盘空间不足
- 编译过程中异常崩溃
- 磁盘 I/O 错误
- PetaLinux 编译占用大量空间(几十 GB)
尤其是在 VMware / VirtualBox 中非常常见。
—
错误本质
关键错误信息:
|
|
说明目录索引损坏。
ext4 无法正确校验目录结构,于是触发:
|
|
系统进入自保护模式。
—
修复方法
⚠ 注意:不能在系统运行状态下修复根分区。
必须离线 fsck。
—
步骤 1:确认分区
|
|
通常根分区为:
|
|
—
步骤 2:进入恢复模式
Ubuntu:
- 重启
- 进入 GRUB
- Advanced options
- Recovery mode
- Root shell
—
步骤 3:执行 fsck
|
|
参数说明:
- -f 强制检查
- -y 自动修复
修复内容包括:
- inode
- 目录结构
- journal
- 校验信息
耗时视磁盘大小而定。
—
步骤 4:重启
|
|
系统恢复正常读写。
—
修复后验证
|
|
应看到:
|
|
再执行:
|
|
恢复正常。
—
如何预防
1. 保证足够磁盘空间
|
|
建议:
- 至少保留 50GB 空闲
- PetaLinux 工程建议 80GB+
—
2. 不要强制关闭虚拟机
尤其在:
- 编译中
- 写大量文件时
—
3. 定期检查文件系统
|
|
—
4. 不要在以下环境编译 PetaLinux
- NTFS 挂载盘
- exFAT
- NFS
- WSL1
- 外接移动硬盘
推荐:
- 本地 ext4 文件系统
—
总结
当 PetaLinux 出现:
|
|
不要第一时间怀疑工具链。
优先检查:
|
|
如果看到:
|
|
说明是文件系统损坏。
正确解决方式是:
|
|
而不是反复重建工程。
—
关键结论
这类问题的本质是:
系统在自我保护,而不是 PetaLinux 出错。
理解这一点,可以少走很多弯路。