スポンサードリンク

Boxで50G貰い、boxfsでアクセスできるようになるまで

BoxにAndroidで登録すると50Gプレゼント、というのを3/23までやっています。
そろそろサーバのディスク容量も少なくなってきたので、すぐには使わない大容量のバックアップはLinuxでboxfsでマウントしてBoxにコピーしてしまおう!

手順

1. androidにboxのアプリをインストール

2. 登録



3. すると、以下のような画面が表示され50Gプレゼントされたようです。



PCからログインして確認しても、この通り50Gあります。





4. LinuxにFUSEのカーネルモジュールのインストール
CONFIG_FUSE_FS が設定されていれば使用できますが、自分のサーバは貧弱なので後述するように少し修正を加えています。

5. boxfsをコンパイルするために、以下をそれぞれインストール
5.1 libfuseのコンパイル
現時点では 2.8.7 が最新バージョンですが、それを使用すると

 "/bin/mount: 認識できないオプション`--no-canonicalize'です(/bin/mount: unrecognized option `--no-canonicalize')"

と言われてしまうため、古いバージョンを使用した。/bin/mount コマンドのバージョンによるようです。

$ tar zxvf fuse-2.8.5.tar.gz
$ cd fuse-2.8.5
$ ./configure --prefix=/usr/local
$ su
# make install

5.2 libzipのコンパイル

$ tar jxvf libzip-0.10.tar.bz2
$ cd libzip-0.10
$ ./configure --prefix=/usr/local
$ make
$ su
# make install

5.3 libappのコンパイル

$ tar zxvf drotiro-libapp-0.2.0-17-xxxxxx.tar.gz
$ cd drotiro-libapp-0.2.0-17-xxxxxx
$ make
$ su
#make install

6. boxfs のコンパイル

$ svn checkout http://boxfs.googlecode.com/svn/trunk/ boxfs-read-only
$ cd boxfs-read-only
$ vi Makefile
CFLAGS +=-I/usr/local/include
# LD_LIBRARY_PATH するのが面倒なので固定リンクしてしまう
LDFLAGS =-L/usr/local/lib -Wl,--rpath,/usr/local/lib
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig make
$ su
# make install

7. マウントしてみる

$ /usr/local/bin/boxfs -u メールアドレス -p パスワード -s -D 0755 /mnt/box_net

dfでみても、ちゃんと50g認識してる!

$ df -h Filesystem サイズ 使用 残り 使用% マウント位置
boxfs 50G 17M 50G 1% /mnt/box_net

box.netの無料ユーザには一ファイル当たりのファイルサイズの制限があります。そのため、数ギガのファイルはsplitで分割して書き込めばオッケー!(てへぺろ)、と思っていたところ、「空き容量がありません」といったエラーが出力されました。boxfsのソースを追ってみると、書き込む前に、/tmpに一時ファイルを作ってから、(http的には)アップロード、という流れのようで、/tmpへの書き込みが多重で実行されたために(/tmpの容量が足りないわたしの環境では)上記のような容量不足のエラーになっていたようです。

boxfsのソースを修正して、/tmp以外に一時ファイルを作るという解決案もあったが、多重で実行することをやめるようにソースを修正した。ソースの修正箇所はカーネルモジュールの方になりますので、修正後、再ビルド。(修正箇所は以下)

fs/fuse/inode.c

//#define FUSE_DEFAULT_MAX_BACKGROUND 12
#define FUSE_DEFAULT_MAX_BACKGROUND 1

# なお、boxfsのマウントオプションで自動的に25Mに分割して書き込むこともできるようです。(ただし一時ファイルは元のサイズで作成されるので、ウチには不向きであった)

カーネルモジュールのビルド後、modprobe -r fuse でモジュールをアンロードしたあと、モジュール を /lib/modules/xxx/ 配下に上書きコピーしたあとマウントしてみる。前回同様にsplitしながらコピーしても該当のエラーが出なくなりました。df で見ても、split しているサイズを越えることはなかったです。

splitされたファイルがアップロードされたあと、box.net上のファイルをcatで繋げてmd5sumとると、split前のファイルと同じで一安心。

50Gという大容量ですが、最大ファイルサイズが100Mなので、windowsから使用するとどうしても使いづらいですがLinuxでマウントすれば各種ツールが使えるのでぐっと実用的になりますよ!

関連記事:

返信

 

 

以下の HTMLタグ を使うことができます。

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>