ラズパイ:シャットダウンフリー overlay編(fuse無し)

Linuxで最初に動くプログラムである/sbin/initは、/lib/systemd/systemdへのシンボリックリンクになっているが、これをスクリプトにして調整事項を挟み込んでしまえば、fuseは不要となる。fuse+overlay編よりも調整の手間が少ないので、私はこちらの方が好きだが、こちらも実績は薄いので、自己責任で、ラズパイが手に届く範囲での利用を推奨する。
元の環境でapt updateを実施すると、/sbin/initはシンボリックリンクに戻ることがある。これを避けるには、/sbin/myinitで作成し、/boot/cmdline.txtに「init=/sbin/myinit」を追記すれば良い。
前提:準備①〜③、⑤が完了していること。fuseは不要。

~# mkdir /overlay
~# dosfslabel /dev/mmcblk0p1 boot
~# e2label /dev/mmcblk0p2 rootfs

/etc/fstab(rw→ro):

# overlay用の/etc/fstab
# proc
proc          /proc    proc  defaults             0 0
# 軟弱なFAT領域はroマウント
LABEL=boot    /boot    vfat  ro,defaults          0 2
# rootfsはコメントアウト
#LABEL=rootfs  /        ext4  ro,defaults,noatime  0 1
# /tmpもroになるのでtmpfsにする
tmpfs         /tmp     tmpfs defaults             0 0


~# rm /sbin/init

/sbin/init:

#!/bin/bash
## /.overlayが存在すればoverlayにする。
if [ -e /.overlay ] && [ -d /overlay ] ; then
    ## /var/logのツリー構成だけを退避
    find /var/log/ -type d | cpio -pdm /dev/shm/
    find /var/log/ -type l | cpio -pdm /dev/shm/
    ## overlayのrw実体となるtmpfsを作成
    mount -t tmpfs tmpfs /overlay
    ## 主要フォルダをoverlay化
    for d in usr etc home root var; do
        mkdir -p /overlay/${d} /overlay/${d}_rw
        OPTS="-o lowerdir=/${d},upperdir=/overlay/${d},workdir=/overlay/${d}_rw"
        mount -t overlay ${OPTS} overlay /${d}
    done
    #### Option-A:退避した/var/logをtmpfsに移動
    mount -t tmpfs tmpfs /var/log
    mv /dev/shm/var/log/* /var/log/
    rm -rf /dev/shm/log
    #### Option-B:退避した/var/logをoverlayfsに移動
    ## rm -rf /var/log
    ## mv /dev/shm/var/log /var/
else
    ## rootfsをrw,noatimeに設定
    mount -o remount,rw,noatime /
fi
## Start Systemd
exec /lib/systemd/systemd

~# chmod +x /sbin/init


シャットダウンフリー環境へ移行:
~# touch /.overlay /fastboot
~# reboot
元の環境に戻す:
~# mount -oremount,rw /
~# rm /.overlay
~# reboot

$HOME/.bashrcへの追記(任意):

findmnt /etc | grep overlay > /dev/null
[ $? == 0 ] && printf "\n<<<< The Overlay Environment! >>>>\n\n"