overlay是一种联合文件系统,包含两个文件系统,一个lower底层只读文件系统和一个upper上层可写文件系统。
开启overlay可以有很多有意思的玩法,比如立即恢复默认系统配置、保存当前系统配置、切换不同系统配置等。
本教程通过修改启动参数来执行一个自定义预载脚本,使用备份分区/dev/mmcblk0p5
作为系统底层,在6分区中新建overlay数据文件夹用作写入,不影响原先6分区的数据,使用原启动参数即可恢复到原系统
下面是开启overlay步骤:
mount -t ext4 /dev/mmcblk0p5 /media
- 2、制作preinit脚本进行文件系统的预载操作(整段复制到终端运行)
cat > /media/preinit<< EOF
#!/bin/sh
overlay_device="/dev/mmcblk0p6"
overlay_subdir=""
mount -t devtmpfs none /dev
mount -t proc proc /proc
mount -t sysfs none /sys
mount -t tmpfs none /mnt
mkdir -p /mnt/lower /mnt/overlay$overlay_subdir /mnt/newroot
mount -o bind,ro / /mnt/lower
mount -t ext4 $overlay_device /mnt/overlay$overlay_subdir
mkdir -p /mnt/overlay$overlay_subdir/upper /mnt/overlay$overlay_subdir/work
mount -t overlay -o lowerdir=/mnt/lower,upperdir=/mnt/overlay$overlay_subdir/upper,workdir=/mnt/overlay$overlay_subdir/work overlayfs-root /mnt/newroot
mkdir -p /mnt/newroot/lower /mnt/newroot/overlay
cd /mnt/newroot
pivot_root . mnt
exec chroot . sh -c "$(cat <<END
mount --move /mnt/mnt/lower/ /lower
mount --move /mnt/mnt/overlay /overlay
chmod 755 /overlay
mount --move /mnt/proc /proc
mount --move /mnt/dev /dev || true
mount | sed -E -e 's/^.* on //g' -e 's/ type .*\$//g' | grep -x '^/mnt.*\$' | sort -r | while read xx ; do echo -n "\$xx\0" ; done | xargs -0 -n 1 umount
exec /sbin/init "\$@"
END
)" sh "$@"
EOF
chmod a+x /media/preinit
umount /media
- 4、ttl进入fasboot,并修改bootargs启动参数
setenv bootargs console=ttyAMA0,115200 root=/dev/mmcblk0p5 init=/preinit rootfstype=ext4 rootwait blkdevparts=mmcblk0:1M(boot),1M(bootargs),10M(kernel),256M(rootfs),700M(backup),-(ubuntu)
- 5、(可选)如需每次重启自动进入overlay系统的话需要保存启动参数
saveenv
mmc read 0 0x1FFBFC0 0x4B000 0x5000; bootm 0x1FFBFC0
df -hT
挂载点 / 对应的文件系统为overlay
即开启成功
备注:
可以通过修改脚本的 overlay_subdir
参数来切换overlay的子文件夹,这样可以实现不同配置的用户数据相互独立,比如改为"/ubuntu"
(参数必须以"/"
开头),则所有用户数据均保存在/overlay/ubuntu
下
删除/overlay/
中相应配置的文件夹即可恢复默认配置
多个配置如有数据需要共用建议把数据目录建立到/overlay下,比如共用docker的/var/lib/docker目录等