3年半ほど前に、デフラグに関して下記の記事を書きました。
【参考】独学Linux:Linuxでデフラグが必要のない理由
その後、いろいろな方からのご意見があり、「まったく必要がないわけではなくサーバ用途ではある程度断片化は起こる」「Windowsでも現在のNTFSではLinuxと同様な処置がなされているので記事内容は古い情報に基づいている」「ただしWindowsの方が断片化が起こりやすいという傾向はある」ということがわかりました。
普段は気にしていなかったし、気にする必要はないのかも知れません。ただ、実際に確認する手段を知らないのもどうかなと思い、調べてみたところ、どの程度正確かはわかりませんが、Gentoo Linuxのフォーラムでディレクトリ単位で断片化されている割合を表示するperlスクリプトを見つけました。また、これもちゃんと機能している保証はありませんが、デフラグを実行するスクリプトもありましたので、実際にUbuntu11.04とFedora15で試してみました。
/bootディレクトリに対して、frag.plで断片化の割合を測定し、defragでデフラグを実行し、再度frag.plで断片化の割合を測定し直したところ。はじめから「約0.448%」と低い値ですが、デフラグの実行後、「0%」の表示になりました。
なお、UbuntuではShakeというパッケージがPPAで配布されていましたが、Maverickまでしか対応していないので、そちらは使えません。
#!/usr/bin/perl -w
#this script search for frag on a fs
use strict;
#number of files
my $files = 0;
#number of fragment
my $fragments = 0;
#number of fragmented files
my $fragfiles = 0;
#search fs for all file
open (FILES, "find " . $ARGV[0] . " -xdev -type f |");
while (defined (my $file = <FILES>)) {
#quote some chars in filename
$file =~ s/!/\\!/g;
$file =~ s/#/\\#/g;
$file =~ s/&/\\&/g;
$file =~ s/>/\\>/g;
$file =~ s/</\\</g;
$file =~ s/\$/\\\$/g;
$file =~ s/\(/\\\(/g;
$file =~ s/\)/\\\)/g;
$file =~ s/\|/\\\|/g;
$file =~ s/'/\\'/g;
$file =~ s/ /\\ /g;
#nb of fragment for the file
open (FRAG, "filefrag $file |");
my $res = <FRAG>;
if ($res =~ m/.*:\s+(\d+) extents? found/) {
my $fragment = $1;
$fragments+=$fragment;
if ($fragment > 1) {
$fragfiles++;
}
$files++;
} else {
print ("$res : not understand for $file.\n");
}
close (FRAG);
}
close (FILES);
print ( $fragfiles / $files * 100 . "% non contiguous files, " . $fragments / $files . " average fragments.\n");
このスクリプトを「frag.pl」という名称でホームディレクトリに保存して、実行するユーザに対して実行権を与えます。
$ chmod 750 ~/frag.pl
このコマンドは、次のように測定するディレクトリを指定することで、ディレクトリ内のファイルに対して断片化の測定を行います。
$ sudo ~/frag.pl /tmp (←/tmpディレクトリ内のファイルに対して実行する場合)
(出力例1)約0.496%のファイルが断片化されている
0.496277915632754% non contiguous files, 1.00992555831266 average fragments.
(出力例2)断片化されているファイルがない
0% non contiguous files, 1 average fragments.
■ 配布サイト:defrag-0.08
ここで配布されているdefragというファイルを、同名のdefragという名称でホームディレクトリに保存し、実行権を与えます。
$ chmod +x defrag
このコマンドは、測定するディレクトリに移動して実行することで、ディレクトリ内のファイルに対してデフラグを実行します。
$ cd /tmp (←/tmpディレクトリ内のファイルに対して実行する場合、/tmpに移動する)
$ sudo ~/defrag (←カレントディレクトリでデフラグを実行する)
ディレクトリ内に含まれるファイル数が多かったり、ファイルサイズの大きなファイルが含まれていると、長時間を要する場合があります。終了後、frag.plで確認して効果が見られない場合は、もう一度実行してみるといいでしょう。
デスクトップ用途で普通に使用している分には、デフラグする必要はないです。というのも、デフラグが必要になる頃には、新しいバージョンに入れ替えたり、新しいPCに乗り換えたりしていると思われるためです。また、今回の記事はあくまで参考ということですので、商用のサーバなどでは専用のツールを利用された方がいいと思います。
ツイート
【参考】独学Linux:Linuxでデフラグが必要のない理由
その後、いろいろな方からのご意見があり、「まったく必要がないわけではなくサーバ用途ではある程度断片化は起こる」「Windowsでも現在のNTFSではLinuxと同様な処置がなされているので記事内容は古い情報に基づいている」「ただしWindowsの方が断片化が起こりやすいという傾向はある」ということがわかりました。
普段は気にしていなかったし、気にする必要はないのかも知れません。ただ、実際に確認する手段を知らないのもどうかなと思い、調べてみたところ、どの程度正確かはわかりませんが、Gentoo Linuxのフォーラムでディレクトリ単位で断片化されている割合を表示するperlスクリプトを見つけました。また、これもちゃんと機能している保証はありませんが、デフラグを実行するスクリプトもありましたので、実際にUbuntu11.04とFedora15で試してみました。
断片化の測定とデフラグの実行

