1. 问题现象与初步排查
最近在调试一个嵌入式Linux系统时遇到了一个典型的rootfs挂载失败问题,内核报错显示"mount: mounting /dev/root on /root failed: Input/output error (error -5)"。这个错误码-5对应的是EIO(输入输出错误),通常意味着底层存储设备出现了问题。但经过一系列排查,我发现了一个容易被忽视的潜在原因。
在嵌入式开发中,rootfs挂载失败是最让人头疼的问题之一。系统启动到一半就卡住,连最基本的shell环境都无法进入,给调试带来了很大困难。我遇到这个问题的环境是:
- 处理器:ARM Cortex-A9
- 存储介质:eMMC
- 内核版本:Linux 4.19
- 文件系统:squashfs
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 常规排查路径
2.1 存储设备检查
首先按照常规思路检查存储设备:
bash复制# 在内核启动参数中添加init=/bin/sh提前获取shell
[ 1.520000] VFS: Cannot open root device "mmcblk0p2" or unknown-block(0,0): error -5
[ 1.520000] Please append a correct "root=" boot option; here are the available partitions:
[ 1.520000] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
手动尝试挂载分区:
bash复制mkdir /tmp/test
mount -t squashfs /dev/mmcblk0p2 /tmp/test
同样报错error -5,说明问题确实出在设备或文件系统层面。
2.2 文件系统完整性验证
使用dd工具将分区内容导出到文件:
bash复制dd if=/dev/mmcblk0p2 of=/tmp/rootfs.sqsh bs=1M
unsquashfs -l /tmp/rootfs.sqsh
文件系统解析正常,说明镜像本身没有问题。
