Defragmentimine

**Defragmentimine** on protsess, mis vähendab failide killustatust kõvakettal. Seda tehakse füüsiliselt andmete ümbertõstmisel andmekandjal. Samuti üritatakse defragmentimisel tekitada üht või mitut suuremat vaba ala, kuhu tulevasi andmeid kirjutada. Osad defragmentimise tööriistad üritavad hoida väikseid faile ühes kaustas, kuna tihtipeale loetakse neid faile järjest.

Defragmentimine on kasulik elektromehaaniliste kõvakettaste jaoks. Kui kõvaketta lugemispea peab liikuma ühest kõvaketta punktist teise, et lugeda ühte faili on kogu protsess aeglasem kui andmed järjestikku kirjutatud failide lugemisel.

## Killustatuse põhjused
Killustatus tekib siis, kui faili süsteem ei saa või ei eralda piisavalt ruumi, et salvestada fail ühes täielikkus üksuses. Selle asemel pannakse fail kõvakettal asuvatesse lünkadesse, teiste failide vahele. Kui see juhtub suurte failidega või mitmete failidega siis see võib kaasa tuua ka jõudluse kao. Defragmentimine üritab eemaldada sellised probleemid.

### Näide

Vaatleme järgnevat näidet paremal asuva pildi abil. 
Tühi kõvaketas on tekitanud kümne ühiku suurused plokid. Seejärel on kettale salvestatud järjestikku andmed A-st kuni E-ni, kus iga andmefail kasutab tervet kümmet ühikut kõvaketta plokist (näide 1 pildil). Juhul kui B andmed kustutataks, on võimalik kaks stsenaariumit. Kas liigutatakse kõik failid, mis jäid kettale, järjestikku ploki A järgi või märgitakse plokk B vaba ruumina, kuhu edaspidi uued failid kirjutada. Tihtipeale on järelejäänud faile liiga palju ja nende kõigi liigutamine oleks liiga ajakulukas. Seepärast märgitakse enamasti kustutatud failide plokid vaba ruumina (näide 2 pildil). Kui nüüd tahetakse kirjutada kettale uus fail F, mis on 6 ühikut pikk, siis see fail kirjutatakse kustutatud faili B kümne ühiku plokki, kuhu jääb veel 4 ühikut vaba ruumi (Näide 3 pildil). Kui vajatakse kirjutusruumi nelja ühiku suurusele G failile, siis see kirjutatakse F faili järele (näide 4 pildil). Kui nüüd tekkis vajadus suurendada faili F mahtu siis samasse plokki kirjutamiseks ei ole ruumi. Sellest tulenevalt tekivad järgmised faili kirjutamis võimalused:
# Kirjutame suurenenud mahuga faili F uude üksteisele järgnevasse plokki. See ei oleks võimalik kui kettal ei asu ühtegi vajaliku suurusega järjestikust plokki. Ning fail F võib olla nii suur, et vajalik operatsioon võtaks liiga kaua aega.
# Liigutame failile F järgnenud failid kaugemale, et tekitada failile F piisavalt ruumi. See operatsioon on samuti tihtipeale liiga ajakulukas.
# Salvestame faili F suurenenud mahu kuhugi ketta teise plokki ja märgime, et see fail F on osalt salvestatud mujale (näide 5 pildil). See protsess hoiab salvestamisel aega hulgaliselt kokku, kuid sellise meetodiga salvestades on varsti väga palju väikseid failijuppe. Lugemise teeb see salvestamismeetod üsna aeglaseks, sest kõvakettas peab mitme erineva koha pealt seda faili lugema. 

Killustatus ei tähenda ainuüksi seda, et üksik fail asub mitmes erinevas kohas kõvakettal. Tihti loetakse grupp andmeid kindlas järjekorras (näiteks kindlad failid, mida programm vajab laadimiseks, selleks võivad olla meediafailid mängu jaoks) mida võib lugeda killustatuks kui nad ei asu kõvakettal järjestikus. Isegi kui need üksikud failid ise ei ole killustatud siis kõvaketta lugemispea peab ikkagi otsima need failid kõvakettalt üles. Mõningad failirühmad võivad olla isegi esialgu järjest salvestatud, kuid killustuvad kui faile kustutatakse nende failigrupist. Failide uuendused on väga tavalised killustatuse põhjused. Kuna faili uuendamiseks tavaliselt kustutatakse vanad failid kõigepealt ja siis salvestatakse uued andmed vanade asemele. Kuigi enamik failisüsteeme ei kirjuta uusi faile samasse füüsilisse asukohta, kuhu taheti. Seetõttu täituvadki vabad lüngad kõvakettal mitmesuguste teiste failidega. Windowsis kasutusel olev defragmenter eeldab, et samas kaustas olevad failid võivad olla teineteisega seoses ja neid vajatakse lugemisel koos.

