![]()
51.RasPiのデータサーバー化 (2024.1.26-2024.1.31)
これまで、それぞれのRasPi間のデータのやり取りと、更にはWindows PCとの間でのデータのやり取りには、同じLAN内にあるルーターに挿したUSBメモリ(本来はUSB接続のHDDを想定)を介していました。ルーターはBaffalo製の今となっては古い300Mbps時代のものを使っていたのですが、これにはsamabaサーバーが搭載されていて、USBメモリにデータを置く事で各種マシンとの間で相互にデータをやり取りしていたわけです。Puthonプログラムのようなさほど大きなデータでなければ、スムーズにファイル転送ができて大変便利でしたが、バージョンの新しいRaspiOSではサーバーのデータが読めなくなってしまいました。恐らくセキュリティの関係だと思いますが、LANを介してデータのやり取りができないとなると、色々な面で不便を強いられます。
一方、我が家のネットの中核であるポケットWiFiが5Gに対応した新しい機種になってから、度々インターネットに接続できなくなる現象が現れるようになりました。いつの間にか復旧するので原因不明のまま放置してきたのですが、最近になってこれに繋がる無線LANアクセスポイント用のルーター(前記のUSBメモリを挿していた機種)に問題があることが分かってきました。壊れている訳では無いものの、何らかの要因(例えばルーターの部品劣化による不調等)でインターネット接続が途切れてしまうのです。特にインターネットが混雑する時間帯に顕著に現れるため、かなりのストレスになっていました。
そこで、思い切ってルーターを最新の機種に交換したところ、インターネットが途切れる問題はほぼ起きなくなりました。どうやら問題の根本はここにあったようです。ただ、この機種はUSBでHDDを接続する機能は無く、sambaサーバーも搭載されていません。と言うよりも、もうこの機能は廃止されてしまったようです。個人的には便利な機能であったものの、世間一般ではあまり要望が無かったのかもしれません。いずれにせよ無いものは仕方が無いので、別の方法を考えるしかありません。そこで浮上したのが自前でサーバーを立てる解決策でした。
当初は眠っているPCをLinux化し、データサーバーとして稼動させるつもりでした。しかし、サーバーは常時稼動させる必要があるため、一般的なPCでは電力の浪費です。ファンの騒音もあるし、あまり適当とは思えませんでした。色々思案していた中で、ふと思いついたのがRasPiをサーバーにすることです。PCとしては非力だとしても、超低消費電力で騒音も無く場所もとらないRasPiは最適だと思えました。本来は処理能力の高いRasPi3や4を使うのが順当ですが、ちょうど古いRasPiのモデルB+がいくつか眠っていたので、これを流用することにしたのです。ファイル転送に多少時間がかかったとしても、無いよりは遥かにマシと言うわけで、早速実現することにしました。
サーバーはsambaとnfsの2種類を稼動させます。sambaだけでも用は足りるはずでしたが、実際に稼動させてみるとWidowsPCからはサーバーに対して自由にファイルの読み書きができるものの、RasPiからだと書き込みができませんでした。正確にはroot(所有者)で無いクライアントのRasPiからは、読み込みはできても書き込みができないようなのです。chownやchmodで共有フォルダのアクセス権を変更していてもダメでした。そこで、RasPi同士の場合はnfsサーバーを介してデータをやり取りする形にしました。異なるOSのPC間では少し手間になりますが、linuxマシンではnfsが一般的と言うことで、実用にはさほど問題は無いと思っています。samba/nfsサーバーを実現する手順は次の通りです。2台のRasPiを用意し、1台は中核となるサーバー用、もう1台はサーバーとデータのやり取りを行うクライアント用とします。クライアントは何台でも接続できます。それでは、まずはWindowsPCとRasPiとの間でデータのやり取りを行うため、sambaサーバーを実現します。
●sambaサーバー:サーバー側の準備
1.共有するディレクトリを作成 → homeディレクトリ内のshareとした場合
sudo mkdir /home/share
2.モード変更
sudo chmod 777 /home/share
3.オーナー変更(ユーザー名piの場合)
sudo chown pi:pi /home/share
4.サーバーインストール
sudo apt-get install samba
*途中でWINSサーバーに関する設問があるがそのまま「いいえ」を選択
5.設定ファイル編集
sudo nano /etc/samba/smb.conf
6.書き込みして保存(最下行に下記を追加、ユーザー名をpi、フルアクセスを可能とする)
[share]
path = /home/share
public = yes
browseable = yes
read only = no
guest ok = yes
force user = pi
7.sambaパスワード設定(ユーザー名piの場合)
sudo smbpasswd -a pi
8.再起動
sudo systemctl restart smbd
●sambaサーバー:クライアント側の準備
1.マウントするディレクトリを作成 → homeディレクトリ内のsambaとした場合
sudo mkdir /home/samba
2.モード変更
sudo chmod 777 /home/samba
3.オーナー変更(ユーザー名piの場合)
sudo chown pi:pi /home/samba
4.手動でマウント(ユーザー名piの場合、XXXXXはパスワードを指定、Xはサーバーアドレスを指定)
sudo mount -t cifs -o username=pi,password=XXXXX //192.168.X.X/share /home/samba
(5.)恒久化の場合の設定(fstabに記述)
sudo nano /etc/fstab
(6.)書き込みして保存(ユーザー名piの場合、XXXXXはパスワードを指定、Xはサーバーアドレスを指定)
//192.168.X.X/share /home/samba cifs username=pi,password=XXXXX,defaults 0 0
(7.)再起動
次にnfsサーバーを実現します。
●nfsサーバー:サーバー側の準備
1.共有するディレクトリを作成 → homeディレクトリ内のshare2とした場合
sudo mkdir /home/share2
2.モード変更
sudo chmod 777 /home/share2
3.オーナー変更(ユーザー名piの場合)
sudo chown pi:pi /home/share2
4.サーバーインストール
sudo apt-get install nfs-kernel-server
5.設定ファイル編集(最下行に下記を追加)
sudo nano /etc/exports
6.書き込みして保存(XはLAN上のアドレス)
/home/share2 192.168.X.X(rw,sync,no_subtree_check)
7.nfsリスタート
sudo /etc/init.d/nfs-kernel-server restart
●nfsサーバー:クライアント側の準備
1.マウントするディレクトリを作成 → homeディレクトリ内のnfsとした場合
sudo mkdir /home/nfs
2.モード変更
sudo chmod 777 /home/nfs
3.オーナー変更(ユーザー名piの場合)
sudo chown pi:pi /home/nfs
4.手動マウント
sudo mount -t nfs 192.168.X.X:/home/share2 /home/nfs
(5.)恒久化の場合の設定(fstabに記述)
sudo nano /etc/fstab
(6.)書き込みして保存(Xはサーバーアドレスを指定)
192.168.X.X:/home/share2 /home/nfs nfs rw 0 0
(7.)再起動
私は以前からVNC(RasPi:サーバー/WindowsPC:クライアント)を導入し、無線LANを介してWindowsPCからGUIによるリモートで操作しているので、sambaサーバーの導入によってWindowsPCから自由にファイル交換できる非常に便利な環境になりました。
![]()