RaspberryPiのOSをOverlayを使用してReadOnly FSにする方法
overlayfs を使用して SD カードをRead Only 化することで、shutdown 操作をせずに電源断してもファイルシステムが壊れないようにする。
ただし、Log 等ファイルへの書き出しはRAMDISK 上に行われるので、RAM 逼迫が起きないように注意が必要。
長時間動作させる用途では、Log出力を抑止するような処理も必要となる(ここでは割愛)。
RO とRW の切り替えはあらかじめ用意しておくスクリプトで行う。これによりファイルのUpdate は可能。
rootに移行する $ cd /home/pi $ sudo bash まずはカーネルのバージョンを確認~ # uname -r バージョンにv7が含まれているかどうかが重要。~ 含まれていなければ以下の記述で7を削除して編集を行う。 initrdを作る(v7含む場合)~ # update-initramfs -c -k $(uname -r) # cd /boot # mv initrd.img-$(uname -r) initrd7.img initrdを作る(v7含まない場合)~ # update-initramfs -c -k $(uname -r) # cd /boot # mv initrd.img-$(uname -r) initrd.img 必要なパッケージをダウンロード # apt-get install git rsync gawk busybox bindfs swapを無効にする # dphys-swapfile swapoff # dphys-swapfile uninstall # update-rc.d dphys-swapfile disable # systemctl disable dphys-swapfile ReadOnlyFS化するキットをダウンロードして配置する # git clone https://github.com/josepsanzcamp/root-ro.git # rsync -va root-ro/etc/initramfs-tools/* /etc/initramfs-tools/ initrdのramfsを作る # mkinitramfs -o /boot/initrd.gz ramfsを使用して起動する様に設定を追加する # echo initramfs initrd.gz >> /boot/config.txt # reboot
#!/bin/sh # switch to RW if [ -e /mnt/boot-ro/config.txt ]; then sudo mount -o remount,rw /dev/mmcblk0p1 sudo grep -v initramfs /mnt/boot-ro/config.txt >/tmp/config.txt sudo cp /tmp/config.txt /mnt/boot-ro/config.txt sudo reboot else echo Already write enabled fi
#!/bin/sh # switch to RO if [ -e /mnt/boot-ro/config.txt ]; then echo Already write protected else sudo grep -v initramfs /boot/config.txt >/tmp/config.txt sudo echo initramfs initrd.gz >> /tmp/config.txt sudo cp /tmp/config.txt /boot/config.txt sudo reboot fi