Kõvaketta defragmentimiseks kasutatakse defragmentimise tarkvara. Kuid see tarkvara võib faile ringi paigutada ainult kõvaketta vaba osa ulatuses. See on väga intensiivne operatsioon ja seda ei ole võimalik läbi viia kettal kus on vähe või ültsemitte vaba ruumi. Defragmentsiooni ajal on süsteemi jõudlus piiratud ja kõige parem oleks kui arvutis ei tehtaks midagi niikaua kui protsess käib. Seda selleks, et defragmentimine ei satuks segadusse, kui failisuurused üllatuslikult muutuvad. Olenevalt programmi algoritmist võib suuremat kasu saada mitmekordsest järjestikusest defragmentimisest.
## Killustatuse vastumeetmed

Andmete killustatuse vähendamiseks kasutatakse kõvaketta partitsioneerimist nii, et pidevalt loetavad ja kirjutatavad failid salvestatakse tihti kustutavatest failidest kaugemale. Näiteks Temp-kaust ja veebibrauseri vahemälu, kuhu tekivad tuhanded failid, mis kustutatakse mõne päeva pärast. Kui kasutaja profiilid hoitakse eraldi partitsioonil (nagu seda on UNIX-i operatsioonisüsteemis, kus profiilid on salvestatud /var partitsiooni), siis defragmentimine toimub kiiremini kuna siis ei pea töötlema kettal alalisel asetsevaid faile. Kui partitsioonis toimub vähe salvestamist, siis defragmentimisprogramm ei pea järgmine kord nii palju faile töötlema.  

## Kasutaja ja jõudluse probleemid
Tänapäevastes mitme kasutajaga operatsioonisüsteemides ei ole tavakasutajal kõvaketta defragmentimise õigust. Defragmentimiseks on vaja andministraatori õigusi. Samuti on kasutusel failisüsteemid nagu NTFS mis on kujundatud sedasi, et vähendada killustatuse teket. Täiustused moodsates kõvaketastes nagu näiteks RAM-vahemälu, kiirem plaadi pöörlemine püüavad vähendada killustatuse mõju, kuid suurenenud andmehulkade kasutus on need tasakaalustanud. Mahtude kasv üldkasutatavates kõvaketastes on aidanud kaasa killustatuse vähendamisele, kuna pooltühjad kõvakettad killustuvad vähem kui täis salvestatud kettad. Samuti omab suure mahuga kõvakettal sama suur partitsioon vähem silindreid ja seega aitab kaasa kiiremale andme ligipääsule. 

### Flash mälud vs tavalised kõvakettad
Kui andmeid loetakse tavaliselt kõvakettalt siis kõigepealt peab kontroller aeglaselt paigutama lugemispea õigele rajale ja sis ootama, kuna ketta õige koht jõuab lugemispeani. Pooljuhtkettad loevad andmeid mikrokiipidest ja seetõttu on nad kiiremad kuna neis puuduvad liikuvad osad. Seega on defragmentimine pooljuhtketaste puhul ebasoodne. Pealegi on pooljuhtketaste limiteerivaks teguriks see, et neile saab kirjutada kindel arv kordi. Seega on defragmentimine isegi kahjulik pooljuhtketastele. 

## Windowsi süsteemitaaste punktid võivad kustuda defragmentimise käigus
Enamus defragmentimise programmid ja optimeerijad võivad Microsoft Shadow Copy vanimad taastepunktid kustutada. Kuna Shadow Copy peab meeles suurte failide liigutamist defragmentija poolt, siis võib Shadow Copyle antud maht ületada lubatud norme ja tänu sellele kustuda vanu taastepunkte niikaua, kuni etteantud maht saavutatud.

## Defragmentimine ja optimeerimine
Lisaks defragmentimisele programmi faile, vähendab defragmentimise tööriist ka teiste programmide laadimiskiiruseid. Näiteks Windows 9x defragmentijas on kaasatud Intel Application Launch Accelerator, mis optimeerib programmid kettal, pannes defragmenditud programmid ja nendest sõltuvad programmid laadimise järjestuses. Kõvaketta välimised rajad suudavad andmeid edastada kiiremini. Sellepärast paigutatakse tihti kasutatavad failid välistele radadele, et parandada jõudlust. Kolmanda poole defragmentimise tööriist nagu näiteks MyDefrag, viib tihti kasutatavad failid välistele radadele ja siis alles defragmendib need.

