28

При загрузке fsck иногда сообщает о фрагментации диска: «5,3% несмежных».

Как я могу получить эту информацию сам? Есть ли конкретный вызов fsck?

4 ответа4

25

Вы можете безопасно запустить 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
8

Современное семейство файловых систем ext учитывает балансировку и смежность при распределении файлов. В ext3 и ext4 балансировка, как правило, решается путем применения записей журнала по порядку, и, в частности, в ext4, путем предварительного выделения экстентов файловой системы для увеличения смежных блоков. Погоня за уровнями фрагментации ниже 20% может не стоить вашего времени, особенно если ваша система неоднократно обращается к нескольким файлам. Я предлагаю использовать эту тактику для увеличения скорости чтения для системы с одним диском:

  • увеличить оперативную память: это увеличивает кэш файловой системы

  • увеличить размер блока: при переходе от 1 кБ до 4 кбайт вы получите более высокую производительность при чтении для файлов, размер которых превышает или превышает размер блока

  • если вы педантичны, вы можете организовать большие файлы и маленькие файлы в разделы по размеру блока, вы можете сделать это, только если вы сохранили фотографии, видео и исходный код в отдельных каталогах

  • увеличьте настройки опережающего чтения с помощью утилиты 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.
0

Вы можете использовать такой инструмент, как e2defrag, чтобы получить эту информацию.

Помните, что из-за особенностей файловых систем Linux дефрагментация обычно не требуется.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .