NFS Boot に成功した

とりあえず、NFS Boot は本当にできるのか試してみました。結果、できました。
実際やってみると、いろいろとはまるところがありましたが、おおむね以下の手順。忘れないうちにメモしておきます。

▼環境

NFS Server・・・・osx 10.9.5

Boot OS・・・・・ 2015-05-05-raspbian-wheezy

 

▼操作の流れ

・NFS サーバでシェアする用意

・arm 用の img のルートファイルシステムを NFS へコピー(大体は第2パーティションにあり。Fedora とは3番目)

・SDCard の FATフォーマットの boot の cmdline.txt へ nfs boot する設定と、IP の設定

 

▼osx の NFS Server 側

NFSの設定を入れて、nfsd を再起動。操作はroot でやっています。オンラインマニュアルはここ。

—- /etc/exports
/nfs/fedora22 -rw -mapall=root:wheel -network 192.168.1.0 -mask 255.255.255.0

exports ファイルがあればnfsd が起動しますが、手動で操作したい場合は

# nfsd start | stop

NFS で提供しているパスの確認。

# showmount -e localhost
Exports list on localhost:
/nfs/fedora22                       192.168.1.0
::

最初fedora22 入れようとして、失敗して、RASPIAN 入れたので名前があれですが。

それで、boot したい img をコピー。以下は、centos6.x で、osx の NFS をマウントして、rsync しています。centos6はバーチャルボックスでosx を同じネットワークセグメントにいます。

[root@cent66 etc]# df -hT
Filesystem                   Type     Size  Used Avail Use% Mounted on
::
hope.junkhack:/exports       nfs      466G  390G   76G  84% /nfs
hope.junkhack:/nfs/fedora22  nfs      466G  390G   76G  84% /mnt/fedora22

hope.junkhack は名前解決できるようにしてあります。ちなみに、fstab はこんな感じのデフォルト。

—- /etc/fstab
::
hope.junkhack:/exports    /nfs        nfs        defaults    0 0
hope.junkhack:/nfs/fedora22    /mnt/fedora22    nfs        defaults    0 0

で、RASPIAN のイメージをマウント。

[root@cent66 RASPBIAN]# kpartx -av 2015-05-05-raspbian-wheezy.img
add map loop0p1 (253:2): 0 114688 linear /dev/loop0 8192
add map loop0p2 (253:3): 0 6277120 linear /dev/loop0 122880

[root@cent66 RASPBIAN]# mount /dev/mapper/loop0p2 /mnt/raspi/

[root@cent66 RASPBIAN]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
::
hope.junkhack:/exports        466G  388G   78G  84% /nfs
hope.junkhack:/nfs/fedora22   466G  388G   78G  84% /mnt/fedora22
/dev/mapper/loop0p2           3.0G  2.4G  451M  85% /mnt/raspi
[root@cent66 RASPBIAN]#

で、コピー。

[root@cent66 RASPBIAN]# rsync -av /mnt/raspi/ /mnt/fedora22/
sending incremental file list
./
bin/
bin/bash
bin/bunzip2

::

var/spool/cron/crontabs/
var/spool/rsyslog/
var/tmp/

sent 2304687346 bytes  received 1293752 bytes  4274293.05 bytes/sec
total size is 2299569061  speedup is 1.00
[root@cent66 RASPBIAN]#

 

で、NFS でブートするときに fstab の中がそのままだと、SD カードのパーティションをchroot してしまうのでコメントアウト。

[root@cent66 etc]# vim fstab

proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
#/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1

NFS側のイメージ展開は以上で終わり。

 

▼Boot するcmdline.txt の中に以下を追加

root=/dev/nfs rootfstype=nfs nfsroot=192.168.1.17:/nfs/fedora22,udp,vers=3,nolock ip=192.168.1.24:192.168.1.17:192.168.1.1:255.255.255.0:rpi:eth0:off

nolock のオプションは必要ないかもしれません。とりあえず、これで動いてはいます。IPのところは以下の書式。

ip=<raspberrypi_ip>:<nfs_server_ip>:<default_gateway>:<mask>:rpi:eth0:off

シリアルコンソールのブートログは、

[    4.638898] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1

[ 4.674857] IP-Config: Complete:

[ 4.680180] device=eth0, hwaddr=b8:27:eb:97:45:fb, ipaddr=192.168.1.24, mask=255.255.255.0, gw=192.168.1.1

[ 4.694694] host=rpi, domain=, nis-domain=(none)

[ 4.701878] bootserver=192.168.1.17, rootserver=192.168.1.17, rootpath=

[ 4.719859] VFS: Mounted root (nfs filesystem) readonly on device 0:14.

[ 4.729328] devtmpfs: mounted

[ 4.735147] Freeing unused kernel memory: 400K (80786000 - 807ea000)

[ 5.132474] random: nonblocking pool is initialized

[ 6.228285] udevd[177]: starting version 175

Raspbian GNU/Linux 7 pi ttyAMA0

pi login:

となっています。

NFS Boot させたあと、uname したら、