なお、UbuntuではShakeというパッケージがPPAで配布されていましたが、Maverickまでしか対応していないので、そちらは使えません。
断片化の測定
断片化の状態を測定するには、下記のperlスクリプトを使います。これはGentooのフォーラムからの転載です。#!/usr/bin/perl -w
#this script search for frag on a fs
use strict;
#number of files
my $files = 0;
#number of fragment
my $fragments = 0;
#number of fragmented files
my $fragfiles = 0;
#search fs for all file
open (FILES, "find " . $ARGV[0] . " -xdev -type f |");
while (defined (my $file = <FILES>)) {
#quote some chars in filename
$file =~ s/!/\\!/g;
$file =~ s/#/\\#/g;
$file =~ s/&/\\&/g;
$file =~ s/>/\\>/g;
$file =~ s/</\\</g;
$file =~ s/\$/\\\$/g;
$file =~ s/\(/\\\(/g;
$file =~ s/\)/\\\)/g;
$file =~ s/\|/\\\|/g;
$file =~ s/'/\\'/g;
$file =~ s/ /\\ /g;
#nb of fragment for the file
open (FRAG, "filefrag $file |");
my $res = <FRAG>;
if ($res =~ m/.*:\s+(\d+) extents? found/) {
my $fragment = $1;
$fragments+=$fragment;
if ($fragment > 1) {
$fragfiles++;
}
$files++;
} else {
print ("$res : not understand for $file.\n");
}
close (FRAG);
}
close (FILES);
print ( $fragfiles / $files * 100 . "% non contiguous files, " . $fragments / $files . " average fragments.\n");
このスクリプトを「frag.pl」という名称でホームディレクトリに保存して、実行するユーザに対して実行権を与えます。
$ chmod 750 ~/frag.pl
このコマンドは、次のように測定するディレクトリを指定することで、ディレクトリ内のファイルに対して断片化の測定を行います。
$ sudo ~/frag.pl /tmp (←/tmpディレクトリ内のファイルに対して実行する場合)
(出力例1)約0.496%のファイルが断片化されている
0.496277915632754% non contiguous files, 1.00992555831266 average fragments.
(出力例2)断片化されているファイルがない
0% non contiguous files, 1 average fragments.
デフラグの実行
デフラグを実行するスクリプトは、下記のサイトで配布されています。現在もメンテナンスされているかどうかは不明ですが、最新版は2010年3月29日付けの「deflag-0.08」というバージョン名になっています。■ 配布サイト:defrag-0.08
ここで配布されているdefragというファイルを、同名のdefragという名称でホームディレクトリに保存し、実行権を与えます。
$ chmod +x defrag
このコマンドは、測定するディレクトリに移動して実行することで、ディレクトリ内のファイルに対してデフラグを実行します。
$ cd /tmp (←/tmpディレクトリ内のファイルに対して実行する場合、/tmpに移動する)
$ sudo ~/defrag (←カレントディレクトリでデフラグを実行する)
ディレクトリ内に含まれるファイル数が多かったり、ファイルサイズの大きなファイルが含まれていると、長時間を要する場合があります。終了後、frag.plで確認して効果が見られない場合は、もう一度実行してみるといいでしょう。
デスクトップ用途で普通に使用している分には、デフラグする必要はないです。というのも、デフラグが必要になる頃には、新しいバージョンに入れ替えたり、新しいPCに乗り換えたりしていると思われるためです。また、今回の記事はあくまで参考ということですので、商用のサーバなどでは専用のツールを利用された方がいいと思います。
ツイート
HatchUpはソーシャルアプリ×スマホイベントを開催するので、お時間ありましたらぜひご参加ください!
■STR15東京 STR16大阪
日時|8月18日(木)東京 19:30-22:00
9月 2日(金)大阪 19:30-22:00
場所|東京 セルリアンタワー
大阪 TKP梅田ビジネスセンター
人数|150名
参加費|無料
参加企業|株式会社GMS、その他トップSAP企業
主催|株式会社HatchUp
協賛|GMOインターネット株式会社
内容|会社紹介、パネルトーク、アプリ企画LT
大ヒットアプリ『渋谷クエスト』や、『大乱闘!ギルドバトル』など今話題のGMS社参戦!!
ソーシャル、スマートフォンアプリ業界で活躍中の企業をお呼びし、
「スマホアプリ展開の今(これからの企業展開)など」について講演を行って頂きます。
イベント後は、懇親会を予定しておりますので、そちらも是非ご参加ください。
◆参加お申し込みはこちら http://www.socialtoprunners.jp/