Hlavní navigace

Defragmentace disků v Linuxu

7. 1. 2008
Doba čtení: 5 minut

Sdílet

Pokud se zeptáte uživatelů Linuxu na defragmentaci, obvykle vás odbude s tím, že v pořádných souborových systémech se podobné věci nedějí. Faktem je, že časem vzniká nějaká fragmentace všude. Otázkou pak zůstává, jak se jí jednoduše a bezbolestně zbavit. My vám nabídneme univerzální a rychlé řešení.

Za tip na užitečnou utilitu děkuji Tonymu.

V roce 2006 jsme se zabývali defragmentací v článku Proč Linux nepotřebuje defragmentaci?. Článek rozebírá nenáročnou formou způsob, jakým Linux předchází fragmentaci. Popsali jsme především rozdílný přístup systému FAT a ExtFS, kde je propastný rozdíl nejvíce vidět.

Fragmentace? Určitě?

Ačkoliv jsou už z návrhu moderní souborové systémy vůči fragmentaci velmi odolné, v určitých situacích se jí už prostě nevyhnou. Dochází k tomu především ve chvíli, kdy pracujeme na téměř zaplněném disku.

Fragmentace se v Linuxu objevuje až ve chvíli, kdy je disk zaplněn natolik, že už není dostatek prostoru pro data, která k souborům přidáváme. Ty pak musejí být rozděleny na více částí. Nestává se to ale až do chvíle, než máme disk zaplněný řekněmě z 80 %.

Každý souborový systém se tak dříve či později musí uchýlit k rozdělování (fragmentování) souborů do menších bloků. Některé jsou sice problematičtější než jiné (FAT), ale po letech aktivního používání téměř zaplněného disku začne každý uživatel přemýšlet nad tím, zda by nebylo dobré fragmentaci alespoň překontrolovat.

Co s tím?

Existuje několik různých pokusů o implementaci linuxového defragmentačního nástroje. My se však podíváme na jedno velmi použitelné a především univerzální řešení.

Balíček pyfragtools nabízí trefně pojmenovanou utilitku defrag, která je napsána v Pythonu a stará se právě o analýzu a defragmentaci souborů. Balíček stačí stáhnout a rozbalit. Potřebovat budete jen jeden zmíněný soubor a samozřejmě také nainstalovaný Python.

Co umí?

Velkou výhodou pyfragtools je už zmíněná univerzálnost. Prográmek totiž pracuje na úrovni souborů, a tak je schopen defragmentovat libovolný souborový systém, který je schopno připojit vaše jádro.

Jaký souborový systém v Linuxu používáte?

Defragmentační algoritmus by měl nad daty proběhnout několikrát, autor doporučuje pět až deset cyklů, při kterých dochází k postupnému zlepšování stavu. Účinnost ale není zaručena na sto procent a v některých případech program prostě se soubory nedokáže pohnout.

Podle autora je defragmentace velmi bezpečná a nezanechává po sobě žádné stopy. Vše lze provádět za plného provozu. Program si i při přerušení činnosti za sebou uklízí a pokud by došlo k větším problémům (havárii), zůstaly by po něm jen adresáře .defrag, které stačí najít a smazat.

Malý praktický test

Rozhodl jsem se vyzkoušet účinnost programu na vlastních datech. Použil jsem při tom svůj adresář /src/, který má v současnosti 2,3 GB v 6026 souborech. Je to adresář plný balastu a obsahuje spoustu různě velkých balíků, adresáře s rozbalenými zdrojovými kódy, stažené archivy a podobně.

Nejprve si můžete pustit samotnou analýzu pomocí parametru -a. Analýza je prováděna i na začátku každé defragmentace. Pokud ale nepoužijete zmíněný parametr, bude program pokračovat úpravou dat.

Samotná analýza vypadá následovně:

# ./defrag -a /src/

Building list of files to analyze... done!
/ /src/ [==================           ]  3675/6026 ( 61.0%)

Analyze finished. 4.9 % fragmentation (297 files), 56.6 average frags/MB 

