Hlavní navigace

Defragmentace disků v Linuxu

Petr Krčmář

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.

Našli jste v článku chybu?

7. 1. 2008 2:07

Dík za motivaci, taky jsem všude slyšel, že Linux nepotřebuje fragmentovat nebo co... a já už mám na jednom disku 17% fragmentaci. :-) Hned, jak bude čas, tak to využiju.

26. 1. 2008 22:16

JardaP (neregistrovaný)
Pri zaplneni disku uvolni NTFS pul prostoru predalokovaneho pro MFT. Pokud to nestaci, uvolni pul zbytku a tak dale, az kam muze. Kdyz pak dojde k uvokneni disku a NTFS potrebuje zvetsit MFT, udela to, kde je misto. Pokud mate disk, ktery bezi casto na hranici kapacity, muzete mit MFT rozhazene na disku po malych kousich (ja mel jednou asi 4, vic se mi nepovedlo). Defragmentovat MFT nelze jinak, nez znovuvytvorenim FS. Otazka je, jak dalece hrozny dopad ma fragmentace MFT na vykon.
Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Měšec.cz: Komu musí od ledna zvýšit mzdu?

Komu musí od ledna zvýšit mzdu?

Vitalia.cz: Vychytané vály a válečky na vánoční cukroví

Vychytané vály a válečky na vánoční cukroví

DigiZone.cz: ČRo rozšiřuje DAB do Berouna

ČRo rozšiřuje DAB do Berouna

120na80.cz: 5 nejčastějších mýtů o kondomech

5 nejčastějších mýtů o kondomech

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu