FUSEでは非正規な動作を行うファイルシステムでもマウントできるため、カスタムFUSEファイルシステムのマウントは、通常、fuseグループに明示的に追加されたユーザーに制限される。次に示す手順は、FUSEファイルシステムをマウントしようとして拒否され、対処しているところだ。この場合、自身をfuseグループに追加してからログインしなければならない。MySQLfsファイルシステムとデータベースは当初は空だが、dfコマンドを実行すると、カーネルがこのファイルシステムのマウントを認識していることがわかる。最後にfusermountコマンドで、ユーザーが作成したFUSEファイルシステムをアンマウントしている。
$ mkdir ~/mysqlfs $ mysqlfs -ohost=localhost -odatabase=mysqlfs ~/mysqlfs * Opening logfile 'mysqlfs.log': OK fuse: failed to open /dev/fuse: Permission denied $ su -l root# usermod -a -G fuse ben root# exit $ exit ... $ id uid=500(ben) gid=500(ben) groups=492(fuse), ... $ mysqlfs -ohost=localhost -odatabase=mysqlfs ~/mysqlfs * Opening logfile 'mysqlfs.log': OK $ ls -ld mysqlfs drwxr-xr-x 1 root root 0 2008-01-24 16:24 mysqlfs $ df -h mysqlfs . Filesystem Size Used Avail Use% Mounted on mysqlfs 0 0 0 - /home/ben/mysqlfs /dev/sdc3 16G 4.4G 11G 31% /home $ ls -l mysqlfs total 0 $ fusermount -u mysqlfs
以上でMySQLをファイルシステムとしてマウントする環境が整った。次に、ファイルをMySQLデータベースにコピーし、ファイルシステムを操作してみよう。下に示した例では、まず、Project Gutenbergのテキスト・ファイルをMySQLfsにコピーし、読み出してMD5チェックサムが一致することを確認。次いで、44MBもあるLinuxソースのtarballをMySQLfsにコピーしてパフォーマンスを調べている。
ディスク・キャッシュが空の状態のとき、/tmpにあるtarballを同じ/tmp上でバックアップするには約2秒かかっている。MySQLfsにコピーした場合は約20秒だ。直後に同じテストを行うと、tarballがディスク・キャッシュに残っているため、/tmp上でのバックアップは約0.3秒に短縮したが、MySQLfsへのコピーは20秒で変わらない。これは、MySQLfsにとって書き込みのパフォーマンスが大きな障害になりうることを示している。一方、読み出しのテスト結果を見ると、MySQLでも一部のデータをキャッシュしているようだ。テストを繰り返すと処理時間が短くなる。このことから、読み出しの多いファイルシステムであれば、MySQLfsは検討に値すると思われる。MySQLのキャッシュ機能を活用できるからだ。
~]$ cp -av /.../guten ./mysqlfs/ `/.../guten' -> `./mysqlfs/guten' `/.../guten/alice13a.txt' -> `./mysqlfs/guten/alice13a.txt' `/.../guten/boysw10.txt' -> `./mysqlfs/guten/boysw10.txt' `/.../guten/dmoro11.txt' -> `./mysqlfs/guten/dmoro11.txt' ~]$ cd ~/mysqlfs/guten guten]$ ls -l -rw-r----- 1 ben ben 153477 2008-01-12 13:23 alice13a.txt -rw-rw---- 1 ben ben 48923 2008-01-12 13:23 boysw10.txt -rw-rw---- 1 ben ben 259214 2008-01-12 13:23 dmoro11.txt guten]$ md5sum * 135e06ad31b169065bccbf03ec7236f2 alice13a.txt 7dd30f1b37e32cdb5d21fe992bbf248d boysw10.txt 87c05f11193c0e05b3d0dec0808a0450 dmoro11.txt guten]$ md5sum /.../guten/* 135e06ad31b169065bccbf03ec7236f2 /.../guten/alice13a.txt 7dd30f1b37e32cdb5d21fe992bbf248d /.../guten/boysw10.txt 87c05f11193c0e05b3d0dec0808a0450 /.../guten/dmoro11.txt guten]$ cd .. mysqlfs]$ time cp /tmp/linux-2.6.23.tar.bz2 . real 0m16.278s user 0m0.006s sys 0m0.531s mysqlfs]$ time cat linux-2.6.23.tar.bz2 >/dev/null real 0m0.502s user 0m0.004s sys 0m0.035s mysqlfs]$ time dd if=linux-2.6.23.tar.bz2 of=/tmp/junk bs=1024 count=1024 1048576 bytes (1.0 MB) copied, 0.0200973 s, 52.2 MB/s real 0m0.058s user 0m0.003s sys 0m0.013s mysqlfs]$ time dd if=linux-2.6.23.tar.bz2 of=/tmp/junk bs=1024 count=1024 skip=9000 1048576 bytes (1.0 MB) copied, 0.0214207 s, 49.0 MB/s real 0m0.031s user 0m0.001s sys 0m0.011s
