当前位置: 首页 > news >正文

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=/userdataecho "[`date`] checking $DEV ..." >> $LOG_FILE
if ! mountpoint -q $MNT; thenecho "[`date`] not mounted, run fsck..." >> $LOG_FILEfsck -yf $DEV >> $LOG_FILE 2>&1mount $MNT >> $LOG_FILE 2>&1
elseecho "[`date`] already mounted, skip." >> $LOG_FILE
fiif [ ! -w $MNT ]; thenecho "[`date`] $MNT is read-only, remount rw..." >> $LOG_FILEmount -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

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


http://www.dtcms.com/a/515365.html

相关文章:

  • 相机模组,模组是什么意思?
  • 申威架构ky10安装php-7.2.10.rpm详细步骤(国产麒麟系统64位)
  • STM32F407 通用定时器
  • lodash-es
  • 股票交易网站建设四会市城乡规划建设局网站
  • API技术深度解析:从基础原理到最佳实践
  • 西安今晚12点封城吗龙岩网站优化
  • 使用有限体积法求解双曲型守恒性方程(一)FV 框架
  • jenkins流水线部署springboot项目
  • YOLOv5:目标检测的实用派王者
  • 《工业之心:Blender 工业场景解构》
  • 【Linux网络】应用层自定义协议
  • unity免费改名工具-Mulligan Renamer
  • Git分支的多人协作
  • 服务外包网站成都住建局官网app
  • 【ABAP函数】+ALSM_EXCEL_TO_INTERNAL_TABLE批导长字段
  • 艺术学院网站模板wordpress二手车模板
  • docker api 常用接口
  • flutter鸿蒙:实现类似B站或抖音的弹幕功能
  • 从静态模型到数据驱动:图观模型编辑器让工程设备真实还原
  • 了解Docker的多阶段构建(Multi-stage Build)
  • [特殊字符] Berry.Live:开箱即用的.NET直播流媒体服务器
  • 网站模板的修改宝安企业网站建设
  • 网站开发软件费用2018网站流量怎么做
  • 数据结构:顺序表讲解(1)
  • 第二次作业-第二章时间服务
  • Python爬虫实战:获取香港恒生指数历史数据与趋势分析
  • 【Frida Android】基础篇11:Native层hook基础——修改原生函数的返回值
  • 什么是DNS负载均衡?提升网站稳定性与容错性的方法
  • 设计自学网站哪个好建设银行网站怎么短信转账