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

RWモードへの切り替えスクリプト

#!/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

ROモードへの切り替えスクリプト

#!/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

注意事項


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-11-27 (月) 23:39:34