리눅스에서 디스크가 조각화되었는지 어떻게 확인합니까?


28

부팅시 fsck는 때때로 디스크의 조각화를 "5.3 % 비 연속"으로보고합니다.

이 정보를 직접 얻으려면 어떻게해야합니까? 특정 fsck 호출이 있습니까?

답변:


27

fsck.ext2를 ext2 ext3 또는 ext4 파일 시스템에서 이와 같이 마운트하더라도 안전하게 실행할 수 있습니다

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가 내 홈 파티션에서 여러 오류를 발견했습니다. 이제 수리하고 싶습니다. 이것은 질문을 제기합니다 : 홈 파티션을 어떻게 복구합니까? 로그인하기 위해 마운트를 유지해야합니까?
Michael

3
@Michael 드라이브가 마운트 된 경우 검사를 실행하면 항상 오류가보고됩니다. 어쨌든 다음에 다시 부팅 할 때 파일 시스템을 확인하려면이를 실행 sudo tune2fs -C 16000 /dev/sda1하고 다시 부팅하십시오.
Rucent88

1
fsck는 디스크 / 스토리지에있는 내용을 확인하지만 마운트 된 경우 진행중인 항목이 있습니다 (반쪽 쓰기). 따라서 오류가 발생하는 이유는 실제 오류가 아니며 잘못된 오류입니다. 그들을 무시하라.
ctrl-alt-delor 10

8

최신 파일 시스템 제품군은 파일을 할당 할 때 균형과 연속성을 고려합니다. ext3 및 ext4 밸런싱에서는 일반적으로 저널 항목을 순서대로 적용하고, 특히 ext4에서 파일 시스템 범위를 사전 할당하여 연속 블록을 늘려 관리합니다. 특히 시스템이 몇 개의 파일에 반복적으로 액세스하는 경우 20 % 미만의 조각화 수준을 추적하는 것은 가치가 없을 수 있습니다. 단일 디스크 시스템의 읽기 속도를 높이기 위해 다음과 같은 전술을 따르는 것이 좋습니다.

  • 램 증가 : 파일 시스템 캐시가 증가합니다

  • 블록 크기 증가 : 1k에서 4k 블록 크기로 이동하면 블록 크기보다 크거나 큰 파일에 대한 읽기 성능이 향상됩니다.

  • pedantic이라면 큰 파일과 작은 파일을 블록 크기에 따라 파티션으로 구성 할 수 있습니다. 사진, 비디오 및 소스 코드를 별도의 디렉토리에 저장 한 경우에만이 작업을 수행 할 수 있습니다

  • hdparm 및 / 또는 랩톱 모드 유틸리티를 사용하여 미리 읽기 설정을 높이십시오

  • tar와 같은 선형 방식으로 파일 시스템 백업 및 복원

디스크가 여러 개이고 RAID 스트라이프 및 / 또는 LVM을 사용하는 경우 스트라이프 크기와 같은 다른 요소를 고려해야합니다.


4

예, 특정 fsck호출이 있습니다 (루트 또는 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를 호출하는 것이며, 우리 모두 알고 있듯이 마운트 된 파티션을 파괴합니다. 읽기 전용 tell-me-how-fragmented-my-disk-is 방식으로 fsck를 사용하는 방법이 있습니까?
Peltier

내가 아는 한, @Peltier. 더 낮은 런레벨로 부팅하고 관련 디스크를 마운트 해제하고 fsck를 실행할 수 있다고 생각했습니다. 어쨌든 대부분의 Linux 시스템에서 조각화를 무시할 수 있습니다.
terdon

@Peltier, 업데이트 된 답변을 참조하십시오.
terdon

1
예, 느립니다. 내 500GB / home / 파티션에서 ~ 2-3 분이 걸렸습니다. 다시 한 번 강조하지만, 드라이브 조각화는 더 이상 문제가되지 않습니다. 특히 EXT3-4 파일 시스템을 사용하는 경우.
terdon

1
@KentFredric 아! 네 확실합니다. 무슨 말인지 알 겠어 그에 따라 편집했습니다. 감사합니다. 혼란을 제거하기 위해 주석을 삭제합시다.
terdon

0

e2defrag와 같은 도구를 사용하여이 정보를 얻을 수 있습니다.

Linux 파일 시스템의 특성상 조각 모음은 일반적으로 필요하지 않습니다.


답을 자세히 설명해 주시겠습니까? 로 정보를 얻으려고했지만 e4defrag -c작동하지 않았습니다.
Peltier

@Peltier -c마지막 인수로 옵션 뒤에 Ext3 또는 Ext4 moint 지점을 가리 킵니다 . 그리고 ... "작동하지 않았다"? 당신이 얻는 오류는 무엇입니까?
gertvdijk

"완료"라고 말합니다. 그러나 장치를 직접 가리 키지 않고 마운트 지점을 가리 켰습니다. 장치로 다시 시도하고 있습니다.
Peltier

fsck는 매우 빠르지 만 시간이 많이 걸립니다.
Peltier

장치를 사용하여 다시 시도하면 "완료"만 표시됩니다.
Peltier
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.