Defragmentace disků v Linuxu

Petr Krčmář 7. 1. 2008

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.

Anketa

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.

# ./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.

DigiZone.cz: Budoucnost A/V služeb? Zpoplatněná

Budoucnost A/V služeb? Zpoplatněná

Podnikatel.cz: Přechod z OSVČ na firmu? Totální šok!

Přechod z OSVČ na firmu? Totální šok!

120na80.cz: Velký přehled: 7 očkování proti exotickým nemocem

Velký přehled: 7 očkování proti exotickým nemocem

Podnikatel.cz: Šizený guláš na pultě. Jako Lidl to nedělejte

Šizený guláš na pultě. Jako Lidl to nedělejte

Vitalia.cz: Mražené ryby z Makra byly falšované

Mražené ryby z Makra byly falšované

Vitalia.cz: Muži kouří 24 cigaret denně, ženy o dost míň

Muži kouří 24 cigaret denně, ženy o dost míň

Vitalia.cz: Syndrom PC vidění: stačí dvě hodiny denně

Syndrom PC vidění: stačí dvě hodiny denně

Podnikatel.cz: Když už je sexy, tak ať taky funguje

Když už je sexy, tak ať taky funguje

Vitalia.cz: Tetanus v USA – i po odřeninách

Tetanus v USA – i po odřeninách

Vitalia.cz: Ministerstvo: tyto příbory jsou nebezpečné

Ministerstvo: tyto příbory jsou nebezpečné

Vitalia.cz: Sója a rakovina

Sója a rakovina

120na80.cz: 10 nej přípravků na holení

10 nej přípravků na holení

Vitalia.cz: Děti jsou sportem opotřebované

Děti jsou sportem opotřebované

Lupa.cz: Jak EET vidí ajťák aneb Drahá vražda UX

Jak EET vidí ajťák aneb Drahá vražda UX

120na80.cz: 5 triků, jak zastavit krvácení po holení

5 triků, jak zastavit krvácení po holení

Vitalia.cz: 7 nemocí očí, které musíte léčit včas

7 nemocí očí, které musíte léčit včas

Lupa.cz: Válka e-shopů. Alza končí s Heurekou

Válka e-shopů. Alza končí s Heurekou

Root.cz: Zákon o hazardu je v rozporu s ústavou

Zákon o hazardu je v rozporu s ústavou

Vitalia.cz: Proč máme prasklý chléb nejraději?

Proč máme prasklý chléb nejraději?

Podnikatel.cz: Alza radí e-shopům, jak opustit Heureku

Alza radí e-shopům, jak opustit Heureku