语境
我来这里是想和大家讨论一个我不明白的 EXT4 文件系统问题。在我的公司,我们正在研究嵌入式Linux系统。我们用的是板子奥利梅克斯石灰 2。
T2-OLinuXino-LIME2-e16Gs16M-IND
我们使用基于Olinux镜像的镜像(A20-OLinuXino-bullseye-minimal-20230515-130040.img.)
实际上,我们正在尝试测试文件系统的抵抗力。
我们如何做到这一点?
一个自动驱动板交流电源。它定期打开和关闭交流电源。
当 Olimex Lime 2 启动时,它会切换连接到自动化设备的引脚输出,以显示它处于活动状态并且系统已正常启动。
如果上电2分钟后系统还没有启动,我们检测到错误并停止测试。
当自动关闭开发板电源时,开发板中的脚本会运行命令poweroff
来关闭系统(这就是为什么有电池)。
2 分钟后,电路板自动通电,我们重复这个循环。
我们使用 RaspberryPi 来保存主板日志。该树莓派通过串行通信连接。
使用的Linux镜像
我们的镜像由三个分区组成(全部在 ext4 中):
boot
:包含内核及其资产root
: 主文件系统data
:存储数据(例如:日志)
前两个处于只读模式。只有第三个允许读写。
我们主要使用 Docker 来部署和执行我们的应用程序。
问题 :(
半天后,分区data
似乎已损坏,系统以紧急模式启动。
[FAILED] Failed to start File Systeâ¦ck on /dev/disk/by-label/data.
See 'systemctl status "systemd-fsck@devâ¦y\\x2dlabel-data.service"' for details.
[DEPEND] Dependency failed for /mnt/data.
[DEPEND] Dependency failed for Local File Systems.
Starting Load AppArmor profiles...
Starting Set console font and keymap...
Starting Create Volatile Files and Directories...
[ OK ] Finished Set console font and keymap.
[ OK ] Finished Create Volatile Files and Directories.
Starting Update UTMP about System Boot/Shutdown...
[ OK ] Finished Update UTMP about System Boot/Shutdown.
Starting Update UTMP about System Runlevel Changes...
[ OK ] Finished Update UTMP about System Runlevel Changes.
[FAILED] Failed to start Load AppArmor profiles.
See 'systemctl status apparmor.service' for details.
[ OK ] Started ifup for eth0.
Starting Raise network interfaces...
[ OK ] Finished Raise network interfaces.
[ OK ] Reached target Network.
[ OK ] Reached target Network is Online.
You are in emergency mode. After logging in, type "journalctl -xb" to view
system logs, "systemctl reboot" to reboot, "systemctl default" or "exit"
to boot into default mode.
Give root password for maintenance
FSCK
fsck from util-linux 2.34
e2fsck 1.45.5 (07-Jan-2020)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Directory inode 170220, block #0, offset 0: directory has no checksum.
Fix? no
Directory inode 170220, block #0, offset 0: directory corrupted
Salvage? no
e2fsck: aborted
data: ********** WARNING: Filesystem still has errors **********
调试文件系统
#> sudo debugfs -R 'ncheck 170220' /dev/sdk3
debugfs 1.45.5 (07-Jan-2020)
Inode Pathname
170220 /system/var/lib/docker/image/overlay2/layerdb/sha256/b5fe77bd4ece5a7f9ed642c1efc878aaddf4e9c9b49514e1ab0e9799505be38d
其他详情
我们是测试中的两个板,他们使用了相同的图像,一个我们使用SD卡,另一个我们使用嵌入式emmc。出现问题仅有的在SD卡板上。
在最后一次断电之前(在主板无法正确启动之前),我们有一个关于 ext4 fs 错误的内核日志:
a20-olinuxino login: [ 34.961248] EXT4-fs error (device mmcblk0p3): __ext4_find_entry:1547: inode #170220: comm0
我不明白这个错误,你能帮我吗?
祝你有美好的一天 !