PetaLinux 执行 petalinux-config 时出现 Read-only file system 的排查与修复

背景

在使用 PetaLinux 执行如下命令时:

1
petalinux-config --get-hw-description ../design_1_wrapper.xsa

出现大量报错:

1
2
3
4
Read-only file system
ERROR: No XSA is found
mkdir: cannot create directory ...
cp: cannot create regular file ...

初看像是 XSA 文件问题,但实际上根本原因完全不同。

本文记录一次完整排查与修复过程。

现象分析

1. 直接报错

1
2
3
environment: line xxx: Read-only file system
cp: cannot create regular file: Read-only file system
mkdir: cannot create directory: Read-only file system

说明当前目录所在文件系统不可写。

2. 查看内核日志

1
dmesg | tail -30

出现关键报错:

1
2
3
4
EXT4-fs error (device sda1)
Aborting journal on device sda1-8.
EXT4-fs (sda1): Remounting filesystem read-only
No space for directory leaf checksum. Please run e2fsck -D.

这几行是核心。

根因分析

内核日志已经说明问题:

  1. ext4 文件系统检测到错误
  2. 中止 journal
  3. 自动将文件系统重新挂载为只读 (ro)

这是一种保护机制,用来防止进一步数据损坏。

因此:

  • 不是 XSA 文件问题
  • 不是 PetaLinux 问题
  • 不是权限问题
  • 而是 ext4 文件系统损坏

为什么会发生?

常见原因:

  1. 虚拟机强制断电
  2. 宿主机磁盘空间不足
  3. 编译过程中异常崩溃
  4. 磁盘 I/O 错误
  5. PetaLinux 编译占用大量空间(几十 GB)

尤其是在 VMware / VirtualBox 中非常常见。

错误本质

关键错误信息:

1
2
No space for directory leaf checksum
Please run e2fsck -D

说明目录索引损坏。

ext4 无法正确校验目录结构,于是触发:

1
Remounting filesystem read-only

系统进入自保护模式。

修复方法

⚠ 注意:不能在系统运行状态下修复根分区。

必须离线 fsck。

步骤 1:确认分区

1
lsblk

通常根分区为:

1
/dev/sda1

步骤 2:进入恢复模式

Ubuntu:

  1. 重启
  2. 进入 GRUB
  3. Advanced options
  4. Recovery mode
  5. Root shell

步骤 3:执行 fsck

1
fsck -f -y /dev/sda1

参数说明:

  • -f 强制检查
  • -y 自动修复

修复内容包括:

  • inode
  • 目录结构
  • journal
  • 校验信息

耗时视磁盘大小而定。

步骤 4:重启

1
reboot

系统恢复正常读写。

修复后验证

1
mount | grep " / "

应看到:

1
rw

再执行:

1
petalinux-config --get-hw-description ../design_1_wrapper.xsa

恢复正常。

如何预防

1. 保证足够磁盘空间

1
df -h

建议:

  • 至少保留 50GB 空闲
  • PetaLinux 工程建议 80GB+

2. 不要强制关闭虚拟机

尤其在:

  • 编译中
  • 写大量文件时

3. 定期检查文件系统

1
sudo tune2fs -l /dev/sda1 | grep "Mount count"

4. 不要在以下环境编译 PetaLinux

  • NTFS 挂载盘
  • exFAT
  • NFS
  • WSL1
  • 外接移动硬盘

推荐:

  • 本地 ext4 文件系统

总结

当 PetaLinux 出现:

1
2
3
Read-only file system
No XSA is found
cannot create file

不要第一时间怀疑工具链。

优先检查:

1
dmesg | tail

如果看到:

1
2
EXT4-fs error
Remounting filesystem read-only

说明是文件系统损坏。

正确解决方式是:

1
离线 fsck 修复分区

而不是反复重建工程。

关键结论

这类问题的本质是:

系统在自我保护,而不是 PetaLinux 出错。

理解这一点,可以少走很多弯路。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计