2014/05/11

Raspberry Pi をRead-Onlyで動かす

ラズパイを電源ブチ切りできるように

SDをRead-Onlyでマウントするシステムを構築

するためのメモ


※wheezy環境での構築メモです。
2018年を迎えた今でもアクセスがあるのですが、
構築に失敗したという情報も見受けます。
十分にご注意ください。
Stretchでは確実に死にます。


aufs+fsprotectよりお手軽なunionfs-fuseを組み込んでみる。
※RAMDisk運用ができていることが前提

パッケージ導入
# apt-get install unionfs-fuse

スクリプト編集
# cp /usr/share/doc/unionfs-fuse/examples/S01a-unionfs-fuse-live-cd.sh /etc/init.d/a-unionfs-fuse-live-cd
# cp /usr/share/doc/unionfs-fuse/examples/rc.local.omit-pid.sh /usr/local/sbin/a-unionfs-fuse-omit-pid.sh

# vi /etc/init.d/a-unionfs-fuse-live-cd
先頭(#!/bin/shの後)にINIT INFOを追記
#!/bin/sh

### BEGIN INIT INFO
# Provides: a-unionfs-fuse-live-cd
# Required-Start: mountall-bootclean
# Required-Stop:
# Default-Start: S
# Default-Stop:
# X-Start-Before: procps udev-mtab urandom
# Short-Description: UnionFS mode
# Descrition: Shutdown process will not be required
### END INIT INFO

前半の UBIN= の下に追記
UBIN=/usr/bin/unionfs-fuse

cd /boot
file=noprotect
if [ -e ${file} ]; then
    echo "${file} exists"
    exit 0
fi

mount -o remount,ro /dev/mmcblk0p1 /boot

末尾の pivot_root . oldroot の下に追記
pivot_root . oldroot

mount -o remount,ro /dev/root /oldroot
for d in dev run run/lock sys run/shm dev/pts boot
do
  mount --bind /oldroot/$d /$d
done

同 init q の下に追記
init q

/usr/local/sbin/a-unionfs-fuse-omit-pid.sh

exit 0

initスクリプト有効化
# update-rc.d a-unionfs-fuse-live-cd defaults

切り替えスクリプト作成
# vi /usr/local/bin/noprotect
#!/bin/sh

mount -o rw,remount /boot
cd /boot
if [ -e "protect" ]; then
    rm /boot/protect
fi

if [ -e "noprotect" ]; then
    echo "noprotect mode"
else
    touch /boot/noprotect
    echo "noprotect mode"
fi

mount -o ro,remount /boot

# vi /usr/local/bin/protect
#!/bin/sh

mount -o rw,remount /boot
cd /boot
if [ -e "noprotect" ]; then
    rm /boot/noprotect
fi

if [ -e "protect" ]; then
    echo "protect mode"
else
    touch /boot/protect
    echo "protect mode"
fi

mount -o ro,remount /boot

# chmod a+x /usr/local/bin/noprotect
# chmod a+x /usr/local/bin/protect


起動モード切り替え
通常(ReadWrite)モードで起動
# noprotect

ReadOnlyモードで起動
# protect



3 件のコメント:

  1. 先日Raspberry Piを購入し四苦八苦しながらVPNサーバを構築しましたが
    SDカードの寿命が気になり色々調べるとaufs+fsprotectの記事が沢山ありましたが
    Linux初心者の私にはカーネルコンパイル等は、
    まだ敷居が高く半分諦めかけていたところでした。

    みそりん様の記事を参考にして
    Read-Only環境構築に再チャレンジしてみようと思います!

    返信削除
    返信
    1. 備忘録な自分メモ的な表現なのでわかりにくいかもですが。
      頑張ってみてください!

      削除
  2. 少し時間がとれましたの挑戦してみました。
    結果は無事リードオンリーで動作しているようです!
    起動モード切り替えスクリプトは大変便利ですね!
    これでSDカードの寿命を気にしすぎないで済みそうです。
    私にとって大変ありがたい記事でした、感謝いたします。

    返信削除

フォロワー