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


28

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

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

回答:


27

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

ありがとう!fsck.ext2は、ホームパーティションでいくつかのエラーを検出しました。今、私はそれを修復したいと思います。これは疑問を投げかけます。ログインするためにマウントしたままにする必要があるホームパーティションを修復するにはどうすればよいですか。
マイケル14年

3
@Michaelドライブがマウントされている場合、チェックを実行すると常にエラーが報告されます。とにかく、次回の再起動時にファイルシステムを確認したい場合は、これsudo tune2fs -C 16000 /dev/sda1を実行して再起動してください。
Rucent88 14年

1
fsckはディスク/ストレージの内容をチェックしますが、マウントされている場合は進行中のものがあります(半分は書き込まれます)。エラーが表示される理由は、実際のエラーではなく、誤ったエラーです。それらを無視します。
ctrl-alt-delor

8

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

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

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

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

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

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

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


4

はい、特定の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.

それは単にパーティションでfsckを呼び出すだけであり、私たちが知っているように、マウントされたパーティションを破壊します。fsckを読み取り専用のtell-me-how-fragmented-my-disk-isの方法で使用する方法はありますか?
ペルチェ

私の知る限り、@ Peltier。低いランレベルで起動し、関連するディスクをアンマウントしてfsckを実行できると考えていました。いずれにせよ、真剣に、ほとんどのLinuxシステムでは断片化をほぼ確実に無視できます。
テルドン

@ペルティエ、私の更新された答えをご覧ください。
テルドン

1
ええ、遅いです。500GBの/ home /パーティションで2〜3分かかりました。繰り返しますが、ドライブの断片化は実際にはもう問題ではありません。特に、EXT3-4ファイルシステムを使用している場合。
テルドン

1
@KentFredricああ!はい、確かに。私はあなたの今の意味がわかります。それに応じて編集しました、ありがとう。コメントを削除して、混乱を解消しましょう。
テルドン

0

この情報を取得するには、e2defragなどのツールを使用できます。

Linuxファイルシステムの性質上、デフラグは通常不要であることに注意してください。


回答の詳細を教えていただけますか?で情報を取得しようとしましたe4defrag -cが、うまくいきませんでした。
ペルチェ

@Peltier -c最後の引数としてオプションの後のExt3またはExt4 mointポイントをポイントします。そして...「機能しませんでした」?表示されるエラーは何ですか?
gertvdijk

「完了」と表示されます。ただし、デバイスを直接ポイントするのではなく、マウントポイントをポイントしました。デバイスでもう一度試しています。
ペルチェ

fsckは非常に高速であるのに対し、時間がかかることに注意してください。
ペルチェ

デバイスでもう一度試してみましたが、「完了」としか表示されません。
ペルチェ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.