Ta težava je še posebej očitna pri magnetnih medijih, čeprav trpijo tudi trdi diski. V tem prispevku poskusimo defragmentirati datotečni sistem XFS.
Nastavitev peskovnika
Najprej sem se za eksperimentiranje z datotečnim sistemom XFS odločil, da namesto dela s kritičnimi podatki na disku ustvarim preizkusno ploščo. Ta preizkusna plošča je sestavljena iz VM Ubuntu, na katerega je povezan navidezni disk, ki zagotavlja surovo shrambo. VirtualBox lahko uporabite za ustvarjanje VM in nato ustvarite dodaten disk, ki ga želite pritrditi na VM
Pojdite v nastavitve VM in pod Nastavitve → Shramba V razdelku lahko dodate nov disk v krmilnik SATA, lahko ustvarite nov disk. Kot je prikazano spodaj, vendar poskrbite, da bo vaš VM izklopljen, ko to storite.
Ko je nov disk ustvarjen, vklopite VM in odprite terminal. Ukaz lsblk seznam vseh razpoložljivih blokovnih naprav.
$ lsblksda 8: 0 0 60G 0 disk
├─sda1 8: 1 0 1M 0 del
└─sda2 8: 2 0 60G 0 del /
sdb 8:16 0 100G 0 disk
sr0 11: 0 1 1024M 0 rom
Poleg glavne blokovne naprave sda, tam, kjer je nameščen OS, je zdaj nova naprava sdb. Na hitro ustvarimo particijo iz nje in jo formatiramo z datotečnim sistemom XFS.
Odprite ločeni pripomoček kot korenski uporabnik:
$ razdeljeno -optimalno / dev / sdbNajprej ustvarimo particijsko tabelo z uporabo mklabel, temu sledi izdelava ene particije iz celotnega diska (velikosti 107 GB). Lahko preverite, ali je particija narejena tako, da jo navedete z ukazom za tiskanje:
(ločeno) mklabel gpt(ločeno) mkpart primarni 0 107
(razdeljen) tisk
(ločeno) nehaj
V redu, zdaj lahko z uporabo lsblk vidimo, da je pod napravo sdb nova blokovna naprava, imenovana sdb1.
Oblikujmo to shrambo kot xfs in jo pritrdimo v imenik / mnt. Ponovno naredite naslednja dejanja kot root:
$ mkfs.xfs / dev / sdb1$ mount / dev / sdb1 / mnt
$ df -h
Zadnji ukaz bo natisnil vse nameščene datotečne sisteme in lahko preverite, ali je / dev / sdb1 nameščen na / mnt.
Nato zapišemo kup datotek kot lažne podatke, ki jih bomo tu defragmentirali:
$ dd, če = / dev / urandom od = / mnt / myfile.txt štetje = 1024 bs = 1024Zgornji ukaz bi napisal datoteko myfile.txt velikosti 1 MB. Ta ukaz lahko samodejno pretvorite v preprosto for zanko z uporabo basha in ustvarite več takih datotek. Če želite, jih razporedite po različnih imenikih. Nekaj jih naključno izbrišite. Vse to naredite znotraj datotečnega sistema xfs (nameščenega na / mnt) in nato preverite, ali je razdrobljenost. Vse to je seveda neobvezno.
Defragmentirajte svoj datotečni sistem
Najprej moramo ugotoviti, kako preveriti količino razdrobljenosti. Na primer, datotečni sistem xfs, ki smo ga prej ustvarili, je bil v vozlišču naprave / dev / sdb. Za preverjanje stopnje razdrobljenosti lahko uporabimo pripomoček xfs_db (pomeni razhroščevanje xfs).
$ xfs_db -c frag -r / dev / sdb1Oznaka -c zajema različne ukaze, med katerimi je ukaz frag za preverjanje stopnje razdrobljenosti. Oznaka -r se uporablja za zagotovitev, da je operacija v celoti samo za branje.
Če ugotovimo, da je v tem datotečnem sistemu razdrobljenost, na vozlišču naprave zaženemo ukaz xfs_fsr:
$ xfs_fsr / dev / sdb1Ta zadnji ukaz je vse, kar potrebujete za defragmentiranje vašega datotečnega sistema, lahko ga dodate kot cronjob, ki bo redno nadziral vaš datotečni sistem. Toda to za xfs nima smisla. Dodelitev XFS na podlagi obsega zagotavlja, da je težav, kot je razdrobljenost, čim manj.
Uporabite zadeve
Primeri uporabe, pri katerih morate biti najbolj zaskrbljeni zaradi fragmentacije datotečnega sistema, vključujejo aplikacije, v katere se napiše in prepiše veliko majhnih kosov podatkov. Baza podatkov je klasičen primer tega in zbirke podatkov so znane po tem, da v svojem pomnilniku puščajo veliko "lukenj". Pomnilniški bloki se ne polnijo dosledno, zato je količina razpoložljivega prostora sčasoma manjša in manjša.
Težava nastane ne le v smislu zmanjšane uporabne površine, temveč tudi v smislu zmanjšanega števila IOPS, ki bi lahko škodoval učinkovitosti vaše aplikacije. Imeti skript za nenehno spremljanje stopnje razdrobljenosti je konzervativen način vzdrževanja sistema. Ne želite, da samodejni skript naključno začne defragmentirati vaš datotečni sistem, še posebej, če se uporablja pri največji obremenitvi.