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