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 したら、

root@pi:~# uname -a

Linux pi 4.0.7-v7+ #801 SMP PREEMPT Tue Jun 30 18:38:23 BST 2015 armv7l GNU/Linux

root@pi:~#

げ、fedora の initramfs からブートしてます。SDCard の boot は、初回にスクリプトで作ったやつだった。。。。

root@pi:/boot# ll *.img

-rwxr-xr-x 1 root root 39176850 Jul  4 17:40 initramfs-0-rescue-18b4f0b4546f49828e1ef5e652cc7b9a.img

-rwxr-xr-x 1 root root 16475761 Jul  4 17:36 initramfs-4.0.6-300.fc22.armv7hl+lpae.img

-rwxr-xr-x 1 root root  3987856 Jul  2 23:35 kernel7.img

-rwxr-xr-x 1 root root  4016696 Jul  2 23:35 kernel.img

root@pi:/boot#

たぶん、RASPIAN のimg の boot からやれば、良いはず。まだ試していませんが。

df はこんな感じで、ルートがnfs になっています。76Gも空きがあるー(osx 側のディスクですが)

root@pi:~# df -hT

Filesystem                 Type      Size  Used Avail Use% Mounted on

192.168.1.17:/nfs/fedora22 nfs       466G  390G   76G  84% /

devtmpfs                   devtmpfs  459M     0  459M   0% /dev

tmpfs                      tmpfs      93M  216K   93M   1% /run

tmpfs                      tmpfs     5.0M     0  5.0M   0% /run/lock

tmpfs                      tmpfs     186M     0  186M   0% /run/shm

/dev/mmcblk0p1             vfat      200M   98M  102M  50% /boot

このままだと、モジュールを読み込んでいないので使えませんが、、、

root@pi:~# lsmod

Module                  Size  Used by

root@pi:~# ll /lib/modules/

total 8

drwxr-xr-x 14 root root 476 May  6 22:22 3.18.11+

drwxr-xr-x 14 root root 476 May  6 22:22 3.18.11-v7+

root@pi:~#

Boot の img を RASPBIAN のに入れ替えて、リブート

[root@pi ~ 07/25 20:40:51]# ll /boot/*.img

-rwxr-xr-x 1 root root 3930004 Apr 27 13:40 /boot/kernel7.img

-rwxr-xr-x 1 root root 3974884 Apr 27 13:40 /boot/kernel.img

これでkernel も ローダブルモジュールもOK な感じ。

[root@pi ~ 07/25 20:41:40]# uname -a

Linux pi 3.18.11-v7+ #781 SMP PREEMPT Tue Apr 21 18:07:59 BST 2015 armv7l GNU/Linux

[root@pi ~ 07/25 20:44:14]# lsmod

Module                  Size  Used by

cfg80211              386508  0

rfkill                 16651  1 cfg80211

rpcsec_gss_krb5        20958  0

nfsd                  263569  2

snd_bcm2835            18649  0

snd_pcm                73475  1 snd_bcm2835

snd_seq                53078  0

snd_seq_device          5628  1 snd_seq

snd_timer              17784  2 snd_pcm,snd_seq

snd                    51038  5 snd_bcm2835,snd_timer,snd_pcm,snd_seq,snd_seq_device

8192cu                528365  0

joydev                  8879  0

evdev                   9950  2

uio_pdrv_genirq         2958  0

uio                     8119  1 uio_pdrv_genirq