LoginSignup
28
43

More than 5 years have passed since last update.

[メモ] RaspberryPi: リードオンリーRoot-FS (overlayfs使用)

Last updated at Posted at 2017-04-05

概要

  • 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 (軽量版)

手順

  1. いつも通りの初期設定
    • Raspbianを焼いて、
    • sudo apt-get update && sudo apt-get upgrade -y
  2. 使う環境まで、セットアップ

  3. 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
    
  4. 元のようにrwに戻すには、/boot/config.txtの最後に追加された、initramfs initrd.gzをコメントアウトして再起動する

    sudo mount -o remount,rw /dev/mmcblk0p1
    sudo vi /mnt/boot-ro/config.txt
    #
    #
    sudo reboot
    

その他

  • 構成

    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 で回答を調べてる最中、発見した。

28
43
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
43