PiTop を購入して依頼、ラズベリーパイ(以下「ラズパイ」)をデスクトップ環境として使うことが多くなりました:

2016080702


さて PiTop に限りませんが、ラズパイをデスクトップ環境として使う場合の問題点はアプリケーションの充実度と、ストレージの少なさです。前者は少しずつ充実しつつあるのですが、そもそもマイクロ SD カードを挿して、そこに OS を導入して使うという手法を取る以上は、このマイクロ SD カードの容量が全空間なわけです。これはどうにもならない。。

・・・と諦めかけていた中で思いつきました。そもそも IoT 機器として使うことも多いラズパイは常に給電状態であることも多く、ネットワークもONの前提で使うことができます。であればクラウドなどの外部ストレージをネットワークマウントしてしまえば、この容量の問題を解決できるのではないか!? と。

実際に試したみた時の様子を以下に記載します。今回はいわゆる S3 互換(Swift互換)のオブジェクトストレージをラズパイにマウントする、という方法に挑戦してみました。具体的には IBM Bluemix のオブジェクトストレージサービスを使って実現してみました:

Swift のオブジェクトストレージをマウントするために CloudFuse を使うことにします。CloudFuse に関しては(前提環境が異なりますが)以前にもこのブログで何度か紹介したことがあります。興味のある方、特に CentOS でマウントさせることに興味ある方はこちらも参考にしてみてください:
SoftLayer の Object Storage をサーバーインスタンスにマウントする


話を戻して、まずはラズパイに CloudFuse を導入しましょう。まずは root になって apt-get のリポジトリを更新します(これをしないとエラーになったので):
$ sudo su
# apt-get update
# apt-get upgrade

次に CloudFuse の実行やビルドに必要なライブラリをまとめて導入しておきます:
# apt-get install build-essential libcurl4-openssl-dev libxml2-dev libssl-dev libfuse-dev libjson-c-dev

ここまで準備できれば CloudFuse のビルドが可能になります。GitHub からソースコードをダウンロードして、展開して、ビルドして、インストールします:
# cd /usr/local/src
# git clone https://github.com/redbo/cloudfuse
# cd cloudfuse
# ./configure
# make
# make install

これで CloudFuse の準備ができました。後はオブジェクトストレージの環境に合わせた設定をしてマウントするだけです。既にオブジェクトストレージ環境をお持ちの方はその環境に合わせた情報を使ってください。

以下はまだオブジェクトストレージ環境をお持ちでない場合の方向けに、IBM Bluemix のオブジェクトストレージ環境を入手する方法から紹介します。IBM Bluemix のオブジェクトストレージのインスタンスを利用するにはこちらの手順を参照ください(無料で 5GB まで使えるオブジェクトストレージ環境が入手できます):


上記手順の、オブジェクトストレージサービスの接続情報を取得するところまでができていればOKです。以下、ここで取得したオブジェクトストレージのファイルシステムをラズパイにマウントしてみます。
2016080701


この Bluemix 環境のオブジェクトストレージを利用する場合は、上記画面の環境変数内の auth_url, userId, password の3つの値(下記の赤字部分)が必要になります。この3つの値をメモしておきましょう:

{
  "credentials": {
    "auth_url": "https://identity.open.softlayer.com",
    "project": "object_storage_**************************",
    "projectId": "******************************",
    "region": "******",
    "userId": "(userId)",
    "username": "Admin_*************************************",
    "password": "(password)",
    "domainId": "**********************************************",
    "domainName": "******"
  }
}


改めてラズパイ環境に戻ります。ラズパイに導入した CloudFuse を使って、このオブジェクトストレージ環境をマウントするにはホームディレクトリ以下に .cloudfuse というテキストファイルを以下の3行の内容で作成します:
username=(userId)
api_key=(password)
authurl=https://identity.open.softlayer.com/v3/

最初の username の値は環境変数内のuserId の値、api_key の値は同 password の値、そして authurl の値には同 auth_url の値に "/v3/" をつけたものを指定します。Bluemix のオブジェクトストレージ以外の環境を使っている場合はその環境に合った相当する値を取り出して指定してください。

これで準備完了です。最後にマウントポイント(この例では /mnt)を指定して CloudFuse を実行します:
# cloudfuse /mnt

このコマンドが成功すると、オブジェクトストレージの内容を /mnt 以下にマウントすることができます:
# df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root         30G  4.6G   24G   17% /
devtmpfs         459M     0  459M    0% /dev
tmpfs            463M     0  463M    0% /dev/shm
tmpfs            463M  6.4M  457M    2% /run
tmpfs            5.0M  4.0K  5.0M    1% /run/lock
tmpfs            463M     0  463M    0% /sys/fs/cgroup
/dev/mmcblk0p1    60M   20M   41M   34% /boot
tmpfs             93M  8.0K   93M    1% /run/user/1000
cloudfuse        8.0T  7.5M  8.0T    1% /mnt
  ↑最大 8TB までのストレージがラズパイ上で使えるようになりました!


ちなみに、マウントしたオブジェクトストレージを解除するには umount コマンドでアンマウントするだけです:
# umount /mnt