Raspberry Pi のルートファイルシステムを NFS にする
Raspberry Pi を NFS root 環境でブートする設定をした記録です。
Raspberry Pi に差してる SD カード、よく壊れます。確か3回くらい壊れて悔しい涙を流しました。
特に良く使われるものでは SD カードの制作時に想定された回数を超える書き込みがされ、壊れやすくなります。
資源的にも財布的にも優しくないので root 領域をファイルサーバーの NFS に逃がします。
Raspberry Pi は Model B (無印)のメモリ 512MB 版で OS は raspbian 。
NFS サーバーは Gentoo で動いているファイルサーバー。
ファイルサーバー側で NFS サーバーの設定
emerge で NFS サーバーの機能を追加
# emerge net-fs/nfs-utils
exports を編集して共有するディレクトリを指定します。 IP アドレスは架空のアドレスです。必要に応じて適当なものに読み替えてください。
# vi /etc/exports /mnt/wd/rpi3 192.168.10.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)
NFS サーバーを再起動するなり設定を再読み込みして設定が適用されているか確認します。
# /etc/init.d/nfs restart # exportfs -v /mnt/wd/rpi3 192.168.10.0/255.255.255.0(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
Raspberry Pi 側の設定
FAT 領域にある cmdline.txt
を編集します。
ここでは Raspberry Pi の IP アドレスは DHCP から取得する設定にしてあります。
# vi /boot/cmdline.txt dwc_otg.lpm_enable=0 console=tty1 root=/dev/nfs rootfstype=nfs nfsroot=192.168.10.14:/mnt/wd/rpi3,udp,vers=3 ip=dhcp elevator=deadline rootwait
NFS をマウントするためのパッケージを入れます。
# apt-get install rpcbind nfs-common -y
間違って SD カードをマウントしないように fstab から /dev/mmcblk0p2
の記述をコメントアウトします。
# vi /etc/fstab #/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
一度 NFS サーバーをマウントして root 領域をコピーします。
# mount 192.168.10.14:/mnt/wd/rpi3 /mnt # rsync -av --progress --partial --exclude '/mnt' /. /mnt/.
後は祈りながら再起動すれば Ok.
再起動後の df -h
はこんな感じでした。
$ df -h Filesystem Size Used Avail Use% Mounted on rootfs 917G 404G 467G 47% / 192.168.10.14:/mnt/wd/rpi3 917G 404G 467G 47% / devtmpfs 238M 0 238M 0% /dev tmpfs 49M 200K 49M 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 97M 0 97M 0% /run/shm /dev/mmcblk0p1 56M 15M 42M 26% /boot
うまくいけば SD カードの寿命をほとんど気にせず( FAT 領域が壊れたら死ぬ的な意味で)使うことができます。