BeagleBone Greenで電源をブチ切ってもいいようにRead-onlyでブートするように設定する手順です。
調べるとRaspberry Pi版が結構出てくるのですが、違うのは/etc/fstab
を編集するあたり。
ここを適宜変えればどのボードでも動くはずです。
実作業
まず、UnionFSをインストールします。
(使っているものに合わせてパッケージマネージャを変えてください)
aptitude install unionfs-fuse
続いて、UnionFSでマウントするようにスクリプトを作っておきます。
vi /usr/local/bin/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: 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: 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