Този проблем е особено очевиден при магнитните носители, въпреки че SSD също страдат от него. Нека се опитаме да дефрагментираме XFS файлова система в тази публикация.
Настройка на пясъчника
Първо, за да експериментирам с файловата система XFS, реших да създам testbench, вместо да работя с критични данни на диск. Този testbench е съставен от виртуална машина на Ubuntu, към която е свързан виртуален диск, осигуряващ сурово съхранение. Можете да използвате VirtualBox за създаване на виртуална машина и след това да създадете допълнителен диск, който да прикачите към виртуалната машина
Просто отидете в настройките на вашата VM и под Настройки → Съхранение раздел можете да добавите нов диск към SATA контролера можете да създадете нов диск. Както е показано по-долу, но се уверете, че вашата виртуална машина е изключена, когато направите това.
След като създадете новия диск, включете VM и отворете терминала. Командата lsblk изброява всички налични блокови устройства.
$ lsblksda 8: 0 0 60G 0 диск
├─sda1 8: 1 0 1M 0 част
└─sda2 8: 2 0 60G 0 част /
sdb 8:16 0 100G 0 диск
sr0 11: 0 1 1024M 0 rom
Освен основното блоково устройство sda, където е инсталирана операционната система, сега има ново sdb устройство. Нека бързо да създадем дял от него и да го форматираме с файлова система XFS.
Отворете разделителната програма като основен потребител:
$ разделен -оптимално / dev / sdbНека първо създадем таблица на дяловете, използвайки mklabel, след което следва създаването на един дял от целия диск (който е с размер 107GB). Можете да проверите дали дялът е направен, като го изброите с помощта на командата за печат:
(разделен) mklabel gpt(разделен) mkpart първичен 0 107
(разделен) печат
(разделен) напусна
Добре, сега можем да видим с помощта на lsblk, че под устройството sdb има ново блоково устройство, наречено sdb1.
Нека форматираме това хранилище като xfs и го монтираме в / mnt директория. Отново направете следните действия като root:
$ mkfs.xfs / dev / sdb1$ mount / dev / sdb1 / mnt
$ df -h
Последната команда ще отпечата всички монтирани файлови системи и можете да проверите дали / dev / sdb1 е монтиран на / mnt.
След това пишем куп файлове като фиктивни данни за дефрагментиране тук:
$ dd, ако = / dev / urandom на = / mnt / myfile.txt брой = 1024 bs = 1024Горната команда ще напише файл myfile.txt с размер 1MB. Можете да автоматизирате тази команда в обикновен for цикъл с помощта на bash и да генерирате повече такива файлове. Разпространете ги в различни директории, ако искате. Изтрийте няколко от тях на случаен принцип. Направете всичко това във файловата система xfs (монтирана на / mnt) и след това проверете за фрагментация. Всичко това, разбира се, не е задължително.
Дефрагментирайте вашата файлова система
Първото нещо, което трябва да направим, е да разберем как да проверим размера на фрагментацията. Например, xfs файловата система, която създадохме по-рано, беше на устройството node / dev / sdb. Можем да използваме помощната програма xfs_db (означава xfs отстраняване на грешки), за да проверим нивото на фрагментация.
$ xfs_db -c frag -r / dev / sdb1Флагът -c приема различни команди, сред които е командата frag за проверка на нивото на фрагментация. Флагът -r се използва, за да се увери, че операцията е изцяло само за четене.
Ако установим, че има някаква фрагментация в тази файлова система, изпълняваме командата xfs_fsr на възела на устройството:
$ xfs_fsr / dev / sdb1Тази последна команда е всичко за дефрагментиране на вашата файлова система, можете да добавите това като cronjob, който редовно ще наблюдава вашата файлова система. Но това да се прави за xfs няма много смисъл. Разпределението на XFS, основано на степента, гарантира, че проблеми като фрагментацията остават до минимум.
Случаи на употреба
Случаите на използване, при които най-много трябва да се тревожите за фрагментацията на файловата система, включват приложения, при които се записват и пренаписват много малки парчета данни. Базата данни е класически пример за това и базите данни са известни с това, че оставят много и много „дупки“ във вашето хранилище. Блоковете памет не се запълват непрекъснато, което прави количеството налично пространство все по-малко с времето.
Проблемът възниква не само по отношение на намаленото полезно пространство, но и по отношение на намаленото IOPS, което може да навреди на производителността на вашето приложение. Наличието на скрипт за непрекъснато наблюдение на нивото на фрагментация е консервативен начин за поддържане на системата. Не искате автоматизиран скрипт да започне произволно да дефрагментира вашата файлова система, особено когато се използва при пиково натоварване.