Python FUSE でクラウドストレージを RPi にマウントしてみた – Best Buys 2024

最終更新日

下の画像を見てほしい!右タブの Downloads (ローカル) から左タブの mounts/test (USB メモリ) に、画像を D&D してる。一見すると、USB メモリにファイルをただコピーしただけだね。

~/Downloads/seeing-sprrow.jpg をファイラからクラウドにアップロード

しかし USB メモリの実体はクラウドストレージ。実はこう見えて、クラウドにファイルをアップロードしてるのだ☁️

⚡容量無限大の USB メモリ!

クラウドストレージ (Dropbox とか Google Drive とか) って、OS のファイルシステムにマウントできるじゃん。それをファイラソフトから見ると、容量無制限のフォルダのように見える。これと同じことを USB メモリでやったら面白いのでは?そう思って、試作品を開発してみた。

使う機材は Raspberry Pi 4 Model B (以下 RPi 4)。RPi 4 は USB On-The-Go を搭載し、PC と接続した際に USB マスストレージとして振る舞える。

写真のように接続すると、PC は RPi 4 を 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.pysilo.pysilo_api_client.py。(この図は、あとで続きを開発する自分のために書いてる側面が強いw)

Silo の内部構成

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/ はリンク切れなので、撤退したのかな?

CES 2017: Moore | Into Tomorrow – YouTube

僕が「容量無制限 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% に上った💰

2024 年の資産運用の結果

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

1件のコメント

コメントを残す

回れ右の内輪差をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む