How to use overlayfs on S5Pxxxx,H3,H5 platform/zh

From FriendlyELEC WiKi
Jump to: navigation, search

English

1 什么是OverlayFS

Overlayfs是Linux下的一种堆叠文件系统,通俗地讲,根文件系统虽然在逻辑仍然是一个分区,但物理上被拆分成了两个分区来存储,其中,一个分区只读存放固化的系统数据(rootfs分区),另一个分区存储写入的数据(data分区),优点如下:
1) 方便恢复出厂设置,格式化data分区即可;
2) 避免重复掉电或异常掉电导致data分区挂载异常无法进入系统,由于rootfs是只读的,此时仍可以进入系统,方便维护升级;

2 哪些平台与系统支持OverlayFS

2.1 支持的硬件平台

H3, H5, S5P4418, S5P6818, RK3399系列开发板

2.2 支持的软件平台

所有基于Linux的系统

3 如何鉴别系统是否工作在OverlayFS

执行df命令,如果/分区挂载类型为 overlay,表示OverlayFS正在工作:

pi@NanoPi-M1-Plus:~$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              474848       0    474848   0% /dev
tmpfs             102304    3564     98740   4% /run
overlay         28925547 1315493  26112465   5% /
tmpfs             511512       0    511512   0% /dev/shm
tmpfs               5120       4      5116   1% /run/lock
tmpfs             511512       0    511512   0% /sys/fs/cgroup
/dev/mmcblk0p1     40862   11852     29010  30% /boot
tmpfs             102304       0    102304   0% /run/user/1000

4 使用OverlayFS时的分区布局

会有三个分区,分别为 rootfs分区、data分区与boot分区,对应映像文件rootfs.img, userdata.img 和 boot.img:

root@NanoPi-M1-Plus:~# lsblk /dev/mmcblk0
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0     179:0    0 29.7G  0 disk
|-mmcblk0p2 179:2    0  1.2G  0 part
|-mmcblk0p3 179:3    0 28.5G  0 part
`-mmcblk0p1 179:1    0   40M  0 part /boot

其中,rootfs分区存放固化的系统数据,所有对根目录的数据写入,都会写入到 data分区。

5 使用OverlayFS实现恢复出厂设置功能

5.1 方法1: 手动清除user data分区数据

挂载data分区并重命名相关目录:

mount /dev/mmcblk0p3 /media/ && cd /media/
mv root/ deleteme.root
mv work/ deleteme.work
reboot

重启完成后,删除目录:

mount /dev/mmcblk0p3 /media/ && rm -rf /media/deleteme.*

5.2 方法2: 通过命令行参数恢复出厂设置

5.2.1 S5P4418 & S5P6818平台

在内核命令行参数中加入 wipedata=yes,S5P4418与S5P6818平台可以在系统运行时进行修改:

5.2.1.1 执行恢复出厂设置
sudo fw_setenv bootargs "`sed 's/ wipedata=yes//g;s/ wipedata=no//g' /proc/cmdline` wipedata=yes"
sudo reboot

下次开机时会抹掉data分区的数据。

5.2.1.2 取消恢复出厂设置
sudo fw_setenv bootargs "`sed 's/ wipedata=yes//g;s/ wipedata=no//g' /proc/cmdline` wipedata=no"
sudo reboot

5.2.2 H3/H5平台

5.2.2.1 修改 BOOT 分区里的 boot.cmd

进入 boot 目录,将 boot.cmd 里的:

setenv bootargs "console=${debug_port} earlyprintk
root=/dev/mmcblk0p2 rootfstype=ext4 rw rootwait fsck.repair=${fsck.repair}
panic=10 fbcon=${fbcon} ${hdmi_res} ${overlayfs} ${pmdown}"

修改为:

setenv bootargs "console=${debug_port} earlyprintk
root=/dev/mmcblk0p2 rootfstype=ext4 rw rootwait fsck.repair=${fsck.repair}
panic=10 fbcon=${fbcon} ${hdmi_res} ${overlayfs} ${pmdown} wipedata=yes"

区别在于添加了 wipedata=yes。

5.2.2.2 生成 boot.scr

进入 boot 目录,执行下面的命令:

$ mkimage -C none -A arm -T script -d boot.cmd boot.scr

重启板子,以后每次启动系统都会执行恢复出厂设置的操作。

6 临时禁用OverlayFS

可以做完TF启动卡之后,用 fdisk 操作TF卡,删除 data 分区。

6.1 Rockchip平台

请参考: How to use overlayfs on Linux/zh