web-dev-qa-db-ja.com

Linuxでは、ディスクが断片化されているかどうかをどのように確認しますか?

ブート時に、fsckがディスクの断片化を報告することがあります:「5.3%非連続」。

この情報を自分で取得するにはどうすればよいですか?特定のfsck呼び出しはありますか?

29
Peltier

このようにマウントされている場合でも、ext2 ext3またはext4ファイルシステムでfsck.ext2を安全に実行できます。

Sudo fsck.ext2 -fn /dev/sdXY

ドライブがマウントされている場合、多くのエラーが出力されますが、-n引数はドライブに触れないように指示します。

$ Sudo fsck.ext2 -fn /dev/sda1
e2fsck 1.42 (29-Nov-2011)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Ubuntu_Rescue: 291595/1222992 files (0.2% non-contiguous), 1927790/4882432 blocks
28
Rucent88

ファイルシステムの最新のextファミリーは、ファイルを割り当てるときにバランスと隣接性を考慮に入れます。 ext3とext4では、通常、ジャーナルエントリを順番に適用することで、特にext4では、ファイルシステムエクステントを事前に割り当てて、隣接するブロックを増やすことでバランスをとっています。特にシステムがいくつかのファイルに繰り返しアクセスしている場合は、20%未満の断片化レベルを追跡することは、時間の価値がない場合があります。単一のディスクシステムの読み取り速度を上げるために、次の方法を実行することをお勧めします。

  • rAMを増やす:ファイルシステムのキャッシュを増やします

  • ブロックサイズを増やす:1kから4kのブロックサイズに移動することにより、ブロックサイズに近い、またはブロックサイズよりも大きいファイルの読み取りのパフォーマンスが向上します。

  • 知識が豊富な場合は、大きなファイルと小さなファイルをブロックサイズでパーティションに整理できます。写真、ビデオ、およびソースコードを別のディレクトリに保存している場合にのみ、これを実行できます。

  • hdparmやラップトップモードユーティリティを使用して先読み設定を増やします。

  • tarなどの線形的な方法でファイルシステムをバックアップおよび復元する

複数のディスクがあり、RAIDストライピングやLVMを使用している場合は、ストライプサイズなど、他に考慮すべき要素があります。

8
memnoch_proxy

はい、特定のfsck呼び出しがあります(rootまたはSudoとして):

$ fsck /dev/sdXY

XとYをケースに適したパラメーターに置き換えます(例:/dev/sda1)。

マウントされたパーティションでこれを実行しないでください!ファイルシステムに深刻な損傷を与える可能性があります。

Linuxとデフラグの詳細については、私の答え here を参照してください。


特にfsckを実行する必要はないが、ドライブの断片化を確認したいだけの場合は、次のスクリプト( here から取得)が役立ちます。

#!/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 -print0");

$/ = "\0";

while (defined (my $file = <FILES>)) {
        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_check.pl $HOME/
  1.32410691664555% non contiguous files, 1.05380668862427 average fragments.
5
terdon

E2defragなどのツールを使用して、この情報を取得できます。

Linuxファイルシステムの性質上、デフラグは通常不要です。

0
Lucas Kauffman