Кіріспе
Журналды файл жүйесі
XFS – 1993 жылы Silicon Graphics, Inc (SGI) компаниясы жасаған жоғары өнімді 64 биттік журналды файл жүйесі. Бұл SGI-нің IRIX операциялық жүйесінде 5.3 нұсқасынан бастап стандартты файл жүйесі болды. XFS 2001 жылы Linux ядросына көшірілді; 2014 жылдың маусымына қарай XFS көптеген Linux дистрибутивтерімен қолдалады; Red Hat Enterprise Linux оны әдепкі файл жүйесі ретінде пайдаланады. XFS параллель кіріс/шығыс (I/O) операцияларын орындаудағы жоғары тиімділігімен ерекшеленеді, бұл оның құрылымына байланысты, ол бөлімдерге негізделген (XFS қолданылатын физикалық томдардың бір бөлігі, сондай-ақ AG деп қысқартылады). Осының арқасында XFS бірнеше физикалық сақтау құрылғысын пайдаланғанда I/O өрімдерінің, файл жүйесінің өткізу қабілетінің, сондай-ақ файлдар мен файл жүйесінің мөлшерінің шексіз кеңеюін қамтамасыз етеді. XFS деректердің дұрыстығын метадеректерді журналға жазу және жазу кедергілерін қолдау арқылы қамтамасыз етеді. Бос орынды бөлу B+ ағаштарында сақталатын дерек құрылымдары бар кеңейтімдер арқылы жүзеге асырылады, бұл файл жүйесінің жалпы өнімділігін жақсартады, әсіресе үлкен файлдармен жұмыс істегенде. Кешіктірілген бөлу файл жүйесінің фрагментациясын болдырмауға көмектеседі; онлайн дефрагментация да қолдалады. XFS-ке тән ерекшелік – I/O өткізу қабілетін алдын ала белгіленген жылдамдықпен бөлу мүмкіндігі; бұл көптеген нақты уақыт қосымшалары үшін өте қолайлы. Дегенмен, бұл мүмкіндік тек IRIX жүйесінде және арнайы жабдықпен ғана қолдау көрсетілді.
Тарих
Силикон Графикасы 1993 жылы XFS ("X" кейіннен толтырылуы керек еді, бірақ ешқашан толтырылмаған) әзірлеуді бастады. Файл жүйесі 1999 жылдың мамырында GNU General Public License (GPL) лицензиясы бойынша жарияланды. Стив Лорд басқарыған команда оны Linux-қа көшірді, ал Linux дистрибутивтері арасында алғашқы қолдау 2001 жылы болды. Бұл қолдау біртіндеп дерлік барлық Linux дистрибутивтерінде қолжетімді болды. Linux ядросында XFS-ке алғашқы қолдау SGI-дан шыққан түзетулер арқылы келді. Ол 2.6 сериясы үшін Linux ядросының негізгі бөлігіне енгізілді және 2004 жылдың ақпанында 2.4.25 нұсқасында 2.4 сериясына жеке қосылды, бұл XFS-ті Linux жүйелерінде кеңінен қолжетімді етті. Gentoo Linux 2002 жылдың ортасында XFS-ті әдепкі файл жүйесі ретінде енгізуге мүмкіндік берген алғашқы Linux дистрибутиві болды. FreeBSD 2005 жылдың желтоқсанында XFS-ті тек оқу режимінде қолдады, ал 2006 жылдың маусымында тәжірибелік жазу режимінде қолдау қосты. Дегенмен, бұл Linux-тан көшуға көмек ретінде ғана қарастырылды, "негізгі" файл жүйесі ретінде емес. FreeBSD 10 XFS қолдауын жойды. 2009 жылы Red Hat Enterprise Linux (RHEL) Linux дистрибутивінің 5.4 нұсқасы XFS файл жүйелерін құру және пайдалану үшін қажетті ядролық қолдауға ие болды, бірақ тиісті командалық қатар құралдары болмады. CentOS-тан қолжетімді құралдар осы мақсатта қолданылуы мүмкін болды, ал Red Hat оларды RHEL клиенттеріне сұраныс бойынша ұсынды. 2010 жылы жарық көрген RHEL 6.0, Red Hat-тың "кеңейтілген файл жүйесіне қосымша" бөлігі ретінде XFS қолдауын ақылы қызмет ретінде ұсынды. 2011 жылы жарық көрген Oracle Linux 6 XFS-ті пайдалану опциясын қамтиды. 2014 жылдың маусымында жарық көрген RHEL 7.0 XFS-ті әдепкі файл жүйесі ретінде пайдаланады, соның ішінде /boot бөлімі үшін XFS қолдауын қамтиды, бұл бұрын GRUB жүктеуішінің қателеріне байланысты мүмкін емес еді. 2016 жылдың тамызында Linux ядросының 4.8 нұсқасы "кері бейнелеу" атты жаңа мүмкіндікті қосты. Бұл жоспарланған мүмкіндіктердің кең спектріне негіз болды: снэпшоттар, жазу кезінде көшіру (COW) деректері, деректерді дубликаттан тазарту, рефликті көшірмелер, деректер мен метадеректерді онлайн тазарту, деректердің жоғалуы немесе нашар секторлар туралы жоғары дәлдікпен хабарлау және зақымдалған немесе бұзылған файл жүйелерін жақсарту. Бұл жұмыс XFS-тің дискідегі форматын өзгертуді қажет етті. 2020 жылдың желтоқсанында жарық көрген Linux ядросы 5.10 "bigtime" енгізді, бұл inode уақыт белгілерін дәстүрлі 32 биттік секунд санауының орнына 64 биттік наносекунд санауы ретінде сақтауға мүмкіндік береді. Бұл 2038 жылғы мәселені 2486 жылға дейін ықпалдастырады.
Қуаттылығы
XFS – 64 биттік файлдық жүйе, және оның ең жоғары көлемі 8 эксибайттан бір байт кем (263 − 1 байт) болуы мүмкін, бірақ хост операциялық жүйесінің шектеулері осы көлемді кішірейте алады. 32 биттік Linux жүйелері файлдың және файлдық жүйенің көлемін 16 тебибайтқа дейін шектейді.
Күнделік жазу
Қазіргі заманғы есептеу техникасында журналдау – электр қуатының кез келген үзілісі немесе жүйелік қателікке қарамастан, файлдық жүйедегі деректердің дұрыстығын қамтамасыз ететін мүмкіндік. XFS файлдық жүйенің метадеректері үшін журналдауды қамтамасыз етеді, онда файлдық жүйенің жаңартулары нақты дискілік блоктар жаңартылғанға дейін тізбекті журналға жазылады. Журнал – файлдық жүйенің қалыпты жұмысы кезінде оқылмайтын дискілік блоктардың айналмалы буфері. XFS журналы файлдық жүйенің дерек бөлімінде (ішкі журнал ретінде) немесе дискідегі бәсекелестікті азайту үшін жеке құрылғыда сақталуы мүмкін. XFS-те журнал негізінен файлдық жүйе операцияларының нәтижесінде өзгерген дискілік блоктардың бөліктерін сипаттайтын жазбаларды қамтиды. Орындалу жылдамдығын төмендетпеу үшін журналдық жаңартулар асинхронды түрде жүзеге асырылады. Жүйелік қателік болған жағдайда, қателікке дейін орындалған файлдық жүйе операциялары журналда тіркелгендей қайта қолданылып, аяқталуы мүмкін, осылайша XFS файлдық жүйелерінде сақталған деректер дұрыс күйінде қалады. Қалпына келтіру, жүйелік қателіктен кейін файлдық жүйе алғаш рет орнатылғанда автоматты түрде жүзеге асырылады. Қалпына келтіру жылдамдығы файлдық жүйенің көлеміне емес, қайта қолданылатын файлдық жүйе операцияларының санына байланысты.
Бөлшек топтары
XFS файлдық жүйелер ішкі түрде бөлу топтарына бөлінеді, олар файлдық жүйе ішіндегі тең өлшемді сызықтық аймақтар болып табылады. Файлдар мен каталогтар бөлу топтарын басып өтуі мүмкін. Әрбір бөлу тобы өз инодтары мен бос орынды жеке басқарады, бұл масштабталуға және параллелизмге мүмкіндік береді, сондықтан бірнеше жіптер мен процестер бір файлдық жүйеде бір уақытта I/O операцияларын орындай алады. Бұл архитектура көп процессорлы және/немесе ядролы жүйелерде параллель I/O өнімділігін оңтайландыруға көмектеседі, себебі метадеректерді жаңарту да параллельделуі мүмкін. Бөлу топтарымен қамтамасыз етілген ішкі бөлу, файлдық жүйе бірнеше физикалық құрылғыларға тараған кезде, жатқарылатын сақтау компоненттерінің өнімділігін оңтайлы пайдалануға мүмкіндік береді, бұл ерекше пайдалы болуы мүмкін.
Сызықты бөлу
Егер XFS файлдық жүйе жолақты RAID массивінде құрылатын болса, файлдық жүйе құрылған кезде жолақтың өлшемі көрсетілуі мүмкін. Бұл деректерді, инодтарды бөлу және ішкі журналды (журналды) жолақтың өлшемімен сәйкестендіру арқылы өнімділікті максималды деңгейге көтереді.
Аумақтылық бойынша бөлу
XFS файлдық жүйелерде сақталатын файлдарда қолданылатын блоктар өзгермелі ұзындықтағы экстенттермен басқарылады, онда бір экстент бір немесе бірнеше тікелей блоктарды сипаттайды. Бұл, файлдың барлық блоктарын жеке-жеке тізімдейтін файлдық жүйелермен салыстырғанда, блоктар тізімін едәуір қысқарта алады. Блокқа бағытталған файлдық жүйелер кеңістікті бөлуді бір немесе бірнеше блокқа бағытталған биттік карталармен жүзеге асырады; XFS-де бұл құрылымдар әр файлдық жүйеге арналған бөлу тобы үшін B+ ағаштарынан тұратын экстентке бағытталған құрылыммен алмастырылады. B+ ағаштарының біреуі бос экстенттердің ұзындығы бойынша, ал екіншісі бос экстенттердің бастапқы блогы бойынша индекстеледі. Бұл екі еселі индекстеу схемасы файлдық жүйе операциялары үшін бос экстенттерді тиімді бөлуге мүмкіндік береді.
Блоктардың өзгермелі өлшемі
Файл жүйесінің блок мөлшері – ең кішкентай бөліну бірлігін көрсетеді. XFS файлдық жүйелерді 512 байттан 64 КБ-қа дейінгі блоктармен құруға мүмкіндік береді, осы арқылы файлдық жүйені күтілетін қолдану деңгейіне сәйкес реттеуге болады. Егер көптеген кішкентай файлдар күтілсе, кішкентай блок мөлшері әдетте сыйымдылықты арттырады, бірақ көбінесе үлкен файлдармен жұмыс істейтін жүйе үшін үлкен блок мөлшері өнімділік тиімділігін жақсартады.
Келесіге ауысу
XFS файлдарды бөлу үшін жалқау бағалау әдістерін пайдаланады. Файл буферлік жадқа жазылғанда, деректерге экстенттерді бөлудің орнына, XFS жадыда сақталған деректерге қажетті файл жүйесі блоктарын резервтейді. Нақты блоктарды бөлу деректер дискіге құйылғанда ғана жүзеге асады. Бұл файлдың біріктірілген блоктар тобында жазылу ықтималдығын арттырады, фрагментация мәселелерін азайтады және өнімділікті жоғарылатады.
Файлдар таратпау
XFS әрбір файл үшін 64 биттік сирек адрестік кеңістік қамтамасыз етеді, бұл өте үлкен файл өлшемдеріне, сондай-ақ файлдардың ішінде дискілік орын бөлінбеген "бос кеңістіктерге" мүмкіндік береді. Файл жүйесі әр файл үшін ауқым картасын пайдаланғандықтан, файлдық бөлу картасының мөлшері шағын болып сақталады. Егер бөлу картасының көлемі inode-да сақтау үшін тым үлкен болса, онда карта B+ ағашына көшіріледі, бұл файлға берілген 64 биттік адрестік кеңістіктегі кез келген дерекке жылдам қол жеткізуді қамтамасыз етеді.
Кеңейтілген атрибуттар
XFS файлдар үшін бірнеше дерек ағынын қамтамасыз етеді; бұл кеңейтілген атрибуттарды іске асыру арқылы мүмкін болады. Олар файлға тіркелген атау/мәні жұптарын сақтауға мүмкіндік береді. Атаулар – ұзындығы 256 байтқа дейін болатын, нөлдік символмен аяқталатын, басып шығаруға болатын таңбалар тізбегі, ал оларға сәйкес мәндер 64 КБ дейін екілік деректерді қамтуы мүмкін. Олар екі кеңістікке бөлінеді: түбірлік (root) және пайдаланушы (user). Түбірлік кеңістікте сақталған кеңейтілген атрибуттарды тек суперпайдаланушы ғана өзгерте алады, ал пайдаланушы кеңістігіндегі атрибуттарды файлға жазуға рұқсаты бар кез келген пайдаланушы өзгерте алады. Кеңейтілген атрибуттарды кез келген XFS inode түріне – символдық сілтемелерге, құрылғы түйіндеріне, каталогтарға және т.б. – қосуға болады. attr утилитасы кеңейтілген атрибуттарды командалық жолдан басқару үшін қолданылады, ал xfsdump және xfsrestore утилиталары кеңейтілген атрибуттарды таниды және олардың мазмұнын сақтық көшірмелеп, қалпына келтіреді. Көптеген басқа сақтық көшірме жүйелері кеңейтілген атрибуттармен жұмыс істеуді қолдамайды.
Тікелей I/O
Дискіге жоғары өнімділік талап ететін қолданбалар үшін XFS тікелей I/O мүмкіндігін ұсынады, ол кэштелмеген I/O операцияларын тікелей пайдаланушы кеңістігіне жіберуге мүмкіндік береді. Деректер қосымшаның буфері мен дискі арасында DMA арқылы тасымалданады, бұл негізгі дискілік құрылғылардың толық I/O еніне қол жеткізуді қамтамасыз етеді.
Кепілдікті мөлшерлемесі бар I/O
XFS кепілдік берілген жылдамдықты I/O жүйесі файлдық жүйеге енгізу жолағын резервтеуге мүмкіндік беретін API ұсынады. XFS негізгі сақтау құрылғыларынан қолжетімді өнімділікті динамикалық түрде есептейді және белгілі бір уақытқа қажетті өнімділікті қамтамасыз ету үшін жеткілікті енгізу жолағын резервтейді. Бұл XFS файлдық жүйесіне тән ерекшелік. Кепілдік берілген жылдамдықтар "қатты" немесе "жұмсақ" болуы мүмкін, бұл сенімділік пен өнімділік арасындағы айырбас. Алайда, XFS негізгі сақтау жүйесі қолдаса ғана "қатты" кепілдіктерге рұқсат береді. Бұл мүмкіндік көбінесе бейне ағыны сияқты нақты уақыт қосымшаларында қолданылады. Кепілдік берілген жылдамдықпен I/O тек IRIX жүйесінде қолдау көрсетілген және осы мақсатқа арналған арнайы аппараттық құралдарды қажет еткен.
DMAPI
XFS, IRIX жүйесінде иерархиялық сақтауды басқаруды қолдау үшін DMAPI интерфейсін іске асырды. 2010 жылдың қазанына қарай, XFS-тің Linux нұсқасы DMAPI-ді іске асыру үшін қажетті дискідегі метадеректерді қолдады, бірақ ядролық қолдау пайдалануға жарамсыз болды деп хабарланды. Біраз уақыт бойы SGI DMAPI байланыстарын қамтитын ядролық ағашқа ие болды, бірақ бұл қолдау тиісінше күтілмеді, алайда ядроны дамытушылар осы қолдауды жаңартуға ниетті екенін мәлімдеді.
Шын-тұрақты суреттер
XFS әлі күнге дейін шұғыл суреттерге тікелей қолдау көрсетпейді, өйткені қазіргі уақытта оның шұғыл суреттерді жасау процесін томдық басқарушы жүзеге асыруы тиіс деп есептеледі. XFS файлдық жүйенің шұғыл суретін жасау үшін xfs freeze утилитасын пайдаланып файлдық жүйеге кіріс-шығысты уақытша тоқтату, томдық басқарушының нақты шұғыл суретті жасауы, содан кейін қалыпты жұмыс істеу үшін кіріс-шығысты қайта бастау қажет. Шұғыл суретті резервтік көшірме жасау мақсатында тек оқу режимінде орнатуға болады. XFS-тің IRIX жүйесіндегі нұсқалары XLV деп аталатын енгізілген томдық басқарушымен бірге келді. Бұл томдық басқарушы Linux-қа көшірілмеді, сондықтан XFS Linux жүйелерінде стандартты LVM-мен жұмыс істейді. Жаңа Linux ядроларында xfs freeze функционалы VFS қабатында іске асырылады және томдық басқарушының шұғыл сурет жасау функциясы шақырылғанда автоматты түрде орындалады. Бұл бір кезде үлкен артықшылық болды, себебі ext3 файлдық жүйесін тоқтату мүмкін болмады және томдық басқарушы ауыр жүктемедегі деректер базасын сақтау үшін тұрақты "ыстық" шұғыл суретті жасауға шамасы жетпеді. Дегенмен, қазір бұл мәселе шешілді. Linux 2.6.29 нұсқасынан бастап ext3, ext4, GFS2 және JFS файлдық жүйелері де тоңазыту мүмкіндігіне ие.
Онлайн-дефрагментация
XFS-тің кеңейтілген табиғаты және оның кідірілген бөлу стратегиясы файлдық жүйенің фрагментация мәселелеріне қарсы тұруын едәуір арттырса да, XFS орнатылған және жұмыс істеп тұрған XFS файлдық жүйесіндегі файлдарды дефрагментациялайтын (xfs fsr, XFS файлдық жүйені қайта ұйымдастырушы) құралды ұсынады.
Онлайн-өсу
XFS файлдық жүйелерді онлайн кеңейту үшін xfs growfs құралын ұсынады. Файл жүйесі орналасқан құрылғыда бос орын болғанша XFS файлдық жүйелерін кеңейтуге болады. Бұл мүмкіндік көбінесе томдық басқарумен бірге қолданылады, әйтпесе файлдық жүйенің орналасқан бөлімін жеке кеңейту қажет болады.
Кемшіліктер
XFS файлдық жүйелерін (2023 жылға дейін) өз орнында қысқарту мүмкін емес, бірақ бірнеше мүмкін шешімдер талқыланды. XFS-тегі метадеректер операциялары кейінірек жасалған журналды жүйелермен салыстырғанда баяу болды және олардың әлдеқайда үлкен журналдармен жұмыс істеуге бағытталғандығынан, мысалы, көптеген файлдарды жою сияқты операциялардың өнімділігі төмендеді. Дегенмен, Джон Нельсон жасаған және 2.6.39 нұсқасынан бастап Linux ядросының негізгі тармағында қолжетімді кешіктірілген жазу функциясы бұл мәселені шешеді деп айтылады; 2010 жылы жасалған әзірлеушінің өнімділік сынақтары көрсеткендей, аз жиектілік санында ext4-ке шамалас, ал көп жиектілік санында одан да жоғары өнімділік деңгейлеріне қол жеткізілді. Журналды өшіруге болмайды. Алайда, XFS оның орнына бөлек блок құрылғысындағы сыртқы журналға жаза алады.