Edited at

BeagleBone (Green) で Read-only な環境を作る

More than 3 years have passed since last update.

BeagleBone Greenで電源をブチ切ってもいいようにRead-onlyでブートするように設定する手順です。

調べるとRaspberry Pi版が結構出てくるのですが、違うのは/etc/fstabを編集するあたり。

ここを適宜変えればどのボードでも動くはずです。


実作業

まず、UnionFSをインストールします。

(使っているものに合わせてパッケージマネージャを変えてください)

aptitude install unionfs-fuse

続いて、UnionFSでマウントするようにスクリプトを作っておきます。

vi /usr/local/bin/mount_unionfs

内容は下記のとおり。


mount_unionfs

#!/bin/sh

DIR=$1
ROOT_MOUNT=$(awk '$2=="/" {print substr($4,1,2)}' < /etc/fstab)
if [ $ROOT_MOUNT = "rw" ]
then
/bin/mount --bind ${DIR}_org ${DIR}
else
/bin/mount -t tmpfs ramdisk ${DIR}_rw
/usr/bin/unionfs-fuse -o cow,allow_other,suid,dev,nonempty ${DIR}_rw=RW:${DIR}_org=RO ${DIR}
fi

スクリプトに実行権限を与えます。

chmod +x /usr/local/bin/mount_unionfs

ファイルシステムの変更内容を/etc/fstabにも書いておきます。

vi /etc/fstab

ここで編集するポイントですが、/の項目と/bootの項目だけRead-onlyに設定します。

また、/etc/varを下記の通りに追記します。

レイアウトがくずれていますがあしからず。

元の/etc/fstab


/etc/fstab

# /etc/fstab: static file system information.

#
# Auto generated by: beaglebone-black-eMMC-flasher.sh
#
# ここの部分が
# ボードによって違います
#
UUID=573d0d44-89f4-44b0-b6cc-61e0282b47fd / ext4 noatime,errors=remount-ro 0 1
UUID=44C9-4065 /boot/uboot auto defaults 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0

自分の場合、/etc/fstabは以下のようになりました。


/etc/fstab

# /etc/fstab: static file system information.

#
# Auto generated by: beaglebone-black-eMMC-flasher.sh
#
UUID=573d0d44-89f4-44b0-b6cc-61e0282b47fd / ext4 ro,noatime 0 1
UUID=447C-2A4C /boot/uboot auto ro 0 2
debugfs /sys/kernel/debug debugfs defaults 0 0
mount_unionfs /etc fuse defaults 0 0
mount_unionfs /var fuse defaults 0 0

見せかけ用の/etc/varを用意し、

バックアップ(/etc_org/var_org)と/varの実体(/var_rw)を作ります。

そして再起動。

cp -al /etc /etc_org

mv /var /var_org
mkdir /etc_rw
mkdir /var /var_rw
reboot

以上で完成です。


一時的に書き込み可能にする場合

一時的に書き込む場合はファイルシステムをrwで再マウントしてあげればOKです。

終わったら再起動してください。

mount -o remount,rw /

# 1. 何か書き込む作業をする
# 例:aptitude install git
# 2. 再起動 reboot


参照

pi3g Blog - Make Raspbian System Read-Only