Як у 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

Спасибі! fsck.ext2 знайшов кілька помилок на моєму домашньому розділі. Тепер я хотів би її відремонтувати. Це ставить запитання: як мені відремонтувати домашній розділ, який мені потрібно тримати на монтажі, щоб увійти?
Майкл

3
@Michael Якщо ваш накопичувач встановлений, запустивши перевірку, він завжди повідомляє про помилки. У будь-якому випадку, якщо ви хочете перевірити файлову систему при наступному перезавантаженні, запустіть це sudo tune2fs -C 16000 /dev/sda1та перезавантажте.
Rucent88

1
fsck перевіряє, що знаходиться на диску / сховищі, але якщо він встановлений, то буде зроблено матеріал (наполовину написано) Ось чому ви побачите помилки, це не реальні помилки, це помилкові помилки. Ігноруйте їх.
ctrl-alt-delor

8

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

  • збільшення оперативної пам'яті: це збільшує кеш файлової системи

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

  • якщо ви педантичні, ви можете організувати великі файли та невеликі файли в розділи за розміром їх блоку, ви можете це зробити, лише якщо ви зберігали фотографії, відео та вихідний код в окремих каталогах

  • збільшити налаштування читання вперед за допомогою утиліти hdparm та / або ноутбука

  • резервне копіювання та відновлення вашої файлової системи лінійним способом, наприклад, з tar

Якщо у вас є кілька дисків і ви використовуєте рейд-стриптиз та / або 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.

Це просто виклик fsck на розділ, і як ми обидва знаємо, він знищить змонтований розділ. Чи є спосіб використовувати fsck способом "лише для читання", скажи мені "як" фрагментарно "мій диск"?
Пельтьє

Не наскільки я знаю, @Peltier. Я думав, що ви можете завантажитися на нижній пробіг, відключити відповідний диск і запустити fsck. У будь-якому випадку, якщо серйозно, то майже напевно ви можете ігнорувати фрагментацію у більшості систем Linux.
тердон

@Peltier, дивіться мою оновлену відповідь.
тердон

1
Так, це повільно. Зауважте, що на моєму 500 ГБ / дому / розділі потрібно було 2-3 хвилини. Знову ж таки, наголошую, фрагментація приводу вже насправді не є проблемою. Особливо, якщо ви використовуєте файлову систему EXT3-4.
тердон

1
@KentFredric Ах! Так, справді. Я бачу, що ти маєш на увазі зараз. Я відповідно редагував, дякую. Видалимо коментарі, щоб видалити безлад.
тердон

0

Ви можете використовувати такий інструмент, як e2defrag, щоб отримати цю інформацію.

Майте на увазі, що через характер файлових систем Linux дефрагментація зазвичай не потрібна.


Ви б не хотіли детально відповісти? Я спробував отримати цю інформацію e4defrag -c, але це не вийшло.
Пельтьє

@Peltier Наведіть його на точку моменту Ext3 або Ext4 після -cопції як останнього аргументу. І ... "не працювало"? Яку помилку ви отримаєте?
gertvdijk

На ньому написано "Готово". Однак я вказував не на пристрій, а на точку кріплення. Я знову намагаюся з пристроєм.
Пельтьє

Зауважте, що це займає багато часу, тоді як fsck дуже швидкий.
Пельтьє

Просто спробував це знову з пристроєм, він говорить лише "Готово".
Пельтьє
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.