Linux'ta, bir diskin parçalanmış olup olmadığını nasıl kontrol edersiniz?


28

Önyükleme sırasında fsck bazen bir diskin bozulmalarını bildirir: "% 5.3 bitişik olmayan".

Bu bilgiyi kendim nasıl alabilirim? Belirli bir fsck çağrısı var mı?

Yanıtlar:


27

Fsck.ext2 dosyasını bir ext2 ext3 veya ext4 dosya sisteminde güvenle çalıştırabilirsiniz.

sudo fsck.ext2 -fn /dev/sdXY

Sürücü monte edilmişse, çok fazla hata çıkarır, ancak -n argümanı sürücüye dokunmamasını söyler.

$ 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

Teşekkürler! fsck.ext2, ev bölümümde birkaç hata buldu. Şimdi tamir etmek istiyorum. Bu şu soruyu soruyor: Giriş yapmak için bağlantıda kalmam gereken ev bölmemi nasıl onarabilirim?
Michael,

3
@Michael Sürücünüz monte edilmişse, kontrol edilmesi her zaman hataları bildirir. Neyse, bir sonraki önyüklemede dosya sistemini kontrol etmek istiyorsanız, bunu çalıştırın sudo tune2fs -C 16000 /dev/sda1ve yeniden başlatın.
Rucent88

1
fsck diskte / depoda ne olduğunu kontrol eder, ancak monte edilirse devam eden şeyler olacaktır (yarı yazılı). Bu yüzden hataları göreceksiniz, bunlar gerçek hatalar değil, yanlış hatalar. Onları önemseme.
ctrl-alt-delor

8

Modern dahili dosya sistemleri ailesi, dosya tahsis ederken dengeyi ve bitişikliği dikkate alır. Ext3 ve ext4'te dengeleme genellikle dergi girişlerini sırayla uygulayarak ve ext4'te özellikle bitişik blokları artırmak için dosya sistemi uzantıları önceden tahsis edilerek yapılır. % 20'nin altındaki parçalanma seviyelerini takip etmek, özellikle sisteminiz birkaç dosyaya tekrar tekrar erişiyorsa, zaman ayırmaya değer olmayabilir. Tek bir disk sistemi için okuma hızını artırmak için bu taktikleri takip etmeyi öneriyorum:

  • ram'ı artır: bu, dosya sistemi önbelleğini artırır

  • blok boyutunu artırın: 1k'den 4k blok boyutlarına geçerek blok boyutunuza yakın veya daha büyük dosyalar için okumalarda daha iyi performans elde edersiniz

  • Bilgi niteliğinde değilseniz, büyük dosyaları ve küçük dosyaları bölmeler halinde blok boyutlarına göre düzenleyebilirsiniz, bunu yalnızca fotoğraf, video ve kaynak kodunu ayrı dizinlerde saklarsanız yapmak isteyebilirsiniz.

  • hdparm ve / veya dizüstü bilgisayar modu yardımcı programını kullanarak ileriye dönük ayarlarınızı artırın

  • dosya sisteminizi tar gibi bir doğrusal biçimde yedekleme ve geri yükleme

Birden fazla diskiniz varsa ve baskın şeritleme ve / veya LVM kullanıyorsanız, şerit boyutu gibi göz önünde bulundurulacak diğer faktörler vardır.


4

Evet, belirli bir fsckçağrı var (root veya sudo):

$ fsck /dev/sdXY

X ve Y'yi durumunuz için doğru parametrelerle değiştirin (örn. /dev/sda1).

MONTAJLI BİR PARÇADA BU ÇALIŞTIRMAYIN! Dosya sisteminize ciddi şekilde zarar verebilir.

Linux ve birleştirme hakkında daha fazla bilgi için, buradaki cevaba bakınız .


Özellikle fsck'i çalıştırmanız gerekmiyorsa, ancak sürücünüzün parçalanmasını kontrol etmek istiyorsanız, aşağıdaki komut ( buradan alınmış ) yapmanız gerekir:

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

Daha sonra söz konusu dizinde (veya bağlama noktası) çalıştırabilirsiniz:

$ frag_check.pl $HOME/
  1.32410691664555% non contiguous files, 1.05380668862427 average fragments.

Bu sadece bölüme fsck diyor ve ikimizin de bildiği gibi monte edilmiş bir bölümü yok edecek. Fsck'ü salt okunur, bana anlat nasıl parçalı diskimi kullanmanın bir yolu var mı?
Peltier

Bildiğim kadarıyla değil, @Peltier. Daha düşük bir çalışma seviyesine başlayabileceğinizi, ilgili diski çıkarabileceğiniz ve fsck komutunu çalıştırabileceğinizi düşünüyordum. Her durumda, cidden, çoğu linux sistemde parçalanmayı neredeyse kesinlikle görmezden gelebilirsiniz.
terdon

@Peltier, güncellenmiş cevabımı gör.
terdon

1
Evet, yavaş. Benim 500GB / ev / bölüm benim ~ 2-3mins aldı unutmayın. Yine, stres, sürücü parçalanması artık gerçekten bir sorun değil. Özellikle bir EXT3-4 dosya sistemi kullanıyorsanız.
terdon

1
@KentFredric Ah! Evet kesinlikle. Ne demek istediğini şimdi anlıyorum. Buna göre düzenleme yaptım, teşekkürler. Dağınıklığı kaldırmak için yorumları silelim.
terdon,

0

Bu bilgiyi almak için e2defrag gibi bir araç kullanabilirsiniz.

Linux dosya sistemlerinin doğası gereği, birleştirme işleminin normal olarak gereksiz olduğunu unutmayın.


Cevabınızı ayrıntılandırır mısınız? Bu bilgiyi almayı denedim e4defrag -cama işe yaramadı.
Peltier

@Peltier -cSon argüman olarak seçenekten sonra bir Ext3 veya Ext4 nokta noktasına gelin . Ve ... "işe yaramadı"? Aldığınız hata nedir?
gertvdijk

"Tamamlandı" yazıyor. Bununla birlikte, doğrudan cihaza, ancak bağlantı noktasına göstermedim. Cihazla tekrar deniyorum.
Peltier

Çok fazla zaman alacağına dikkat edin, fsck ise çok hızlı.
Peltier

Sadece cihazla tekrar denedim, sadece "Tamam" yazıyor.
Peltier
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.