こんばんは。時間を溶かしたので供養します。誰かの役に立てば嬉しいですね😇
最近プライベートで動画ファイルなどの大容量のファイルを扱うことが増えてきました。 PCに動画をおいておくとサクッとスマホから確認したい時に不便だなと思い、家に眠ってるRaspberryPi2Bを使ってsambaでファイルサーバーを構築しようと考えました。
しかし家にあるRaspberryPiのmicroSDの容量はたかが30GB程度、、これではPCに眠ってるファイルを保管できません。
もしかして、s3fsを使てS3をRaspberryPiにマウントして、そのディレクトリをsambaで公開すれば、容量無制限オレオレAWS Storage Gatewayになるやんと思ってえいやで作ってみました。
以下の例では、~/shared
をsambaで公開するディレクトリとし、~/shared/images
に対してs3fsでs3をマウントしました。
sambaインストール・起動
sudo apt-get install samba samba-common-bin
sudo vi /etc/samba/smb.conf
# sambaにアクセスする際のパスワードを設定する。覚えておく
sudo smbpasswd -a pi
sudo systemctl restart smbd
smb.confはこんな感じ。みられて困るものはないしセキュリティ的にも問題ないと思って適当ガバガバです。多分いらない設定値ある
+
+[pimylifeupshare]
+path = /home/pi/shared
+writeable=Yes
+create mask=7777
+directory mask=7777
+public=yes
+inherit permissions=yes
+unix extensions = no
+nt acl support = no
+
PCからアクセスできるか確認
macだったらFinderの移動>サーバへ接続を開き、以下のURL?でアクセス
smb://{raspberrypiのローカルIP、raspberrypi.localとか}/pimylifeupshare
iPhoneだったら、純正のファイルアプリを開き、ブラウズからサーバへ接続をタップし上記URLでアクセス
このときのユーザーはpi、パスワードは上記で設定した通り。
s3fsインストール・起動
無事にアクセスができたら次にs3fsをインストールして起動する
sudo apt install s3fs
echo {aws_access_key}:{aws_secret} > ${HOME}/.passwd-s3fs
sudo vi /etc/fuse.conf
s3fs raspberrypi-morifuji:/backup/images ~/shared/images -o umask=0000 -o allow_other
/etc/fuse.conf
に対しては以下の修正を行います。こうしないとPCやスマホからアクセスしてもディレクトリ(例でいう~/shared/images
)が非表示にされてしまいます。
# Allow non-root users to specify the allow_other or allow_root mount options.
-# user_allow_other
+user_allow_other
+
できた!
これでできた!と思ったのですが、残念ながら全くもって実用的ではありませんでした。
- ファイルの表示がとてつもなく遅い
- 画像が100ファイルほど入ったディレクトリをマウントしたこともあり、画像のサムネイル表示が永遠に終わらない..
- s3fs公式でも、ディレクトリの一覧表示などのメタデータ操作はパフォーマンスが低下する、と記載がありました。そりゃネットワーク跨いでたらそりゃそうかという気持ちになった
- 加えて、RaspberryPi2Bは32bitなのでそもそものOSのパフォーマンスが悪いので、相乗効果でとても遅い。。
- s3fsをマウントしていないRaspberryPiに保管されているファイルはsamba経由でもそこまでパフォーマンスが悪くならない
- マウント直後はアクセスできないディレクトリが大量にあった(上記例で言う
gif
ディレクトリ)。待つと徐々にアクセスできるディレクトリが増えていく。謎…
ただのゆめまぼろしでした💀。もしかすると今時のRaspberryPi4Bを使えばまた違うかもしれない。