ultradefrag for linux
Linux 関連のコミュニティで defragmentation に関する質問をすると、脊髄反射としか思えない程のスピードで「Linux では defrag なんて不要なんですが何か?」という答が返ってくるものだった。しかしこれは嘘である。たとえ ext4 であっても、巨大なファイルを頻繁に読み書きしていたり、ディスクスペースが逼迫してきたりすれば、当然 fragmentation が生ずる。これは Microsoft が Windows NT 4 で defrag を外していたのが、Windows 2000 以降で復活させていたり、Mac OS X でもバックグラウンドで低負荷時に defragmentation を行っていたりすることからも容易に推測できることである。
少なくとも Debian GNU/Linux においては、distro はそんな脊髄反射的な思想に汚染されてはいない。最近は ext4 を defragmentate できる e4defrag というソフトがちゃんと /usr/sbin に入っている(もっとも、僕はこれを診断モード以外で使ったことがない……ディスクスペースに余裕がある限りにおいて、Linux と ext4 の組み合わせでは defrag が問題になることがないのは事実である)。僕のように Windows・Mac OS X・Linux の間を行ったり来たりしながら日常を過ごしている者としては、NTFS の defragmentation を Linux 上でできると便利なのだが、一時期出ると噂のあった ntfsck も話を聞かなくなったしなあ……と思っていたところに、興味深い記述を発見したのだった。
Advanced NTFS-3G Features というページを見ていたら……:
そしてページの下の方には、ultradefrag-5.0.0AB.7.zip……beta 版だが、Linux 版 ultradefrag のソースへのリンクがあるではないか!UltraDefrag for Linux UltraDefrag is a powerful Open Source Defragmentation tool for the Windows Platform. It can defragment any system files including registry hives and paging file. Also one of the main goals of UltraDefrag is doing the job as fast and reliable as possible.
It is being ported to Linux and NTFS-3G for defragmenting NTFS partitions. Currently only a test version in console mode is available. Please read the included file README.linux for compiling and testing.
ultradefrag は、フリーの defrag ツールとしては Piriform Defraggler と並んでよく知られている。sourceforge で開発・公開がなされているというのもあるだろうけれど、この二つのツールはどちらも、パーティション全体だけでなく、ファイル単位での defrag にも対応していることが、その原因かもしれない。
とりあえず、上のリンクからソースの archive を取得してみる。展開して中の document を読むと……はぁはぁ、まだ configure とか使える段階ではないので、自分で Makefile を書き直してくれ、と。当たりをつけるために、ある程度書き換えてから make を走らせ、エラーメッセージを読みながら直して……を行うことにする。
まず、このソースをコンパイルするためには、ntfs-3g と ntfs-3g-dev をインストールしておく必要がある。僕の場合は既に入れてあるので、archive を展開してできる "ultradefrag-5.0.0AB.7" 内のディレクトリ src に入って、Makefile を書き換える。Makefile の修正箇所だけを抜き書きすると:
……と、こんなところか。distro の違う人は適宜読み換えていただければよろしいだろう。このように Makefile を修正すると、make 一発で、udefrag というバイナリが生成される。このバイナリを /usr/local/sbin に移してから、/usr/local/man/man8 というディレクトリを切って、ultradefrag-5.0.0AB.7/src/man/udefrag.man を /usr/local/man/man8/udefrag.8 という名前でコピーしておけばよろしい。詳細は udefrag に何もオプション・引数を付けずに実行するか、man udefrag で参照していただきたい。GCC=gcc
LD=ld
AR=ar
INCL=-I/usr/include/ntfs-3g -Iinclude
COPT=-DPPGC=1 -O2
GCCOPT=-DPPGC=1 -O2
LIB1=/usr/lib/x86_64-linux-gnu
LIB2=/usr/lib/gcc/x86_64-linux-gnu/4.7.1
NTFSLIB=/lib/x86_64-linux-gnu/libntfs-3g.so.*.0.0
最後に強調しておくけれど、現時点ではこの Linux 版 ultradefrag はあくまでも beta version である。使用にはくれぐれも注意していただき、壊すわけにはいかないパーティションに適用するのは控えられることをお薦めしておく。