GNU/Linux >> Linux の 問題 >  >> Linux

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

このようにマウントされていても、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

ファイルシステムの最新の ext ファミリーは、ファイルを割り当てる際にバランスと連続性を考慮に入れます。 ext3 と ext4 では、通常、ジャーナル エントリを順番に適用することでバランスを取り、特に ext4 では、ファイル システム エクステントを事前に割り当てて連続ブロックを増やします。特にシステムがいくつかのファイルに繰り返しアクセスしている場合は、20% 未満の断片化レベルを追求するのは時間の無駄かもしれません。単一ディスク システムの読み取り速度を向上させるために、次の戦術を追求することをお勧めします。

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

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

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

  • hdparm やラップトップ モード ユーティリティを使用して先読み設定を増やしてください

  • tar などを使用して、ファイルシステムを直線的にバックアップおよび復元します

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


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

$ fsck /dev/sdXY

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

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

Linux と最適化の詳細については、こちらの回答を参照してください。

特に fsck を実行する必要はなく、ドライブの断片化を確認したいだけの場合は、次のスクリプト (ここから取得) でうまくいくはずです:

#!/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.

Linux
  1. Linuxでディスクをパーティション分割する方法

  2. Linuxでタイムゾーンを確認する方法

  3. Linuxでファイルの名前を変更する方法

  1. Linuxでファイルを見つける方法

  2. Linuxでディスク容量を確認する方法

  3. Redhatのバージョンを確認する方法

  1. Linuxでパーティションを削除する方法

  2. KaliLinuxのバージョンを確認する方法

  3. Linuxでハードディスク上の不良セクタまたは不良ブロックをチェックする方法