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 領域が壊れたら死ぬ的な意味で)使うことができます。