Di linux, bagaimana Anda memeriksa apakah disk terfragmentasi?

28

Saat boot, fsck terkadang melaporkan pembacaan untuk disk: "5,3% tidak bersebelahan".

Bagaimana saya bisa mendapatkan informasi ini sendiri? Apakah ada permintaan fsck tertentu?

Peltier
sumber

Jawaban:

27

Anda dapat menjalankan fsck.ext2 dengan aman pada sistem file ext2 ext3 atau ext4 walaupun sudah terpasang seperti ini

sudo fsck.ext2 -fn /dev/sdXY

Jika drive sudah di-mount, itu akan menampilkan banyak kesalahan, tetapi argumen -n mengatakan tidak menyentuh drive.

$ 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
sumber
Terima kasih! fsck.ext2 menemukan beberapa kesalahan pada partisi rumah saya. Sekarang saya ingin memperbaikinya. Ini menimbulkan pertanyaan: bagaimana cara saya memperbaiki partisi rumah saya, yang harus saya pasang agar tetap masuk?
Michael
3
@Michael Jika drive Anda terpasang, menjalankan pemeriksaan selalu akan melaporkan kesalahan. Bagaimanapun, jika Anda ingin memeriksa sistem file pada reboot berikutnya, jalankan ini sudo tune2fs -C 16000 /dev/sda1dan reboot.
Rucent88
1
fsck memeriksa apa yang ada di disk / penyimpanan, tetapi jika dipasang maka akan ada hal-hal yang sedang berlangsung (setengah tertulis). Itulah sebabnya Anda akan melihat kesalahan, itu bukan kesalahan nyata, itu kesalahan salah. Abaikan mereka.
ctrl-alt-delor
8

Keluarga ext modern filesystem mempertimbangkan keseimbangan dan kedekatan ketika mengalokasikan file. Dalam ext3 dan ext4 balancing umumnya diurus dengan menerapkan entri jurnal secara berurutan, dan di ext4 secara khusus, dengan pra-alokasi luasan sistem file untuk meningkatkan blok yang berdekatan. Mengejar tingkat fragmentasi yang lebih rendah dari 20% mungkin tidak sepadan dengan waktu Anda, terutama jika sistem Anda mengakses beberapa file berulang kali. Saya sarankan mengejar taktik ini untuk meningkatkan kecepatan baca untuk sistem disk tunggal:

  • meningkatkan ram: ini meningkatkan cache sistem file

  • meningkatkan ukuran blok: dengan berpindah dari 1k ke ukuran blok 4k, Anda mendapatkan kinerja yang lebih baik saat membaca untuk file yang dekat atau lebih besar dari ukuran blok Anda

  • jika Anda bertele-tele, Anda dapat mengatur file besar dan file kecil menjadi partisi dengan ukuran bloknya, Anda mungkin hanya ingin melakukan ini jika Anda menyimpan foto, video, dan kode sumber di direktori terpisah

  • tingkatkan pengaturan baca-depan Anda menggunakan utilitas hdparm dan / atau mode laptop

  • buat cadangan dan kembalikan sistem file Anda secara linear seperti dengan tar

Jika Anda memiliki banyak disk dan menggunakan raid striping dan / atau LVM, Anda harus mempertimbangkan faktor lain, seperti ukuran strip.

memnoch_proxy
sumber
4

Ya, ada fsckpermintaan khusus (sebagai root, atau sudo):

$ fsck /dev/sdXY

Ganti X dan Y dengan parameter yang benar untuk kasus Anda (misalnya /dev/sda1).

JANGAN RUN INI DI PARTISI MOUNTED! Ini serius dapat merusak sistem file Anda.

Untuk informasi lebih lanjut tentang Linux dan defragmenting, lihat jawaban saya di sini .


Jika Anda tidak perlu menjalankan fsck secara khusus, tetapi hanya ingin memeriksa fragmentasi drive Anda, skrip berikut (diambil dari sini ) harus melakukan trik:

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

Anda kemudian dapat menjalankannya di direktori (atau mount point) dalam pertanyaan:

$ frag_check.pl $HOME/
  1.32410691664555% non contiguous files, 1.05380668862427 average fragments.
terdon
sumber
Itu hanya memanggil fsck pada partisi, dan seperti yang kita berdua tahu, itu akan menghancurkan partisi yang dipasang. Apakah ada cara untuk menggunakan fsck dengan cara read-only, tell-me-how-fragmented-my-disk?
Peltier
Tidak sejauh yang saya tahu, @Peltier. Saya berpikir Anda bisa boot ke runlevel yang lebih rendah, unmount disk yang relevan dan jalankan fsck. Bagaimanapun, serius, Anda hampir dapat mengabaikan fragmentasi pada kebanyakan sistem linux.
terdon
@Peltier, lihat jawaban saya yang diperbarui.
terdon
1
Ya, itu lambat. Pikiran Anda butuh ~ 2-3mins pada 500GB / home / partisi saya. Sekali lagi, saya menekankan, mendorong fragmentasi bukan masalah lagi. Terutama jika Anda menggunakan sistem file EXT3-4.
terdon
1
@KentFredric Ah! Ya memang. Saya mengerti maksud Anda sekarang. Saya mengedit sesuai itu, terima kasih. Mari kita hapus komentar untuk menghapus kekacauan.
terdon
0

Anda dapat menggunakan alat seperti e2defrag untuk mendapatkan informasi ini.

Ingatlah bahwa karena sifat sistem file Linux, defragging biasanya tidak diperlukan.

Lucas Kauffman
sumber
Maukah Anda merinci jawaban Anda? Saya mencoba mendapatkan informasi itu e4defrag -c, tetapi tidak berhasil.
Peltier
@Peltier Arahkan ke titik moint Ext3 atau Ext4 setelah -copsi sebagai argumen terakhir. Dan ... "tidak berhasil"? Apa kesalahan yang Anda dapatkan?
gertvdijk
Dikatakan "Selesai". Namun, saya tidak mengarahkannya langsung ke perangkat, tetapi ke titik pemasangan. Saya mencoba lagi dengan perangkat.
Peltier
Perhatikan bahwa ini membutuhkan banyak waktu, sedangkan fsck sangat cepat.
Peltier
Hanya mencobanya lagi dengan perangkat, hanya tertulis "Selesai."
Peltier