103
121

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RaspberryPiをROM化する

Last updated at Posted at 2018-07-09

ファイルシステムをROM化する

組込み用途でRaspberryPiを使うときに考慮すべきなのが、SDカードの摩耗と、正規のシャットダウン手順を踏まない強制的な電源断です。SDカードへの書き込みは、SDカード内のフラッシュメモリの寿命を縮め、強制的な電源断は、最悪、ファイルシステムの破損を起こします。

LinuxのファイルシステムをROM化する方法は色々あるようですが、とりあえず簡単に導入できそうな、overlayfsを使用する方法です。以下のコマンドを淡々と打ち込んでください。カーネルの再構築など不要で、あっという間にできます。

INSTALL
cd /home/pi
sudo bash
apt-get install git rsync gawk busybox bindfs
dphys-swapfile swapoff
dphys-swapfile uninstall
update-rc.d dphys-swapfile disable
systemctl disable dphys-swapfile
git clone https://github.com/josepsanzcamp/root-ro.git
rsync -va root-ro/etc/initramfs-tools/* /etc/initramfs-tools/
mkinitramfs -o /boot/initrd.gz
echo initramfs initrd.gz >> /boot/config.txt
reboot

再起動が済んだら既にROM化されています。この状態でファイルに書き込むと、RAMを消費してtmpfs(所謂RAMディスク)上に書き込まれるので要注意です。ログファイルなどを無駄に出力しないように設定しておきましょう。

書き込み可能に切り替えるには以下のスクリプトを使います。

WR-ENABLE
#!/bin/sh

if [ -e /mnt/boot-ro/config.txt ]; then
    sudo mount -o remount,rw /dev/mmcblk0p1
    sudo grep -v initramfs /mnt/boot-ro/config.txt >/tmp/config.txt
    sudo cp /tmp/config.txt /mnt/boot-ro/config.txt
    sudo reboot
else
    echo Already write enabled
fi

書込み禁止に切り替えるには以下のスクリプトを使います。

WR-PROTECT
#!/bin/sh

if [ -e /mnt/boot-ro/config.txt ]; then
    echo Already write protected
else
    sudo grep -v initramfs /boot/config.txt >/tmp/config.txt
    sudo echo initramfs initrd.gz >> /tmp/config.txt
    sudo cp /tmp/config.txt /boot/config.txt
    sudo reboot
fi
103
121
7

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
103
121

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?