Raspberry PiをNFSrootで起動する

組込みLinuxの開発ではルートファイルシステムをまるごとNFSにしてしまうと便利です。Raspberry Piが起動しているかどうかに関わらずルートファイルシステムのファイルをいじることができるようになります。

NFSサーバの準備

以下のページを見てください。
NFSサーバの設定 - 組み込みの人。

RaspbianのrootパーテションをNFSディレクトリにコピーする

RaspbianのインストールされたSDカードをNFSサーバとなるLinuxマシンに挿します。
SDカードのrootパーティションが /media/koba/root にマウントされたとすると

$ sudo mkdir /export/raspbian
$ cd /export/raspbian
$ sudo cp -a /media/koba/root/ root

fstabを編集

/ をmountするところをコメントアウトします。

$ cat /export/raspbian/root/etc/fstab
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p6  /boot           vfat    defaults          0       2
#/dev/mmcblk0p7  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, so no using swapon|off from here on, use  dphys-swapfile swap[on|off]  for that

カーネルのブートパラメータの変更

RaspbianのSDカードの/boot/cmdline.txt を以下のように変更します。(NFSサーバのIPアドレスが192.168.0.6のとき)

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 root=/dev/nfs nfsroot=192.168.0.6:/export/raspbian/root rw ip=dhcp elevator=deadline rootwait

起動ログがシリアルコンソールに出るように、console=tty1 も外しました。
これで起動したときのブートログをgistに貼りました。
NFSrootで起動したブートログ

(追記)NFSのオプションパラメータのチューニング

カーネルパラメータのnfsroot= のところにNFSのオプションを指定できます。
rsize=32768,wsize=32768,tcp,vers=3 を指定するとデフォルトに比べてパフォーマンスがあがります。測定していませんが、体感的にはSDカードにルートファイルシステムを置いたときと同等になります。

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 root=/dev/nfs nfsroot=192.168.0.6:/export/raspbian/root,rsize=32768,wsize=32768,tcp,vers=3 rw ip=dhcp elevator=deadline rootwait