XFS の断片化度を測定 on FC5
ext2、ext3 と違って XFS ファイルシステムは xfs_fsr というコマンドでファイルの再編成(Defrag?)ができるらしい。
→ lopsa-tech: XFS and xfs_fsr and fragmentation
→ man xfs_fsr (8) - filesystem reorganizer for XFS大きいファイルに適しているという噂から、私は VMware のイメージファイル置き場に XFS を使ってます。Windows で使うと分かるけど凄く断片化するんだよねこれ。
http://fun.poosan.net/sawa/index.php?UID=1170516076
ほほう。私は VMWare のディスクイメージは伸長式にも sparse にもしてないんで多分大丈夫かとはおもったんですが,
まずは断片化量の表示
# xfs_db -c frag -r /dev/hdb3 actual 1545, ideal 82, fragmentation factor 94.69%この94%というのはフラグメンテーションしまくりってこと?
http://fun.poosan.net/sawa/index.php?UID=1170516076
xfs_db に -c frag というコマンドを与えることで,フラグメンテーションを調べることができるんですね。勉強になります。では,ということでやってみたところ,
# xfs_db -c frag -r /dev/hda3 Segmentation fault
がぁーーん。
調べてみたら,xfsprogs の xfs_db にバグがあるようです*1(⇒http://www.linux.sgi.com/archives/xfs/2005-10/msg00139.html)。ので,xfsprogs を作り直すことに。
普通に src.rpm をとってきて rpmbuild で依存パッケージを調べてインストールしていったところ,/usr/include/uuid/uuid.h がないよ,と怒られます。じゃあ extras の uuid ないし uuid-dce を入れるといいのかと思ったら違う。ぐぐってみたところ,なぜか e2fsprogs-devel に入っているみたいなのでインストール。
以上依存関係を解決した後,上記のパッチをあててみました。
xfsprogs-2.7.3-frag.patch という名前で SOURCES に置く物が↓
--- db/frag.c.orig 2005-10-08 01:51:33.000000000 +0900 +++ db/frag.c 2007-03-08 11:20:43.285335444 +0900 @@ -294,7 +294,7 @@ xfs_bmbt_rec_32_t *rp; rp = (xfs_bmbt_rec_32_t *)XFS_DFORK_PTR(dip, whichfork); - process_bmbt_reclist(rp, XFS_DFORK_NEXTENTS(dip, whichfork), extmapp); + process_bmbt_reclist(rp, XFS_DFORK_NEXTENTS_HOST(dip, whichfork), extmapp); } static void @@ -305,7 +305,7 @@ extmap_t *extmap; int nex; - nex = XFS_DFORK_NEXTENTS(dip, whichfork); + nex = XFS_DFORK_NEXTENTS_HOST(dip, whichfork); if (!nex) return; extmap = extmap_alloc(nex);
spec ファイルへのパッチが↓
--- xfsprogs.spec.orig 2007-03-08 11:13:08.579703639 +0900 +++ xfsprogs.spec 2007-03-08 11:24:59.276282420 +0900 @@ -7,4 +7,5 @@ URL: http://oss.sgi.com/projects/xfs/ Source: ftp://oss.sgi.com/projects/xfs/download/cmd_tars/xfsprogs-%{version}.src.tar.gz +Patch: xfsprogs-%{version}-frag.patch BuildRoot: %{_tmppath}/%{name}-root BuildRequires: autoconf, libtool, gettext @@ -44,4 +45,5 @@ %prep %setup -q +%patch -p0 %build
これで
% rpmbuild -ba SPECS/xfsprogs.spec ... % sudo rpm -Uvh --replacefiles --replacepkgs RPMS/i386/xfsprogs-2.7.3-1.2.1.i386.rpm
したところ,
# xfs_db -c frag -r /dev/hda3 actual 60865, ideal 60364, fragmentation factor 0.82%
のように無事表示できました。やっぱりあんまり断片化してなかったみたいです。
*1:FC6 のマシンだとうまくいったので,FC6 だとパッチがあたっているのか,運がいいだけかはわかりませんが