概要
-
Read-only Root-FS with overlayfs for Raspian
https://github.com/josepsanzcamp/root-ro -
rootfsをroにしてしまおう
-
再起動で、元に戻る
-
書き込まれる部分は、RAM上の
tmpfs
(実体:/mnt/root-rw
)となるので、書込容量制限あるし、メモリも圧迫する例pi@rpi2:~$ free total used free shared buffers cached Mem: 947732 385056 562676 55264 19504 263544 -/+ buffers/cache: 102008 845724 Swap: 0 0 0 pi@rpi2:~$ cat /dev/zero > aa cat: write error: No space left on device pi@rpi2:~$ free total used free shared buffers cached Mem: 947732 824960 122772 495276 19504 703556 -/+ buffers/cache: 101900 845832 Swap: 0 0 0 pi@rpi2:~$ ls -l aa -rw-r--r-- 1 pi pi 450564096 Apr 5 19:01 aa pi@rpi2:~$ rm aa
-
microSDに書き込みを行わない(ハズ)なので、組み込み機器などにいいかと。
-
GUIありでも、いける。
-
-
以前、[メモ] Raspberry Piで OverlayFS (組み込み向け設定・スクリプト)
という記事を書いたが、これのほうが導入もメンテもラクチンな感じ? -
追記: 2017-11-16
最近のラズビアンでは、/dev/mmcblk0~~
ではなく、PARTUUID=~~
を使ってるが、これだと、うまくroot-ro
のスクリプトが動かない。
cmdline.txt
と/etc/fstab
の該当箇所を、/dev/mmcblk0p1
と/dev/mmcblk0p2
に書き換えてから、root-ro
を入れると、動く。/boot/cmdline.txt変更前: dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=b14b2030-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait 変更後: dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
/etc/fstab
...
# 変更前
PARTUUID=b14b2030-01 /boot vfat defaults 0 2
PARTUUID=b14b2030-02 / ext4 defaults,noatime 0 1
# 変更後
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
...
```
環境
- Raspberry Pi 2
- Raspbian:
- 2017-03-02-raspbian-jessie.img (GUIあり)
- 2017-03-02-raspbian-jessie-lite.img (軽量版)
手順
-
いつも通りの初期設定
- Raspbianを焼いて、
- sudo apt-get update && sudo apt-get upgrade -y
-
使う環境まで、セットアップ
-
root-ro化
- 上記githubサイトに書かれてる手順どおり行う
手順cd /home/pi # rootになる。 sudo bash # 必要なパッケージ類 echo Installing all dependencies apt-get install git subversion rsync gawk busybox bindfs # swapを使用しないように echo Disabling swap dphys-swapfile swapoff dphys-swapfile uninstall update-rc.d dphys-swapfile disable systemctl disable dphys-swapfile #gitクローン echo Cloning repository git clone https://github.com/josepsanzcamp/root-ro.git # 設定 echo Doing the setup rsync -va root-ro/etc/initramfs-tools/* /etc/initramfs-tools/ mkinitramfs -o /boot/initrd.gz echo initramfs initrd.gz >> /boot/config.txt # 再起動 echo Restarting RPI reboot
-
元のように
rw
に戻すには、/boot/config.txt
の最後に追加された、initramfs initrd.gz
をコメントアウトして再起動する
sudo mount -o remount,rw /dev/mmcblk0p1
sudo vi /mnt/boot-ro/config.txt
sudo reboot
## その他
- 構成
```shell-session
pi@rpi2:~ $ mount | grep /mnt/root
/dev/mmcblk0p2 on /mnt/root-ro type ext4 (ro,relatime,data=ordered)
tmpfs on /mnt/root-rw type tmpfs (rw,relatime)
overlay on / type overlay (rw,relatime,lowerdir=/mnt/root-ro,upperdir=/mnt/root-rw/upper,workdir=/mnt/root-rw/work)
pi@rpi2:~ $ mount | grep /mnt/boot
tmpfs on /mnt/boot-rw type tmpfs (rw,relatime)
/dev/mmcblk0p1 on /mnt/boot-ro type vfat (ro,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)
bindfs on /mnt/boot-ro2 type fuse.bindfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)
overlay on /boot type overlay (rw,relatime,lowerdir=/mnt/boot-ro2,upperdir=/mnt/boot-rw/upper,workdir=/mnt/boot-rw/work)
pi@rpi2:~ $
```
- テラテイル: https://teratail.com/questions/71314 で回答を調べてる最中、発見した。