Raspberry Pi を24時間運用していて気になるのが SD カードの寿命。
頻繁に読み書きするファイルを SD カードに置きたくないので、既に設置してある nasne に保存することにした。
(nasne は現在 Buffalo の事業になったが、ここで利用しているのは Sony 時代のもの。)
nasne をマウントする
nanse の IP アドレスを確認
nasne 底面に書いてあるファイルサーバー名に ping
したり、底面に書いてある MAC アドレスを arp
コマンドで探したり、torne の設定画面を見たりすれば分かる。
nasne の IP アドレスを固定
ブラウザから nasne の IP アドレスにアクセスすると設定画面が現れるので、そこで「基本設定」の IP アドレス設定を「自動取得」から「手動」に変えて、自動振り当て範囲外のアドレスに固定するか、DHCP サーバー側で固定する。
マウントポイントの作成
ここからの作業は Raspberry Pi。
$ sudo mkdir /mnt/nasne
$ sudo mount -t cifs //192.168.x.xx/share1/ /mnt/nasne -o sec=none,vers=1.0,uid=xxxx,gid=xxxx
とりあえずマウントして成功するか確かめる。
自分は Raspberry Pi の pi ユーザを消去して別のユーザでログインしてるため、uid と gid が1001。(特にいじってない場合は1000)
uid が異なってもマウントはできるがファイル操作の権限がないため、いちいち sudo
する必要があるっぽい。
マウントできたら適当に Raspberry Pi 用のディレクトリを作る。(ここでは raspberrypi
を作ったとする。)
nasne の外付けハードディスクを利用したい場合は /share2
を指定する。
起動時に自動でマウントする
以下の内容を /etc/fstab
に追記。
詳しくは fstab(5)
, mount(8)
あたりを見ればいいっぽい。
/etc/fstab//192.168.x.xx/share1/raspberrypi /mnt/nasne cifs username=xxxx,password=,vers=1.0,iocharset=utf8,uid=xxxx,gid=xxxx,forceuid,forcegid,_netdev 0 0
再起動して確認
自動マウントを確認するため再起動する。
bash$ df -h
Filesystem Size Used Avail Use% Mounted on
//192.168.1.6/share1/raspberrypi 465G 387G 79G 84% /mnt/nasne
こんな感じで確認できたら終わり。
(Sony 時代のものなので 500 GB しかない。Buffalo 製は内蔵容量 2 TB で外付は6 TB まで対応している。)
SQLite を nasne に置いて読み書きする
あとは SQLite の実体を nasne に指定した上で通常通り使うだけ。とりあえず Python でやってみる。
write.py# 書き込み
import sqlite3
con = sqlite3.connect('file:/mnt/nasne/sample.db', uri=True)
cur = con.cursor()
cur.execute('CREATE TABLE IF NOT EXISTS sample(id INTEGER PRIMARY KEY AUTOINCREMENT, name STRING)')
cur.execute('INSERT INTO sample(name) values("foo")')
con.commit()
con.close()
read.py# 読み取り
import sqlite3
con = sqlite3.connect('file:/mnt/nasne/sample.db', uri=True)
cur = con.cursor()
cur.execute('SELECT * FROM sample')
print(cur.fetchall())
con.close()
/*
[(1, 'foo')]
*/
特に通常の使用方法と違いはない。
まとめ
考えられる利点
- センサーのハンドリングと書き込みを Python で書いてダッシュボードを Node.js で作るなど SQLite の実装言語の多さを活かせる
- SQLite の DB の実体は単一のファイルなので、どこかにアップロードして他で使うことも可能
- 最近だとこういうのもある
SQLiteをwasmビルドしてブラウザで動くようにする
— Gada / ymtszw (@gada_twt) May 3, 2021
→SQLiteはデータ実態が単一のDBファイル
→このファイル読み出しをHTTP range requestに裏側ですげ替える実装を差し込む
→DBファイルをGitHub pagesでホストする
→readonlyだがRDBをつかうアプリをGitHub pagesでホストできる
腕力って感じ
- 最近だとこういうのもある
- DB のファイルをアップロードせずとも、バッチでデータを取り出してスプレッドシートにアップロードすることで、API リクエスト上限に引っかからないようにして、スプレッドシートをバックエンドとしたサービスを作る
share2
を指定すればハードディスク容量も2 TB まで増やすことができる上、新しい機器を何も設置せずに簡易 DB が作れたので満足。