## Defragmentimise viisid failitüüpide järgi
* FAT – MS-DOS 6.x ja Windows 9x süsteemid tulevad koos sellise defragmentimise tööriistaga nagu Defrag. DOS versioonis on piiratud kasutamisega Norton SpeedDisk defragmentija. Selle versioon mis tuli koos Windows 9x oli litsentseeritud Symantec Corporationilt ja versioon mis tuli koos Windows 2000 ja XP-ga oli litsentseeritud Condusiv Technologiesilt.
* NTFS – oli tutvustatud koos Windows NT 3.1-ga, kuid NTFS failisüsteem ei omanud siis ühtegi seadmedraiverit ja seetõttu ei olnud seal ka defragmentimise võimalust. Windows NT 4.0-ga tuli kaasa kolmanda osapoole defragmentimise rakendusliidesed. Kuid ühtegi defragmentimise tööriista ei olnud lisatud. Windwos 2000, Windows XP ja Windows Server 2003 omasid defragmentimise tööriista, mis oli Diskeeperi baasil, see tööriist kasutas ära eelnevalt lisatud defragmentimise rakendusliidest. Windwos Vista, Windows 7 ja Windows 8 defragmentimise tööriist oli rohkesti täiendatud ja omas uut kasutajaliidest. Samuti on saadaval kolmanda osapoolte defragmentimise tööriistu Microsoft Windows operatsioonisüsteemidele.
* BSD UFS ja eriti FreeBSD kasutavad sisemist ümberjagajat, mis otsib võimalust killustatust vähendada hetkel, kui andmeid salvestatakse kettale. See suudab efektiivselt hoida süsteemi degradeerumisest pikaajalisel kasutusel.
* Linux ext2, ext3 ja ext4 – sarnaselt UFS-failisüsteemiga kasutavad lahendusi, mis püüavad hoida ära killustatust jooksvalt. Sellest tulevnevalt ei ole defragmentimine enamjaolt vajalik. Ext2 kasutab e2defrag-defragmentimistööriista, mis rakendub arvuti väljalülitamisel. See tööriist aga ei ühildu ext2 järeltulija ext3 failisüsteemiga. Ext3-s kasutatakse teisi failisüsteemist sõltumatuid defragmentimise tööriistu, mis töötavad ka tahapoole ühilduvas ext4-s. Tänapäeval on võimalik kasutada e4defrag defragmentimise tööriista ext4 failisüsteemis.
* VxFS – see failisüsteem omab fsadm-tööriista, kuhu on lisatud defragmentimise tööriist.
* JFS – omab defragfs tööriista IBM operatsioonisüsteemides.
* HFS Plus – seda failisüsteemi kasutas Mac OS 8.1, mis toodi turule aastal 1998. Selles failisüsteemis on kasutusel mitmed optimeerimisalgoritmid ning seetõttu eraldi defragmentimise tööriista pole. Faile püütakse defragmentida samal ajal kui neid kasutatakse. See toob endaga kaasa mitmeid piiranguid failide defragmentimiseks (kaasaarvatud maksimum failisuurus 20 MB). Koos OS X 10.3 väljalaskega on võimalus kasutada iDefrag defragmentimise tööriista Coriolis Systemsi poolt. 
* WAFL – see failisüsteem on kasutusel NetAppi ONTAP 7.2 operatsioonisüsteemis ja selles on võimalik suuri faile defragmentida käsuga reallocate.
* XFS – omab internetipõhist defragmentimise tööriista xfs_fsr.
* SFS – on võimeline faile defragmentima isegi siis, kui failisüsteem on kasutusel.
* ADFS – failisüsteem, mis oli kasutusel RISC OS ja varastes Acorn Computersites. Siin hoitakse faile killustumast jooksvalt ja seetõttu ei vaja käsitsi defragmentimist.

## Kirjandus

* Norton, Peter (1994) *Peter Norton's Complete Guide to DOS 6.22*, page 521 – Sams (ISBN 067230614X)
* Woody Leonhard, Justin Leonhard (2005) *Windows XP Timesaving Techniques For Dummies, Second Edition* page 456 – For Dummies (ISBN 0-764578-839).
* Jensen, Craig (1994). *Fragmentation: The Condition, the Cause, the Cure*. Executive Software International (ISBN 0-9640049-0-9).
* Dave Kleiman, Laura Hunter, Mahesh Satyanarayana, Kimon Andreou, Nancy G Altholz, Lawrence Abrams, Darren Windham, Tony Bradley and Brian Barber (2006) *Winternals: Defragmentation, Recovery, and Administration Field Guide* – Syngress (ISBN 1-597490-792)
* Robb, Drew (2003) *Server Disk Management in a Windows Environment* Chapter 7 – AUERBACH (ISBN 0849324327)

## Viited

## Välislingid
* The Big Windows 7 Defragmenter Test Benchmarks of popular defrag utilities
* Microsoft Windows XP defragmentation – How to schedule a weekly defragmentation
* Microsoft Windows 2000 Professional and Server defragmentation – How to schedule defragmentation
* SST Hard Disk Optimizer
* How Linux avoids making files fragmented
* How defragmentation was changed for Windows 7
* Complete list of Defragmentation Utilities for Windows
* Does Your SSD's File System Affect Performance?