RK3568(buildroot)基于squashfs+overlay提高文件系统可靠性

1. 概述

在进行嵌入式 Linux 系统产品开发设计时,经常会出现由于设备意外断电等引起的文件系统损坏的情况,进而最终导致设备无法正常启动。为了应对这种情况,通常会从硬件设计如采用备用电源,无论是锂电池还是超级电容等,或者从系统软件设上加以规避。本文接下来将介绍如何使用 squashfs 只读文件系统制作 Linux 系统文件,并采用 overlayfs 为用户目录增加可写权限。

Squashfs 是一种只读压缩文件系统,通常被用于数据备份或者系统资源受限的计算机系统上使用,如 Linux 发行版的 LiveCD,OpenWRT 系统也采用 squashfs。OverlayFS 一个结合其他文件系统的联合挂载,将多个挂载点叠加为一个目录。常见的应用是在一个只读的分区上叠加可读写的另一个分区。嵌入式 Linux 设备通常的功能都是被设计好的,极少需要在后期安装其他软件或更改 Linux 系统软件,更多的是更新设备应用程序和相关数据。因此基于 squashfs 的只读文件系统,结合 overlayfs 为用户应用和数据提供读写操作,能够提高嵌入式 Linux 文件系统可靠性。

本文所介绍的方式方法同样适用于其余RK平台linux(buildroot)系统产品。

2. 配置kernel支持squashfs+overlay

本部分介绍如何配置内核支持squashfs与overlay并修改bootargs以在开机启动时引导加载squashfs格式的根文件系统。

2.1 配置内核支持squashfs

在这里插入图片描述

2.2 配置内核支持overlayfs

在这里插入图片描述

2.3 修改bootargs引导squash根文件系统

在这里插入图片描述

3. 修改buildroot文件系统启动与挂载支持

本部分实际使用时通过rk提供的overlayfs方式()进行目标文件系统文件覆盖替换,具体overlay操作不做介绍。

3.1 修改fstab增加rootfs挂载项

在这里插入图片描述
注意:需要首先通过overlayfs机制提供对应的挂载点目录:/media/root-ro

3.2 添加开机启动overlay挂载脚本

/etc/init.d/S01overlay.sh

#!/bin/sh
function overlay_mount(){
	mkdir -p /userdata/overlay/upper
	mkdir -p /userdata/overlay/work
	chmod 0755 /userdata/overlay/upper
	chmod 0755 /userdata/overlay/work
	mount -o noatime,lowerdir=/,upperdir=/userdata/overlay/upper,workdir=/userdata/overlay/work -t overlay "overlay:/overlay" /mnt
	pivot_root  /mnt  /mnt/media/root-ro
	mount -o noatime,move /media/root-ro/tmp /tmp
	mount -o noatime,move /media/root-ro/run /run
	mount -o noatime,move /media/root-ro/proc /proc
	mount -o noatime,move /media/root-ro/dev /dev
	mount -o noatime,move /media/root-ro/dev/pts /dev/pts
	mount -o noatime,move /media/root-ro/dev/shm /dev/shm
	mount -o noatime,move /media/root-ro/sys /sys
	mount -o noatime,move /media/root-ro/sys/kernel/config /sys/kernel/config
	mount -o noatime,move /media/root-ro/sys/kernel/debug /sys/kernel/debug
	mount -o noatime,move /media/root-ro/sys/fs/pstore /sys/fs/pstore
	mount -o noatime,move /media/root-ro/oem /oem
	mount -o noatime,move /media/root-ro/userdata /userdata
}

case "$1" in
	start|"")
		overlay_mount
		;;
	restart|reload|force-reload)
		echo "Error: argument '$1' not supported" >&2
		exit 3
		;;
	stop|status)
		# No-op
		;;
	*)
		echo "Usage: start" >&2
		exit 3
		;;
esac

:

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值