Jak w Linuksie sprawdzasz, czy dysk jest pofragmentowany?

28

Podczas uruchamiania fsck czasami zgłasza frakcjonowanie dysku: „5,3% nieciągłe”.

Jak mogę uzyskać te informacje osobiście? Czy istnieje określone wywołanie fsck?

Peltier
źródło

Odpowiedzi:

27

Możesz bezpiecznie uruchomić fsck.ext2 na systemie plików ext2 ext3 lub ext4, nawet jeśli jest tak zamontowany

sudo fsck.ext2 -fn /dev/sdXY

Jeśli dysk jest zamontowany, wyświetli wiele błędów, ale argument -n mówi mu, aby nie dotykał dysku.

$ 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
Rucent88
źródło
Dzięki! fsck.ext2 znalazł kilka błędów na mojej partycji domowej. Teraz chciałbym to naprawić. To nasuwa pytanie: jak naprawić partycję domową, którą muszę zamontować, aby się zalogować?
Michael
3
@ Michael Jeśli Twój dysk jest zamontowany, uruchomienie sprawdzania go zawsze będzie zgłaszać błędy. W każdym razie, jeśli chcesz sprawdzić system plików przy następnym uruchomieniu, uruchom to sudo tune2fs -C 16000 /dev/sda1i uruchom ponownie.
Rucent88
1
fsck sprawdza, co jest na dysku / pamięci, ale jeśli zostanie zamontowany, będą w toku (w połowie zapisane). Dlatego zobaczysz błędy, nie są to prawdziwe błędy, są błędami fałszywymi. Ignoruj ​​ich.
ctrl-alt-delor
8

Nowoczesna rodzina systemów plików ext bierze pod uwagę równoważenie i ciągłość przy przydzielaniu plików. W ext3 i ext4 równoważenie odbywa się na ogół poprzez stosowanie pozycji dziennika w kolejności, a szczególnie w ext4, przez wstępne przydzielanie rozszerzeń systemu plików w celu zwiększenia ciągłych bloków. Ściganie poziomów fragmentacji niższych niż 20% może nie być warte twojego czasu, szczególnie jeśli twój system stale uzyskuje dostęp do kilku plików. Proponuję zastosować taktykę zwiększania prędkości odczytu dla systemu z jednym dyskiem:

  • wzrost pamięci RAM: zwiększa pamięć podręczną systemu plików

  • zwiększ rozmiar bloku: przechodząc z rozmiaru bloku 1k ​​na rozmiar 4k, uzyskujesz lepszą wydajność odczytów dla plików bliskich lub większych niż rozmiar bloku

  • jeśli jesteś pedantyczny, możesz organizować duże pliki i małe pliki w partycje według rozmiaru bloku, możesz to zrobić tylko wtedy, gdy przechowujesz zdjęcia, filmy i kod źródłowy w osobnych katalogach

  • zwiększ swoje ustawienie odczytu z wyprzedzeniem za pomocą narzędzia hdparm i / lub trybu laptopa

  • kopie zapasowe i przywracanie systemu plików w sposób liniowy, na przykład za pomocą tar

Jeśli masz wiele dysków i używasz RAID Striping i / lub LVM, musisz wziąć pod uwagę inne czynniki, takie jak rozmiar paska.

memnoch_proxy
źródło
4

Tak, istnieje specyficzne fsckwywołanie (jako root lub sudo):

$ fsck /dev/sdXY

Zamień X i Y na odpowiednie parametry dla twojego przypadku (np /dev/sda1.).

NIE URUCHAMIAJ TEGO NA URZĄDZENIU ZAMONTOWANYM! Może to spowodować poważne uszkodzenie systemu plików.

Aby uzyskać więcej informacji o systemie Linux i defragmentacji, zobacz moją odpowiedź tutaj .


Jeśli nie musisz specjalnie uruchamiać fsck, ale po prostu chcesz sprawdzić fragmentację dysku, poniższy skrypt (pobrany stąd ) powinien załatwić sprawę:

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

Następnie możesz uruchomić go w danym katalogu (lub punkcie instalacji):

$ frag_check.pl $HOME/
  1.32410691664555% non contiguous files, 1.05380668862427 average fragments.
terdon
źródło
To po prostu wywołuje fsck na partycji i jak oboje wiemy, zniszczy zamontowaną partycję. Czy jest jakiś sposób na użycie fsck w trybie „tylko do odczytu”, „powiedz mi jak fragmentarycznie-mój-dysk”?
Peltier
O ile mi wiadomo, @Peltier. Myślałem, że możesz uruchomić system na niższym poziomie działania, odmontować odpowiedni dysk i uruchomić fsck. W każdym razie, na poważnie, prawie na pewno możesz zignorować fragmentację w większości systemów linuksowych.
terdon
@Peltier, zobacz moją zaktualizowaną odpowiedź.
terdon
1
Tak, jest wolny. Pamiętaj, że zajęło to około 2-3 minut na mojej partycji 500 GB / home /. Ponownie, podkreślam, fragmentacja dysku nie jest już tak naprawdę problemem. Zwłaszcza jeśli używasz systemu plików EXT3-4.
terdon
1
@KentFredric Ah! W rzeczy samej. Rozumiem teraz, co masz na myśli. Zredagowałem odpowiednio, dzięki. Usuńmy komentarze, aby usunąć bałagan.
terdon
0

Aby uzyskać te informacje, możesz użyć narzędzia takiego jak e2defrag.

Pamiętaj, że ze względu na naturę systemów plików Linux defragmentacja jest zwykle niepotrzebna.

Lucas Kauffman
źródło
Czy mógłbyś wyszczególnić swoją odpowiedź? Próbowałem uzyskać te informacje e4defrag -c, ale to nie zadziałało.
Peltier
@Peltier Wskaż go na punkt orientacyjny Ext3 lub Ext4 za -copcją jako ostatni argument. I… „nie działał”? Jaki masz błąd?
gertvdijk
Mówi „Gotowe”. Nie skierowałem go jednak bezpośrednio na urządzenie, ale na punkt montażu. Próbuję ponownie z urządzeniem.
Peltier
Zauważ, że zajmuje to dużo czasu, podczas gdy fsck jest bardzo szybki.
Peltier
Po prostu spróbowałem ponownie na urządzeniu, napisano tylko „Gotowe”.
Peltier