Linux设备异常断电导致的SD卡损坏的解决方案
掉电检测电路
·
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选项并不建议修改,修改较小的值,频繁进行文件系统的同步动作对系统效率影响较大
关于这三个文件系统的参数的解释可以自己搜。
更多推荐
已为社区贡献1条内容
所有评论(0)