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/includePKG_CONFIG_PATH=/usr/local/lib/pkgconfig make
# LD_LIBRARY_PATH するのが面倒なので固定リンクしてしまう
LDFLAGS =-L/usr/local/lib -Wl,--rpath,/usr/local/lib
$ 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でマウントすれば各種ツールが使えるのでぐっと実用的になりますよ!