Python FUSE でクラウドストレージを RPi にマウントしてみた – Best Buys 2024
下の画像を見てほしい!右タブの Downloads (ローカル) から左タブの mounts/test (USB メモリ) に、画像を D&D してる。一見すると、USB メモリにファイルをただコピーしただけだね。

しかし USB メモリの実体はクラウドストレージ。実はこう見えて、クラウドにファイルをアップロードしてるのだ☁️
⚡容量無限大の USB メモリ!
クラウドストレージ (Dropbox とか Google Drive とか) って、OS のファイルシステムにマウントできるじゃん。それをファイラソフトから見ると、容量無制限のフォルダのように見える。これと同じことを USB メモリでやったら面白いのでは?そう思って、試作品を開発してみた。
使う機材は Raspberry Pi 4 Model B (以下 RPi 4)。RPi 4 は USB On-The-Go を搭載し、PC と接続した際に USB マスストレージとして振る舞える。

クラウドストレージを RPi 4 にマウントするファイルシステムを、Python Fuse で実装した。クラウドストレージをマウントした RPi を USB OTG でホスト PC に接続すれば、ホスト PC からは容量無制限の USB メモリに見える!はず。
ℹ️ FUSE (Filesystem in Userspace) はファイルシステムを実装するための仕組み。カーネルを修正する必要がないので、ユーザー権限だけで簡単に実現できる。Python FUSE は、その Python 用のバインディングライブラリ。
構成の概観
試作品は、結構いい感じに動作した。下の図は全体の構成図。概要を箇条書きで説明すると:
- RPi 4 のディスク
/dev/mmcblk0を複数のパーティションに切るp4は g_mass_storage でホスト PC に提示する用p2は OS とかを入れる用
p4を適当な場所 (ここでは/media/disk) にマウントする- クラウドストレージを適当な場所 (ここでは
/home/mnt) にマウントする- このために、自作のファイルシステム Silo を開発した
/media/diskと/home/mntとを (何らかの方法で) 同期させる
自作ファイルシステム Silo の動作を、ざっくりと絵で説明すると下図のような感じ。構成要素は 3 つだけ: silo_fs.py、silo.py、silo_api_client.py。(この図は、あとで続きを開発する自分のために書いてる側面が強いw)
silo_fs.py は次の 10 個の FUSE インタフェースを実装してる (2024-12-31 現在)。全てはカバーしてないけど、ファイラを UI から操作する用途ではほとんど困らないサポート状況かなと思う。
| _attrs | 役割 (僕の理解) |
|---|---|
getattr() | 与えられた path に位置するフォルダ/ファイルのメタデータ fuse.Stat を返す |
readdir() | / (ルートディレクトリ) 内のファイル/フォルダを fuse.Direntry に登録する (?) |
open() | ファイルを開く (?) 時に実行される |
read() | size バイトずつファイルを読み出して buf に詰める |
unlink() | ファイル削除時に実行される |
flush() | キャッシュしたデータをディスクに書き込む時に実行される |
rename() | ファイル名変更時に実行される |
create() | ファイル作成時に実行される。create() > write() > get_attr() > flush() |
mkdir() | フォルダ作成時に実行される |
rmdir() | フォルダ削除時に実行される |
まだ確立してないのは「クラウドストレージのマウントポイント」と「g_mass_storage のマウントポイント」を同期する仕組み。少しだけ試して rsync が使えるかもと思ったけど、その辺の整備はまだ不十分。Overlayfs とか lookback device とか、関連しそうだけど難しくて分からない概念と戦った記憶…😝
そっくりなコンセプト: Moore
ちなみに、CES 2017 に出展した Moore がよく似たコンセプトを提示してる。普通の USB メモリの形でありながら、保存内容がクラウドストレージと同期するから、事実上の「容量無制限」を実現したとか。 Web サイト http://www.get-moore.com/ はリンク切れなので、撤退したのかな?

僕が「容量無制限 USB」を思い付いたときは、Moore のことは知らなかった。後で Moore を知って、先駆者がいたことがちょっと悔しかった😅
ともかく、「容量無制限 USB」を通じてソフトウェア開発や GitHub を楽しんで学習できたから、RPi 4 は 2024 年に買って良かったもの第 1 位に相応しい。続けて 2 位と 3 位を、軽めに紹介しよう。どちらも個人的な話にはなりますが…😜
[2 位] 基本情報技術者試験
2024 年 7 月 26 日に基本情報技術者試験を受けて、晴れて合格できた🎉 受験料は ¥ 7,500 と安くはないけど、自分の知識の底上げにすごく貢献してくれたと思う。受験の動機や勉強方法については、すでに記事を書いた。興味のある人はご覧ください。

次なる課題として、AWS 認定クラウドプラクティショナーの試験を見据えてる。基礎の技術が分かったら、最新技術を知りたいと思うようになりまして。勉強のために参考書を 12 月 28 日に買ったんだけど、まだ目次しか見てません… 頑張ろう💪
[3 位] eMAXIS Slim 全世界株式
2024 年 1 月から、投信などの配当金や売却益が非課税になる新 NISA が開始したね。僕は新 NISA で eMAXIS Slim 全世界株式 (以下、オルカン) を購入し、年間で +15.4% の含み益を得られた。2018 年から運用してる Theo と合わせて 2024 年の運用益は +16.2% に上った💰

これに関連して勉強したブラックショールズ模型も、今年を象徴するものの 1 つかも。保守的な資産 (例: Theo やオルカン) と投機的な資産 (例: Bitcoin) とで、どちらが投資効率が良いかを知りたかったのよね。調べた結果、僕が重視する指標においては Theo やオルカンは Bitcoin より良い投資対象だった。自分の望むかたちで資産運用ができていると、確認できたのは良かったね😊

1件のコメント