Linux设备异常断电导致的SD卡损坏的解决方案

需求|背景

如果一台linux设备的系统镜像是保存在SD卡中,启动方式是通过SD卡启动,频繁异常断电容易对SD卡和其中的文件造成损坏,这种情况下想要恢复系统极为困难。

解决方案

1.增加一个掉电检测电路,
2.掉电后触发CPU中断
3.增加超级电容,掉电后放电支撑CPU再工作几秒
4.在中断处理函数中,进行掉电后的紧急处理工作

硬件电路

掉电检测电路

检测到+5V衰减后,DECT引脚会从高电平跳变到低电平
将DECT引脚连接到SOC上的中断引脚,掉电时通知SOC进行处理。

软件

通过注册一个GPIO中断,检测DECT引脚,中断信号检测到后,使用系统调用ksys_sync()进行文件系统同步工作。
此函数能立刻将缓存中的文件写入到卡中
在这里插入图片描述
kenel中,电源管理子系统power management中就是使用这个函数去进行同步。
也许还有效率更好的同步方式。俺也不知道。

EXT4文件系统参数修改

改变文件系统的某些参数,通过牺牲部分文件系统的效率,改变文件写入时的动作细节达到减少异常断电时读写中断的问题。

  • barrier=0
  • data=writeback
  • commit=5
    这三个参数,可以在系统启动时的环境变量中添加
    通过cat /proc/cmdline可以查看文件系统这些参数的属性,如果没有显示,那么就是被设置成了默认值。

可以通过直接在 /boot/firmware/cmdline.txt文件后面添加
rootflags=data=writeback rootflags=barrier=0
commit选项并不建议修改,修改较小的值,频繁进行文件系统的同步动作对系统效率影响较大

关于这三个文件系统的参数的解释可以自己搜。

Logo

更多推荐