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

AUFSとか

正式名称は、wiki によるとAnotherUnionFSというのだそうな。

Docker とかにも使われているそうで、こんなわかりやすいページがあった。

Dockerイメージの差分管理についてまとめてみた

http://tanksuzuki.com/post/docker-image-filesystem/

Docker とかは、見聞きしたことはあるんだけども、実際に使ったことはなくどんなものなのかはよく知りません。

一言でいえば、

異なるファイルシステムのファイルやディレクトリを透過的に重ねて、ひとつのファイルツリーを構成できるファイルシステム

ということのようです。BerryBoot のファイルシステムはまさにこれのようですね。このカーネルをあげてchroot すれば最新に追随できそうな感じです。この週末はそんなことにチャレンジしてみるか、気分一新、工作に手を出すかですね。

ほんと、知らないことがたくさんがたくさんありますね。奥が深いというか、知れば知るほど、深みにはまるというか。

NFS でルートファイルシステムをブートさせる記事があったので、

raspberryPiをNFSで起動する

http://takuya-1st.hatenablog.jp/entry/2014/10/14/002617

Boot Raspberry Pi over NFS

http://www.whaleblubber.ca/boot-raspberry-pi-nfs/

とりあえず、これを週末に実験してみますか。

 

ちょっとづつこのあたりは、永続的に押さえていこうかと思います。RasPi をゲットしなければこういうことも、ずっと知らないままだったのかもしれないことを考えると、価値があったと思います。