まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

タグ:mount

Google ドライブのファイルシステム(?)を fuse を使って Linux にマウントする、というためのツールを使ってみました。今回は Google Drive ocamlfuse というツールを使って、Ubuntu 14.04 環境にマウントしてみました:
https://github.com/astrada/google-drive-ocamlfuse


なお、今回紹介する手順では途中でウェブブラウザを使った OAuth 認証を行うため、GUI 環境が必要です(コマンドライン環境だけでは最後までマウントできません)。GUI アクセスできる Ubuntu とウェブブラウザをご用意ください。

まずはターミナルを開き、Google Drive ocamlfuse を apt-get でインストールできるようにするため、リポジトリを追加します:
$ sudo add-apt-repository ppa:alessandro-strada/ppa
$ sudo apt-get update

そして apt-get install を実行します:
$ sudo apt-get install google-drive-ocamlfuse

準備の最後に Google Drive をマウントする先のマウントポイントとなるディレクトリ(以下の例では ~/googledrive)を用意しておきます:
$ mkdir ~/googledrive

では Goodle Drive ocamlfuse を使って実際にマウントしてみます。初回のみコマンドラインから引数なしで実行します:
$ google-drive-ocamlfuse

するとウェブブラウザが起動し、Google の OAuth 認証が行われます。Google ドライブを使うためのユーザーおよびパスワードでログインします:
2017032201


オフラインアクセスのための許可が求められるので「許可」をクリック:
2017032202


以下のようなメッセージが表示されれば OAuth 認証完了です:
2017032203


再びターミナル画面に戻り、今度はマウントポイントを指定して google-drive-ocamlfuse を実行します。これで OAuth 認証時に使ったユーザーの Google ドライブが指定ディレクトリにマウントされます:
$ google-drive-ocamlfuse ~/googledrive


この状態で df -h コマンドを実行すると、指定したディレクトリに Google Drive がマウントされていることが確認できます:
2017032204


ls コマンドなどでこのディレクトリ内を確認すると、Google Drive 内のドキュメントが odt 等のフォーマットで存在していることを確認できます:
2017032205


アンマウントする場合は fusermount コマンドを -u オプションを付けて(アンマウントポイントを指定して)実行します:
$ fusermount -u ~/googledrive


Google ドライブがマウントできると Boostnote のドキュメント共有が異なるシステム間でも可能になったりできて、ますます便利です。



(参考)
http://o2t.hatenablog.com/entry/2014/09/08/143621
 

2013 年を最後に SoftLayer の記事を書いていませんでした。久しぶりで緊張します。。

2年以上 SoftLayer から離れていましたが、その間に大きな変化を遂げていました。もちろん知ってはいたのですが、自分が使う立場ではなかったため、変化を具体的に実感する機会がありませんでした。

最近、業務にかこつけて仕事で SoftLayer インスタンスを利用してシステムを構築する、という機会がありました。普段 PaaS (と個人環境の仮想 Linux)ばかり触っていたので、久しぶりの IaaS でした。その業務の中で SoftLayer 上の Linux サーバーインスタンスのファイルシステム上に Object Storage のフォルダをマウントする、という環境を構築する機会があったので、作業内容をまとめておきました。

ちなみに今回の作業の参考にしたのはこちらのサイトです:
https://www.change-makers.jp/post/10362

ただ、この作業そのままでは自分の環境では動かなかったので、あくまで自分の環境で動かした時の作業内容を記載しておきます。自分の環境は CentOS 6.7 64bit です。


まず、Swift 互換の Object Storage を Linux のファイルシステムにマウントするには CloudFuse というオープンソースのライブラリ/ツールを使います。

というわけで CloudFuse を導入します。CloudFuse はソースからビルドして導入するので、まずはビルドをするために必要な前提ライブラリを導入します:
# yum install gcc make fuse fuse-devel curl-devel libxml2-devel openssl-devel git

※上記の Change Makers のサイトではこれで前提ライブラリが導入されることになっていましたが、自分の環境ではビルドに失敗してしまいました。結果として以下のこの処理が足りませんでした:
# yum install json-c-devel

前提ライブラリが準備できたら CloudFuse (のコマンドラインツール)をダウンロードしてビルドします。ダウンロードは GitHub から最新ソースをクローンします:
# cd /usr/local/src
# git clone https://github.com/redbo/cloudfuse

そして configure して、make して、make install します。これで cloudfuse コマンドが使えるようになります:
# cd cloudfuse
# ./configure
# make
# make install

cloudfuse コマンドを使って Object Storage を利用するには、目的の Object Storage にアクセスするための情報(url, username, password)が必要です。SoftLayer の場合は次の方法で取得します。 SoftLayer のコントロール画面のメニューから Storage - Object Storage を選び、利用中の Object Storage を選択し、その画面内の "View Credentials" と書かれた箇所をクリックします:
2016040201


すると以下のようなアカウントクレデンシャル情報が表示されます。この値を後で使うのでメモしておきます:
2016040202


SoftLayer のインスタンス画面に戻り、ホームディレクトリ上に ~/.cloudfuse というファイルを新規に作成します。その内容は先程確認したクレデンシャル情報を使って、以下の内容にして保存します:
# vi ~/.cloudfuse

username=(Username の値)
api_key=(API Key の値)
authurl=(Authentication Endpoint の値。SoftLayer 以外から使う場合は Public 、SoftLayer のサーバーから使う場合は Private の値にする)

なお authurl に指定する値ですが、この Object Storage のマウント自体は SoftLayer ではないクラウドサーバーやオンプレミスサーバーから行うことができます。その場合は Public と指定されていた方の URL を記載してください。一方 SoftLayer のサーバーからマウントする場合は Private と指定されていた方の URL を記載すると、プライベートネットワークを使った高速接続が出来、かつ SoftLayer 内のインバウンド転送なので追加料金がかかりません。

ここまでできたらマウントします。cloudfuse コマンドを使って、Object Storage のフォルダを SoftLayer インスタンスの /mnt ディレクトリにマウントしてみます:
# cloudfuse /mnt

これでマウントは完了しているはずです。df コマンドで確認してみます:
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda2       25G  7.4G   16G  32% /
tmpfs           935M     0  935M   0% /dev/shm
/dev/xvda1      248M   94M  142M  40% /boot
cloudfuse       8.0T  4.2G  8.0T   1% /mnt
↑Object Storage って最大 8TB も使えるのね。。


ちゃんとマウントできています。これで Object Storage が SoftLayer インスタンス上のファイルシステムとして読み書き可能になりました!

画像などメディアファイルを多く扱うようなシステムを構築する場合、パフォーマンスのためにメディアデータはデータベースではなくファイルシステムに格納することも珍しくありません(WordPress とかもそうです)。この場合、アプリケーションサーバーをスケールさせてもメディアを保存するファイルシステムがバラバラになってしまっては意味ないので、メディアを保存する先は Object Storage をマウントした先に指定する方法が一般的です(そうするとマウント情報ごとスケールするので、メディアも共有できるようになる)。 そんなシステム構築ではこんな手法を使う、というサンプルでした。特に SoftLayer + Object Storage 環境であれば、ネットワークも高速で、かつマウントした Object Storage への転送時の追加料金もかからずに構築できるというメリットがあります。


このページのトップヘ