Raspberry Piから外部ボリューム(NASをNFSマウント)利用
Raspberry Piからも信頼性の高いボリュームを利用したい、より大きなサイズのボリュームを利用したい、Raspberry Piの内容を外部にバックアップしたいなど、外部NASを利用したい利用シーンはたくさんあると思います。
今回は、WEBサーバなど各種サーバー機能のメインマシンであるSynologyのボリュームをNFSマウントし、利用する方法を記事にしておきます。
SynologyでNFS利用に向けた設定
SynologyでNFSを利用可能にする設定
「コントロールパネル」「ファイルサービス」「SMB/AFP/NFS」タブの「NFS」セッションの「NFSを有効にする」にチェックを入れて下さい。チェック後は、「適応」ボタンを押し、設定を反映して下さい。
共有フォルダにNFS権限付与
Synologyで作成した共有フォルダに対して、NFS権限の付与を行います。
「コントロールパネル」「共有フォルダ」対象の共有フォルダを選択して「編集」、「NFS権限」「編集」でNFSルールを指定します。
以下の例では、Raspberry Pi1台向け(IPアドレス:192.168.0.200)にNFS権限を付与しています。
共有フォルダのNFS権限画面に表示されている「マウントパス」は、実際のマウント時に必要となるので、内容のメモをお願いします。
マウント時のパス:<Synology_IPアドレス>:<マウントパス>
192.168.0.100:/volume1/raspberry
Raspberry PiからNASボリュームMount
Raspberry PiからmountコマンドでNASボリュームをNFSマウント
@raspberrypi:~ $ sudo apt-get install nfs-common [sudo] password for: nfs-common is already the newest version (1:1.3.4-2.5). 0 upgraded, 0 newly installed, 0 to remove and 26 not upgraded. @raspberrypi:~ $ sudo showmount -e 192.168.0.100 Export list for 192.168.0.100: /volume1/raspberry 192.168.0.200 @raspberrypi:~ $ sudo mkdir /mnt/synology @raspberrypi:~ $ sudo mount -t nfs 192.168.0.100:/volume1/raspberry /mnt/synology
Raspberry Pi起動・再起動時のNFS自動マウント
/etc/fstabにNFSボリュームのマウント情報を記載
@raspberrypi:~ $ cat /etc/fstab proc /proc proc defaults 0 0 /dev/mmcblk0p6 /boot vfat defaults 0 2 /dev/mmcblk0p7 / ext4 defaults,noatime 0 1 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that 192.168.0.100:/volume1/raspberry /mnt/synology nfs defaults,_netdev 0 0
Raspberry PiのBootオプション変更(NASマウントタイミング変更)
Raspberry PiのBoot Option「Wait for Network at Boot Choose whether to wait for network」を変更します。「raspi-config」を用いて、設定を行います。
@raspberrypi:~ $ sudo raspi-config
- 3 Boot Options Configure options for start-up を選択
- B2 Wait for Network at Boot Chose whether to wait for network connection を選択
- <Yes> を選択
- <Ok> を選択
/etc/rc.localに3秒Sleep後マウント
上記の設定後も、起動・再起動時の自動マウントが実行されませんでした。
シスログ(/var/log/syslog)を確認したところ、やはり起動時のマウント時にNASへのネットワークマウントが失敗しておりました。
mount.nfs: Network is unreachable
Jul 9 06:36:22 raspberrypi rpc.mountd[473]: Version 1.3.3 starting Jul 9 06:36:23 raspberrypi mount[489]: mount.nfs: Network is unreachable Jul 9 06:36:23 raspberrypi systemd[1]: mnt-synology.mount: Mount process exited, code=exited, status=32/n/a Jul 9 06:36:23 raspberrypi systemd[1]: mnt-synology.mount: Failed with result 'exit-code'. Jul 9 06:36:23 raspberrypi systemd[1]: Failed to mount /mnt/synology.
よって、/etc/rc.localに3秒のスリープとマウントコマンドを追加しました。
sleep 3
sudo mount -t nfs 192.168.0.100:/volume1/raspberry /mnt/synology
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi #After Sleep 3, then execute a mount command sleep 3 sudo mount -t nfs 192.168.0.100:/volume1/raspberry /mnt/synology exit 0
その他ブートシーケンスに関係すると
(/etc/rc.localにスリープおよびマウントを入れた際には試す必要ないです)
systemd-networkd-wait-onlineを利用し、確実にネットワークの起動後にサービスを起動が出来るようにwaitが入るようです。
systemd-networkdとsystemd-networkd-wait-onlineをenableにします。
@raspberrypi:~ $ sudo systemctl enable systemd-networkd Created symlink /etc/systemd/system/dbus-org.freedesktop.network1.service → /lib/systemd/system/systemd-networkd.service. Created symlink /etc/systemd/system/multi-user.target.wants/systemd-networkd.service → /lib/systemd/system/systemd-networkd.service. Created symlink /etc/systemd/system/sockets.target.wants/systemd-networkd.socket → /lib/systemd/system/systemd-networkd.socket. Created symlink /etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service → /lib/systemd/system/systemd-networkd-wait-online.service. @raspberrypi:~ $ sudo systemctl enable systemd-networkd-wait-online