linkstation ls-hgl に最新版xfsprogsをインストールしてXFSファイルシステムをデフラグしよう


はじめに

Linux Hacks:xfs_fsrを使ってXFSファイルシステムをベストの状態で使用する - ITmedia エンタープライズをみて、XFSでフォーマットしたls-hglと、それにバックアップ用に接続したUSBハードディスクをデフラグしてみようとおもいました。 前回構築したnetatalkインストール時の開発環境を基に、 今回は、ARMアーキテクチャのlinuxマシンであるls-hglにxfsprogsの最新版をインストールしてみます。

※以下の作業は、すべてsshでログインしたls-hgl上で、ネイティブ開発環境で行います。

e2fsprogsをインストールする

uuid.hがないため、e2fsprogs, e2fsprogs-libを構築します。

e2fsprogsのソースをダウンロードし、展開する

LIBTOOL=/usr/local/develop/bin/libtool MAKE=/usr/local/develop/bin/make CFLAGS="-O2 -I/include -I/usr/local/develop/include -I/usr/local/develop/include/ncurses/ -I." ./configure --prefix=/usr/local/develop --enable-gettext=no --without-debug --without-normal --with-shared --disable-defrag

make

make install

ncursesをインストールする

ncurses.hがないため、ncuesesを構築します。

ncursesのソースをダウンロードし、展開する

LIBTOOL=/usr/local/develop/bin/libtool MAKE=/usr/local/develop/bin/make CFLAGS="-O2 -I/include -I/usr/local/develop/include -I/usr/local/develop/include/ncurses/ -I." ./configure --prefix=/usr/local/develop --enable-gettext=no --without-debug --without-normal --with-shared

make

make install

libtoolをインストールする

xfsprogsのconfigureで失敗するため、libtoolをインストールします。

libtoolのソースをダウンロードし、展開する

LIBTOOL=/usr/local/develop/bin/libtool MAKE=/usr/local/develop/bin/make CFLAGS="-O2 -I/include -I/usr/local/develop/include -I/usr/local/develop/include/ncurses/ -I." ./configure --prefix=/usr/local/develop --enable-gettext=no --without-debug --without-normal --with-shared

make

make install

attrをインストールする

attrのソースをダウンロードし、展開する

LIBTOOL=/usr/local/develop/bin/libtool MAKE=/usr/local/develop/bin/make CFLAGS="-O2 -I/include -I/usr/local/develop/include -I/usr/local/develop/include/ncurses/ -I." ./configure --prefix=/usr/local/develop --enable-gettext=no --without-debug --without-normal --with-shared

makeを2回した後(1回目はsandboxのgzipによるエラーが出るが気にしなくてよい)

make install

make install-dev

make install-lib

aclをインストールする

aclのソースをダウンロードし、展開する

LIBTOOL=/usr/local/develop/bin/libtool MAKE=/usr/local/develop/bin/make CFLAGS="-O2 -I/include -I/usr/local/develop/include -I/usr/local/develop/include/ncurses/ -I." ./configure --prefix=/usr/local/develop --enable-gettext=no --without-debug --without-normal --with-shared

makeを2回した後(1回目はsandboxのgzipによるエラーが出るが気にしなくてよい)

make install

make install-dev

make install-lib

xfsprogsをインストールする

xfsprogsのソースをダウンロードし、展開する

LIBTOOL=/usr/local/develop/bin/libtool MAKE=/usr/local/develop/bin/make CFLAGS="-O2 -I/include -I/usr/local/develop/include -I/usr/local/develop/include/ncurses/ -I." ./configure --prefix=/usr/local/develop --enable-gettext=no --without-debug --without-normal --with-shared

パッチを当てます。xfsprogs.patch

makeを2回した後(1回目はsandboxのgzipによるエラーが出るが気にしなくてよい)

make install

make install-dev

make install-lib

xfsdumpをインストールする

xfs_fsrコマンドは、2009年1月にxfsprogsにも含まれるようになりましたので、xfsdumpのインストールは不要です。

実行

デフラグ対象ドライブは、マウントされている必要があります。また、デフラグにはかなり時間がかかります(1TBのディスクで4時間以上かかりました)。

デフラグ中のファイルへのアクセスは問題無いようです。

ls-hglのシステムにはcronが元々入っているので、スケジュール実行することが可能です。

※断片化されたファイルを一塊になるようにコピーするという作業の繰り返しをおこないます。(ファイルを再配置して、ファイルシステムの前方につめる訳ではありません。)

以下、実行例です。勝手に書き込み可能なxfsパーティション(共有フォルダ&バックアップ用USBHDD)を検出して実行してくれます。

bash-2.05b# xfs_fsr -v

Found 2 mounted, writable, XFS filesystems

xfs_fsr -m /proc/mounts -t 7200 -f /var/tmp/.fsrlast_xfs ...

START: pass=5 ino=344452842 /dev/sda6 /mnt/disk1

/mnt/disk1 start inode=344452842

ino=453051875

extents before:6 after:3 DONE ino=453051875

ino=453051882

extents before:3 after:1 DONE ino=453051882

.....

おまけ

以上の手順でxfsprogsをインストールすると、aclをインストールすることになります。

ここで改めてnetatalkをコンパイルすると、aclに対応したnetatalkを生成できます。

さらに、以下の手順でopenldapのヘッダファイルを補完してから、コンパイルすることでaclとopenldapに対応したnetatalkを生成できます。

  1. openldapのヘッダ取り出し
    http://opensource.buffalo.jp/gpl_storage.html の LS-HGL series -> Firmware version 1.00 or later から

    openldap-2.3.11_arm.tgz をダウンロードし、展開

    cd openldap-2.3.11

    cd include

    make install

  2. netatalkをビルド( http://netatalk.sourceforge.net/ )

    LDFLAGS=”-L/usr/lib -ldl” CFLAGS=”-O2 -I/include” ./configure --prefix=/usr/local/develop --with-bdb=/usr/local/develop --with-ssl-dir=/usr/local/develop

/TOP/