Celá akce trvá jen několik desítek sekund, v závislosti na velikosti dat a rychlosti vašeho disku. Výsledkem je informace o tom, že je můj adresář fragmentován přibližně z pěti procent a na každý megabajt připadá průměrně přes padesát fragmentů.

Samotnou defragmentaci pak spustíme příkazem bez parametrů:

# ./defrag /src/

Proběhne analýza, kterou jsme už viděli, a program je připraven k samotné akci. Narazil jsem na jeden problém, na který je třeba upozornit. Po prvním pokusu o spuštění defragmentace vypisoval program u každého zpracovaného souboru následující hlášku:

Error defragmenting. Did the file disappear? 

Chvíli jsem v kódu pátral po příčině a zjistil jsem, že aplikace ke svému běhu vyžaduje program rsync. Stačilo stejnojmenný balíček nainstalovat a nadále vše probíhalo bez problému.

Nyní se nás utilitka zeptá, kolik cyklů budeme chtít nad daty provést. Předvoleno je číslo deset, takže stačí stisknout enter. Autor tvrdí, že pokud nebude stačit deset cyklů, pak nemá smysl jich dělat víc. Moje zkušenost říká, že většina práce proběhne během prvních dvou až tří pokusů.

How many passes to run? [10]

Pass 1 of 10, 127/297 (22%): 8.5 frags/MB /src/dfly-1.10.0_REL.iso
        1858343 100%   12.01MB/s    0:0
    Improved: (26.7 --> 4.1) 

Program bude postupně vypisovat, jak se mu povedlo který soubor upravit. U některých napíše „improved“, což znamená, že došlo ke zlepšení. Občas uvidíte také „No improvement“, kterým vám bude oznámeno, že tady to prostě nejde. Ideálně pak program nahlásí „Fully defragmented!“, což je známka toho, že tady je už hotovo a soubor je zcela defragmentován.

S každým průchodem pak klesá počet souborů, na kterých utilita pracuje. Jsou samozřejmě vyřazovány ty, které jsou již úplně defragmentované. U mě vypadaly počty v deseti cyklech takto:

297 → 77 → 47 → 40 → 37 → 37 → 36 → 36 → 36 → 36

Všech deset průběhů pak u mě trvalo přesně osm minut. Jak vidíte, první kolo mělo největší úspěch a podařilo se defragmentovat tři čtvrtiny fragmentovaných souborů. Další téměř polovina pak padla při druhém průchodu, ale pak už úspěšnost prudce klesala, přičemž posledních šest kol nemělo v podstatě smysl.

Nakonec defrag vypíše statistiku úspěšnosti:

Frags/MB Before:     16813.44
Frags/MB After:      32.77
Improvement:         99.8 %
=============================== 

Vidíte, že došlo k výraznému zlepšení a program byl úspěšný na slušných 99.8 %. Potvrdí se to i ve chvíli, kdy necháme udělat novou analýzu.

CS24_early

# ./defrag -a /src/

Analyze finished. 1.3 % fragmentation (81 files), 0.6 average frags/MB 

Podobné úspěchy měl program i při aplikaci na další disky s různou mírou fragmentace. V prvním případě je fragmentace obrovská a úspěšnost je pochopitelně vyšší. Druhý příklad ukazuje naopak poměrně nefragmentova­ný disk.

Frags/MB Before:         1042401.55
Frags/MB After:          9336.18
Improvement:             99.1 %

Frags/MB Before:         121125.74
Frags/MB After:          1659.15
Improvement:             98.6 % 

Závěrem

Ačkoliv o nich uživatelé obvykle ani neví, i v Linuxu existují defragmentační nástroje. Hodí se vám zejména na velmi frekventovaných discích, které jste zvyklí plnit „až po okraj“. Dobrým příkladem může být disk, na který ukládáte data stahovaná třeba bittorrentem. Tam je pohyb malých souborů velmi častý a souborové systémy tím trpí. Teď už ale víte, jak se s fragmentací poprat.

Byl pro vás článek přínosný?

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.