OverlayRootfs 介紹
OverlayRootfs 是指利用 OverlayFS 技術創(chuàng)建的根文件系統(tǒng)(root filesystem)。OverlayFS 是一種聯合文件系統(tǒng)(UnionFS),允許將多個文件系統(tǒng)層合并成一個單一的視圖,在 Linux 系統(tǒng)中廣泛應用。使用 OverlayRootfs 的設備可以很輕松的實現:根文件系統(tǒng)寫保護、恢復出廠設置功能。
根文件系統(tǒng)寫保護
使能 OverlayRootfs 的 Firefly 設備 Rootfs 分區(qū)會被掛載到 /root-ro只讀保護(Lower layer),所有的用戶修改都是寫入到 Userdata 分區(qū)的 /userdata/rootfs_overlay(Upper layer),不會寫入到 Rootfs 分區(qū),確保 Rootfs 分區(qū)數據只讀而不會被破壞。OverlayRootfs 會把 /root-ro 和 /userdata/rootfs_overlay 合并成一個單一的視圖,用戶在使用上是無感的。
示例說明:
通常 Linux 設備如果頻繁的硬件斷電重啟,可能會造成讀寫分區(qū)的損壞,從而無法正常開機。Firefly 使能 OverlayRootfs 的設備,真實讀寫是 userdata 分區(qū),即使硬件斷電導致 userdata 分區(qū)損壞設備依然能以只讀的形式啟動根文件系統(tǒng),用戶依然可以控制設備做一些分區(qū)恢復、數據保存的操作。下面是人為的破壞 userdata 后依然可以以只讀的方式開機:
可以創(chuàng)建或者刪除一個文件來測試 OverlayRootfs,真實數據是寫入到了 /userdata/rootfs_overlay 上。
# 創(chuàng)建一個文件,可以在 /userdata/rootfs_overlay/ 下相同目錄找到root@firefly:~# touch /usr/local/bin/firefly-testroot@firefly:~# ls /userdata/rootfs_overlay/usr/local/bin/firefly-test/userdata/rootfs_overlay/usr/local/bin/firefly-test
# 刪除 /userdata/rootfs_overlay/ 下對應文件,真實文件系統(tǒng)中的相應文件也會被修改root@firefly:~# rm -rf /userdata/rootfs_overlay/usr/local/bin/firefly-testroot@firefly:~# ls /usr/local/bin/disable_ModemManager.sh docker-compose ec200.sh quectel-CM restart_plank.sh
由于 rootfs 分區(qū)是只讀而且不會被修改的,所以使用 df -h 可以看到 rootfs 分區(qū)可用空間不大這是正常的,用戶真正寫入的是 userdata 分區(qū)。
恢復出廠設置
執(zhí)行“recovery reset”系統(tǒng)會自動擦除 userdata 分區(qū),讓設備文件系統(tǒng)恢復到剛剛燒錄完成的狀態(tài)。
# 創(chuàng)建一個文件驗證功能,執(zhí)行 recovery reset 恢復出廠設置。root@firefly:~# touch /home/firefly/testroot@firefly:~# ls /home/firefly/test/home/firefly/testroot@firefly:~# recovery resetcommand: --wipe_allupdate: write command to command file: doneupdate: write command to misc file: doneupdate: reboot!
# 重啟之后root@firefly:~# ls /home/firefly/testls: cannot access '/home/firefly/test': No such file or directory
關閉OverlayRootfs功能
部分場景可能需要關閉 OverlayRootfs,如:快速啟動、A&B 系統(tǒng)等,可以通過修改 kernel 啟動參數來使能/關閉 OverlayRootfs 功能。如 RK3576:
# 修改 kernel 的 dts chosen 節(jié)點。kernel/arch/arm64/boot/dts/rockchip/rk3576-linux.dtsi
chosen: chosen {// 關閉 OverlayRootfs 功能//bootargs = "earlycon=uart8250,mmio32,0x2ad40000 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rw rootwait rcupdate.rcu_expedited=1 rcu_nocbs=all";// 使能 OverlayRootfs 功能bootargs = "earlycon=uart8250,mmio32,0x2ad40000 console=ttyFIQ0 root=PARTLABEL=rootfs rootfstype=ext4 ro rootwait overlayroot=device:dev=PARTLABEL=userdata,fstype=ext4,mkfs=1 rcupdate.rcu_expedited=1 rcu_nocbs=all net.ifnames=0";
-
Linux
+關注
關注
87文章
11353瀏覽量
210565 -
根文件系統(tǒng)
+關注
關注
0文章
26瀏覽量
12049
發(fā)布評論請先 登錄
相關推薦
基于Buildroot的Linux系統(tǒng)構建之根文件系統(tǒng)
Linux根文件系統(tǒng)的組成及構建方案
根文件系統(tǒng)的含義和相關重要概念以及加載代碼分析
根文件系統(tǒng)
根文件系統(tǒng)的制作
基于Cramfs的根文件系統(tǒng)配置
基于zynq的Linux根文件系統(tǒng)生成
![基于zynq的Linux<b class='flag-5'>根</b><b class='flag-5'>文件系統(tǒng)</b>生成](https://file1.elecfans.com//web2/M00/A6/AB/wKgZomUMP4CAUEX9AAAUCK7ctMY803.jpg)
設備文件系統(tǒng)devfs詳細解析
CramFS根文件系統(tǒng)的移植解析
嵌入式Linux開發(fā)-根文件系統(tǒng)NFS網絡掛載
rootfs根文件系統(tǒng)制作
使用BusyBox構建根文件系統(tǒng)
![使用BusyBox構建<b class='flag-5'>根</b><b class='flag-5'>文件系統(tǒng)</b>](https://file1.elecfans.com/web2/M00/82/12/wKgaomQ_Wn2AZ31jAABmb9f_k1A269.jpg)
評論