とりあえず、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/Linuxroot@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 on192.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 byroot@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