Ubuntu 系统掉电导致分区损坏无法启动修复方案

Ubuntu掉电分区损坏修复方案

嵌入式Ubuntu 系统掉电导致分区损坏无法启动修复方案


1. 问题描述

在嵌入式 Ubuntu 系统(RK3568、树莓派等)中,掉电可能导致 /userdata(ext4)未正常关闭或 journal 损坏,进而下次启动进入 emergency mode

[FAILED] Failed to start File System Check on /dev/mmcblk0p7.
[DEPEND] Dependency failed for /userdata.
[DEPEND] Dependency failed for Local File Systems.
You are in emergency mode. After logging in, type "journalctl -xb" to view logs.

2. 解决方案概览

1)修改 /etc/fstab:容错不阻塞启动
2)自动 fsck:开机检测并修复 /userdata


2.1 fstab(防阻塞)


# User data tolerant to errors; don't block boot
/dev/mmcblk0p7  /userdata   ext4   defaults,nofail,errors=continue  0  2

2.2 自动 fsck 脚本

/usr/local/bin/auto_fsck.sh

#!/bin/bash
LOG_FILE=/var/log/auto_fsck.log
DEV=/dev/mmcblk0p7
MNT=/userdata

echo "[`date`] checking $DEV ..." >> $LOG_FILE
if ! mountpoint -q $MNT; then
  echo "[`date`] not mounted, run fsck..." >> $LOG_FILE
  fsck -yf $DEV >> $LOG_FILE 2>&1
  mount $MNT >> $LOG_FILE 2>&1
else
  echo "[`date`] already mounted, skip." >> $LOG_FILE
fi

if [ ! -w $MNT ]; then
  echo "[`date`] $MNT is read-only, remount rw..." >> $LOG_FILE
  mount -o remount,rw $MNT >> $LOG_FILE 2>&1
fi

启用 | Enable:

chmod +x /usr/local/bin/auto_fsck.sh
cat >/etc/systemd/system/auto-fsck.service <<'EOF'
[Unit]
Description=Auto fsck repair for userdata partition
DefaultDependencies=no
After=local-fs-pre.target
Before=multi-user.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/auto_fsck.sh
[Install]
WantedBy=multi-user.target
EOF
systemctl enable auto-fsck.service

3. 模拟掉电导致的文件系统损坏

注意:以下操作将破坏数据,务必在测试分区上进行。不能对 /分区执行。

3.1 用 dd 人工写坏超级块附近(快速触发 fsck)

3.1.1. 卸载目标分区:
sudo umount /dev/mmcblk0p7 
3.1.2. 写入随机垃圾到超级块附近:
sudo  dd if=/dev/zero of=/dev/mmcblk0p7 bs=1k count=100
sync
3.1.3. 检查文件系统状态:
sudo fsck -fn /dev/mmcblk0p7
3.1.4. 尝试挂载以确认失败:
sudo mount /dev/mmcblk0p7 /userdata 
3.1.5. 重启后验证自动修复:
sudo reboot

4. 总结

  • fstab 容错nofail, errors=continue)让系统在数据分区损坏时仍能启动;

  • auto-fsck 在启动阶段自动修复 /userdata

  • 模拟损坏用于验证自修机制在你设备上的实际效果。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIoT@突破自我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值