【Linux】EXT4ファイルシステムのデフラグ

近年のLinuxディストリビューションでは、デフォルトのファイルシステムとしてEXT4が使われています。

EXT4ファイルシステムはフラグメンテーションが起きづらいとされていますが、長年の使用でフラグメンテーションは発生します。

フラグメンテーションは日本語で断片化と言いますが、フラグメンテーションが進んでくるとデータアクセスのパフォーマンスが低下してきます。

Linux上でEXT4ファイルシステムのデフラグを行うことができるe4defragというツールを紹介します。

e4defragについて

インストール方法

e4defragは主なディストリビューションであれば、APT系、RPM系(yum系)どちらもe2fsprogsというパッケージ名に含まれていると思います。

・APT系で検索した結果とインストール

# apt search e2fsprogs
Sorting... Done
Full Text Search... Done
e2fsck-static/oldoldstable 1.42.12-2+b1 i386
  statically-linked version of the ext2/ext3/ext4 filesystem checker

e2fsprogs/oldoldstable,now 1.42.12-2+b1 i386 [installed]
  ext2/ext3/ext4 file system utilities

e2fsprogs-dbg/oldoldstable 1.42.12-2+b1 i386
  debugging information for e2fsprogs

libuuid-perl/oldoldstable 0.05-1+b1 i386
  Perl extension for using UUID interfaces as defined in e2fsprogs

# apt install e2fsprogs

・yum系で検索した結果とインストール

# yum search e2fsprogs
Loaded plugins: priorities, update-motd, upgrade-helper
================================================================== N/S matched: e2fsprogs ==================================================================
e2fsprogs.x86_64 : Utilities for managing ext2, ext3, and ext4 filesystems
e2fsprogs-devel.x86_64 : Ext2/3/4 filesystem-specific libraries and headers
e2fsprogs-libs.i686 : Ext2/3/4 filesystem-specific shared libraries
e2fsprogs-libs.x86_64 : Ext2/3/4 filesystem-specific shared libraries
e2fsprogs-static.x86_64 : Ext2/3/4 filesystem-specific static libraries

  Name and summary matches only, use "search all" for everything.

# yum install e2fsprogs

APT、yumどちらも静的リンク版があるようですので、環境によっては重宝する方もいるかと思います。

使い方

単にデフラグを行いたいだけなら、対象を指定してe4defragコマンドを実行するだけです。

・例1:デバイス対象

# e4defrag /dev/sda2

・例2:ディレクトリ対象

# e4defrag /home

・例3:ファイル対象

# e4defrag /root/hoge_file

cオプション

cオプションを付けるとフラグメンテーションの状況を確認するだけで、実際にデフラグは行われません

・例:/home/username/test以下のフラグメンテーション状況の確認だけ行う

# e4defrag -c /home/username/test 
<Fragmented files>                             now/best       size/ext
1. /home/username/test/sysconf.c                   1/1              4 KB
2. /home/username/test/a.out                       1/1              8 KB
3. /home/username/test/test.cpp                    1/1              4 KB
4. /home/username/test/test                        1/1              4 KB
5. /home/username/test/test2.cpp                   1/1              4 KB

 Total/best extents                             5/5
 Average size per extent                        4 KB
 Fragmentation score                            0
 [0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
 This directory (/home/username/test) does not need defragmentation.
 Done.

結果表示メッセージにもある通りフラグメンテーションの度合いは以下のようになっています。

0-30問題なし
31-55わずかなフラグメンテーション
56以上デフラグする必要あり

vオプション

vオプションを付けるとより詳しい情報を表示してくれます。

# e4defrag -c -v /home/username/test
<File>                                         now/best       size/ext
[1/7] "/home/username/test"
        File is not regular file
[2/7]/home/username/test/test2.cpp                 1/1              4 KB
[3/7]/home/username/test/test                      1/1              4 KB
[4/7]/home/username/test/test.cpp                  1/1              4 KB
[5/7] "/home/username/test/test2"
        File is not regular file
[6/7]/home/username/test/a.out                     1/1              8 KB
[7/7]/home/username/test/sysconf.c                 1/1              4 KB

<Fragmented files>                             now/best       size/ext
1. /home/username/test/sysconf.c                   1/1              4 KB
2. /home/username/test/a.out                       1/1              8 KB
3. /home/username/test/test.cpp                    1/1              4 KB
4. /home/username/test/test                        1/1              4 KB
5. /home/username/test/test2.cpp                   1/1              4 KB

 Total/best extents                             5/5
 Average size per extent                        4 KB
 Fragmentation score                            0
 [0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
 This directory (/home/username/test) does not need defragmentation.
 Done.

注意点

デフラグの処理は対象範囲やフラグメンテーションの状態によって完了まで非常に時間がかかり、また実行中はディスクが常に高負荷となる処理ですので実行の際は注意して下さい。

本番サービス中のサーバ等で実行するとサービスが高負荷で止まる可能性があります。

必ず長時間メンテナンスできる状況下でのみ実行するようにして下さい。