OverlayRootfs 소개
OverlayRootfs는 OverlayFS 기술을 사용하여 생성된 루트 파일 시스템을 의미합니다. OverlayFS는 여러 파일 시스템 계층을 단일 뷰로 병합할 수 있는 유니온 파일 시스템(UnionFS)으로, Linux 시스템에서 널리 사용됩니다. OverlayRootfs를 사용하는 기기는 루트 파일 시스템에 대한 쓰기 보호 및 공장 초기화 기능을 쉽게 구현할 수 있습니다.
루트 파일 시스템 쓰기 보호
OverlayRootfs를 지원하는 Firefly 장치에서 rootfs 파티션은 /root-ro(하위 계층)에 읽기 전용으로 마운트됩니다. 모든 사용자 수정 사항은 rootfs 파티션이 아닌 userdata 파티션의 /userdata/rootfs_overlay(상위 계층)에 기록됩니다. 이렇게 하면 rootfs 파티션 데이터가 읽기 전용으로 유지되고 손상되지 않습니다. OverlayRootfs는 /root-ro와 /userdata/rootfs_overlay를 단일 뷰로 병합하여 사용자에게 보이지 않게 합니다.
예시 설명
Linux 장치에서 잦은 정전과 재부팅은 읽기/쓰기 파티션을 손상시켜 제대로 부팅되지 못하게 할 수 있습니다. OverlayRootfs가 활성화된 Firefly 장치는 사용자 데이터 파티션을 실제 읽기/쓰기 파티션으로 사용합니다. 정전으로 사용자 데이터 파티션이 손상되더라도 장치는 여전히 루트 파일 시스템을 읽기 전용 모드로 부팅할 수 있습니다. 사용자는 장치를 제어하여 파티션 복구 및 데이터 보존 작업을 수행할 수 있습니다. 다음은 사용자 데이터 파티션을 수동으로 삭제한 후 읽기 전용 모드로 부팅되는 시스템의 예입니다.

OverlayRootfs를 테스트하기 위해 파일을 생성하거나 삭제할 수 있습니다. 실제 데이터는 /userdata/rootfs_overlay에 기록됩니다.
-
# Create a file that can be found in the same directory under /userdata/rootfs_overlay/
-
root@firefly:~# touch /usr/local/bin/firefly-test
root@firefly:~# ls /userdata/rootfs_overlay/usr/local/bin/firefly-test
/userdata/rootfs_overlay/usr/local/bin/firefly-test
# Delete the corresponding files under /userdata/rootfs_overlay/. The corresponding files in the real file system will also be modified.
root@firefly:~# rm -rf /userdata/rootfs_overlay/usr/local/bin/firefly-test
root@firefly:~# ls /usr/local/bin/
-
disable_ModemManager.sh docker-compose ec200.sh quectel-CM restart_plank.sh
rootfs 파티션은 읽기 전용이고 수정할 수 없으므로 df -h를 사용하여 rootfs 파티션의 사용 가능한 공간이 작은지 확인할 수 있습니다. 사용자가 실제로 userdata 파티션에 쓰기 작업을 하기 때문에 이는 정상적인 현상입니다.

공장 설정 복원
"복구 재설정"을 실행하면 사용자 데이터 파티션이 자동으로 지워지고, 플래싱 직후 장치의 파일 시스템이 초기 상태로 복원됩니다.
-
# Create a file verification function and execute recovery reset to restore factory settings.
-
root@firefly:~# touch /home/firefly/test
-
root@firefly:~# ls /home/firefly/test
-
/home/firefly/test
-
root@firefly:~# recovery reset
command: --wipe_all
-
update: write command to command file: done
-
update: write command to misc file: done
-
update: reboot!
# After reboot
-
root@firefly:~# ls /home/firefly/test
-
ls: cannot access '/home/firefly/test': No such file or directory
OverlayRootfs 비활성화
빠른 시작, A&B 시스템 등 일부 상황에서는 OverlayRootfs를 비활성화해야 할 수 있습니다. 커널 시작 매개변수를 수정하여 OverlayRootfs 기능을 활성화/비활성화할 수 있습니다. 예: RK3576:
-
# Modify the kernel's dts chosen node.
-
kernel/arch/arm64/boot/dts/rockchip/rk3576-linux.dtsi
chosen: chosen {
-
// Disable OverlayRootfs functionality
-
//bootargs = "earlycon=uart8250,mmio32,0x2ad40000 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rw rootwait rcupdate.rcu_expedited=1 rcu_nocbs=all";
// Enable OverlayRootfs functionality
-
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";