とりあえず、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 したら、