あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

実際にPi4を1台ネットワークブート環境に移してみる

Raspberry Pi 4 のPXE対応の続き。

akkiesoft.hatenablog.jp

家ではPi4が1台常時稼働しており、MySQLが動くなどSDカードをしばくかんじの環境なので、PXEブート&ReadyNASNFSストレージ化してみました。

やり方はここを参照。

www.raspberrypi.org

ReadyNASの設定

ReadyNAS(スクショはReadyNAS 102)に、NFSの共有を作ります。クオーターはつけなくて良いですが、なんとなくSDカードっぽく16GBに設定。

f:id:Akkiesoft:20200510132049j:plain

次に共有設定。192.168.29.39はDHCPサーバーのアドレスで、/bootをここに置くのでアクセス権限が必要です。ただ、リードオンリーでもいいかも。Pi4アドレス(192.168.29.82)はリードライトとROOTにチェックを入れます。

f:id:Akkiesoft:20200510132857j:plain

SDカードで稼働中のPi4での作業

まずPXEに対応するために、冒頭に貼った先日の記事の通りブートローダーをアップデートして、PXEブートの有効化を済ませておきます。

SDカード内のデータをNFSrsyncします。ここはドキュメントと同じやり方で良いでしょう。

$ sudo mkdir /nfs
$ sudo mount 192.168.29.12:/data/rpi-rastv /nfs
$ sudo rsync -xa --progress --exclude /nfs / /nfs/
$ sudo rsync -xa --progress /boot/ /nfs/boot/

NFSにコピーした側の起動設定を変えていきます。192.168.29.12がReadyNASのアドレスです。

$ sudo vi /nfs/boot/cmdline.txt

console=serial0,115200 console=tty1 root=/dev/nfs nfsroot=192.168.29.12:/data/rpi-pi4,vers=4.1,proto=tcp rw ip=dhcp elevator=deadline fsck.repair=yes rootwait

$ sudo vi /nfs/etc/fstab
# PARTUUIDで始まる行はコメントアウトする
#PARTUUID=56cd6262-01  /boot           vfat    defaults          0       2
#PARTUUID=56cd6262-02  /               ext4    defaults,noatime  0       1
192.168.29.12:/data/rpi-pi4/boot /boot nfs defaults,vers=4.1,proto=tcp 0 0

最後に、Pi4のシリアル番号をメモしておきます。以下の出力からabcd1234の8ケタの部分をdnsmasqの設定でつかいます。

$ cat /proc/cpuinfo

Serial		: 10000000abcd1234

dnsmasqサーバーの設定

家ではすでにdnsmasqが動いていて、PXEっぽい設定も済ですがこんな感じで設定してます。ドキュメントではMACアドレス限定してなかったですが、家ではなんでこうしていたか忘れたな。多分いらない。

enable-tftp
tftp-root=/tftpboot

# PXE for Raspberry Pi
dhcp-mac=set:rpi,b8:27:eb:*:*:*
dhcp-mac=set:rpi4,dc:a6:32:*:*:*
pxe-service=tag:rpi,0,"Raspberry Pi Boot"
pxe-service=tag:rpi4,0,"Raspberry Pi Boot"

# Pi4のアドレスはDHCP側で固定にしてやるとラク。この例では192.168.29.82に固定
dhcp-host=<Pi4のMACアドレス>,192.168.29.82,infinite

fstabにNFSのマウント設定を書きます。マウント先は/tftpboot/です。先程確認したabcd1234を入れます。

$ sudo mkdir -p /tftpboot/abcd1234

$ sudo vi /etc/fstab

192.168.29.12:/data/rpi-pi4/boot /tftpboot/abcd1234 nfs ro 0 0

$ sudo mount /tftpboot/abcd1234
$ ls /tftpboot/abcd1234
(こんな感じで/bootの中身が見えていればOK)
bcm2708-rpi-b.dtb         bcm2711-rpi-4-b.dtb  fixup.dat         start4cd.elf
bcm2708-rpi-b-plus.dtb    bootcode.bin         fixup_db.dat      start4db.elf
bcm2708-rpi-cm.dtb        cmdline.txt          fixup_x.dat       start4.elf
bcm2708-rpi-zero.dtb      config.txt           issue.txt         start4x.elf
bcm2708-rpi-zero-w.dtb    COPYING.linux        kernel7.img       start_cd.elf
bcm2709-rpi-2-b.dtb       fixup4cd.dat         kernel7l.img      start_db.elf
bcm2710-rpi-2-b.dtb       fixup4.dat           kernel8.img       start.elf
bcm2710-rpi-3-b.dtb       fixup4db.dat         kernel.img        start_x.elf
bcm2710-rpi-3-b-plus.dtb  fixup4x.dat          LICENCE.broadcom
bcm2710-rpi-cm3.dtb       fixup_cd.dat         overlays

起動する

あとはPi4の電源を落として、SDカードを抜いて電源を入れ直せばPXEブートして、NFSファイルシステムにして起動してくるでしょう。今回は移行なのでSSHホスト鍵の再生成はしませんでしたが、必要に応じてドキュメントの手順に従って実施すると良いでしょう。

起動しない場合、ReadyNASなどNASNFSがV4に対応しているかの確認をします。していない場合はNFSマウントオプションから「,vers=4.1」を削ると起動します。

ちなみにReadyNASの場合はシステム設定のサービスのところで有効化できました。

f:id:Akkiesoft:20200510135424j:plain

速度は……

SDカードが無くなったことによって、ストレージの信頼性はぐいっと上がるものと考えられます。ギガビットなのでNFSストレージのIOで帯域をつかいきることもそれほどないでしょう。

ddコマンドでファイル作成スピードを計測したところ、10MB/s前後でした。100Mbpsかな……?これはもしかするとSDカードのほうが早いかもしれない🤔?自宅のReadyNAS 102はHDD2本構成なので、たとえば4本構成とか、今ならSSDNASなんてのもあるので、そういうのを使えばもっと快適なNFSを提供できるかもしれません。使用中の環境はIO速度は求めないはずなので、これでしばらく様子見でしょうかね。

まとめ

初めてRaspberry PiPXEブートを本番にぶっこんでみました。様子見してダメそうならSDに戻しますが、まあ多分大丈夫なんじゃないかなあ、と思います。