В Linux, как вы проверяете, фрагментирован ли диск?

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
Rucent88
источник
Благодарность! fsck.ext2 обнаружил несколько ошибок в моем домашнем разделе. Теперь я бы хотел его починить. Возникает вопрос: как мне восстановить домашний раздел, который мне нужно держать подключенным, чтобы войти?
Майкл
3
@Michael Если ваш диск смонтирован, проверка его всегда будет сообщать об ошибках. В любом случае, если вы хотите проверить файловую систему при следующей перезагрузке, запустите ее sudo tune2fs -C 16000 /dev/sda1и перезагрузитесь.
Rucent88
1
fsck проверяет, что находится на диске / хранилище, но если он смонтирован, то все будет в процессе (наполовину записано). Вот почему вы увидите ошибки, это не настоящие ошибки, это ложные ошибки. Игнорируй их.
Ctrl-Alt-Delor
8

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

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

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

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

  • увеличьте настройки опережающего чтения с помощью утилиты hdparm и / или режима ноутбука

  • резервное копирование и восстановление вашей файловой системы линейным способом, например, с помощью tar

Если у вас есть несколько дисков и вы используете raid чередование и / или LVM, вы должны учитывать другие факторы, такие как размер чередования.

memnoch_proxy
источник
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.
terdon
источник
Это просто вызов fsck для раздела, и, как мы оба знаем, он уничтожит смонтированный раздел. Есть ли способ использовать fsck только для чтения, скажи мне, как фрагментирован мой диск?
Пельтье
Насколько я знаю, @Peltier. Я думал, что вы можете загрузиться на более низкий уровень запуска, размонтировать соответствующий диск и запустить fsck. В любом случае, серьезно, вы почти наверняка можете игнорировать фрагментацию в большинстве систем Linux.
Тердон
@Peltier, посмотрите мой обновленный ответ.
Тердон
1
Да, это медленно. Имейте в виду, это заняло ~ 2-3 минуты на моем 500GB / home / раздел. Опять же, я подчеркиваю, фрагментация диска больше не является проблемой. Особенно, если вы используете файловую систему EXT3-4.
Тердон
1
@KentFredric Ах! Да, в самом деле. Теперь я понимаю, что вы имеете в виду. Я отредактировал соответственно, спасибо. Давайте удалим комментарии, чтобы удалить беспорядок.
Тердон
0

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

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

Лукас Кауфман
источник
Не могли бы вы подробно изложить свой ответ? Я пытался получить эту информацию e4defrag -c, но она не сработала.
Пельтье
@Peltier Направьте его на точку растяжения Ext3 или Ext4 после -cпараметра в качестве последнего аргумента. И ... "не работал"? Какую ошибку вы получаете?
gertvdijk
Там написано "Готово". Однако я указал не на устройство, а на точку монтирования. Я пытаюсь снова с устройством.
Пельтье
Обратите внимание, что это занимает много времени, тогда как fsck очень быстр.
Пельтье
Просто попробовал еще раз с устройством, он говорит только "Готово".
Пельтье