最終的に原因不明ながら成功したのでメモを残しておく。
1.前提条件
NFS Client(今回 NFSから起動させたいraspberry pi)
OS:Raspbian 2015-02-16
Client name:greg
IP:192.168.100.162
NFS Server
OS:Raspbian 2015-02-16
Server name:base
IP:192.168.100.161
HDDからBootする様に設定済み
(参考ページ http://wings2fly.jp/yaneura/raspberry-pi-on-hdd-no1/)
Gateway:192.168.100.1
2.Server設定
NFS関連インストール
sudo apt-get install -y nfs-common nfs-kernel-server
/etc/exportsの編集
sudo vi /etc/exports
下記の設定を追加
/var/raspi_image/greg 192.168.100.0/24(rw,sync,no_root_squash,no_subtree_check)
ディレクトリ作成
mkdir /var/raspi_image
mkdir /var/raspi_image/greg
NFSサービスリロード
sudo /etc/init.d/nfs-kernel-server reload
これでNFSサーバ側の設定は一旦完了。
3.client設定
NFSのインストールおよび設定
sudo apt-get install rpcbind nfs-common
sudo update-rc.d rpcbind enable
sudo update-rc.d nfs-common enable
NFSサーバにコピーするためにコピー先のディレクトリをマウント
sudo mount 192.168.100.161:/var/raspi_image/greg /wrk
/boot以外のファイルをコピーするためにmmcblk0p2を別途マウント
sudo mount /dev/mmcblk0p2 /media
全てのファイルをコピー
sudo cp -rav /media/* /wrk/
起動設定のバックアップ
sudo cp /boot/cmdline.txt /boot/cmdline.back
起動設定の編集
sudo vi /boot/cmdline.txt
以下の様に編集(1行で書くこと)dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/nfs nfsroot=192.168.100.161:/var/raspi_image/greg,udp,vers=3 ip=192.168.100.162:192.168.100.161:192.168.100.1:255.255.255.0:rpi:eth0:off rootfstype=nfs smsc95xx.turbo_mode=N
NFS上にコピーしたfstabファイルの変更
sudo vi /wrk/etc/fstab
以下の様に3行目をコメントアウトproc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
#/dev/mmcblk0p2 / 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
ここでいったん、Clientをリブート (これでNSFから起動するはず。)
sudo reboot
起動に成功したら今度はSWAPファイルの整理(以下は特に気にしなければ必要ないです。)
sudo apt-get remove --purge dphys-swapfile
sudo rm /var/swap
sudo update-rc.d dphys-swapfile remove
sudo dd if=/dev/zero of=/var/swapfile bs=1M count=1024
sudo losetup /dev/loop0 /var/swapfile
sudo mkswap /dev/loop0
sudo swapon /dev/loop0
起動時にSwapを設定するように/etc/rc.localを編集
sudo vi /etc/rc.local
以下の様に編集#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
#ここから追加
echo "Setting up loopy/var/swapfile.."
sleep 2
losetup /dev/loop0 /var/swapfile
mkswap /dev/loop0
swapon /dev/loop0
#ここまで
exit 0
その他のチューニング
sudo vi /etc/default/rcS
以下の様に編集#
# /etc/default/rcS
#
# Default settings for the scripts in /etc/rcS.d/
#
# For information about these variables see the rcS(5) manual page.
#
# This file belongs to the "initscripts" package.
# delete files in /tmp during boot older than x days.
# '0' means always, -1 or 'infinite' disables the feature
#TMPTIME=0
# spawn sulogin during boot, continue normal boot if not used in 30 seconds
#SULOGIN=no
# do not allow users to log in until the boot has completed
#DELAYLOGIN=no
# be more verbose during the boot process
#VERBOSE=no
# automatically repair filesystems with inconsistencies during boot
FSCKFIX=yes
ASYNCMOUNTNFS=no #←追加
下記参考ページ
http://youresuchageek.blogspot.jp/2013/01/raspberrypi-root-over-nfs-share.html