Кіріспе

the gene Linux ядросының ext2 файлдық жүйесі немесе екінші кеңейтілген файлдық жүйесі – Linux ядросы үшін жасалған файлдық жүйе. Ол бастапқыда француздық бағдарламалық жасақтаманы жасаушы Реми Кардпен кеңейтілген файлдық жүйенің (ext) орнын басу мақсатымен құрастырылған. BSD-ден шыққан Берклидің жылдам файлдық жүйесінің принциптеріне сәйкес жасалғандықтан, ол Linux үшін алғашқы коммерциялық деңгейдегі файлдық жүйе болды. Ext2-нің канондық іске асырылуы – Linux ядросындағы "ext2fs" файлдық жүйе драйвері. Әр түрлі сапа мен толықтығы бар басқа да іске асырулар GNU Hurd, MINIX 3, кейбір BSD ядроларында, MiNT, Haiku және үшінші тараптан Microsoft Windows және macOS (FUSE арқылы) драйверлерінде кездеседі. Бұл драйвер Linux 6.9 нұсқасында ext4 драйверінің пайдасына ескірген деп жарияланды, себебі ext4 драйвері ext2 файлдық жүйелерімен жұмыс істейді. Linux ядросы ext4-тің журналсыз режимін қолдайды, ол ext2-де жоқ артықшылықтарды ұсынады, мысалы, үлкен файл және том көлемдері.

Тарих

Linux ядросының бастапқы дамуы MINIX операциялық жүйесінде кросс-өндіріс ретінде жүзеге асырылды. MINIX файлдық жүйесі Linux-тың алғашқы файлдық жүйесі ретінде пайдаланылды. Minix файлдық жүйесі көбінесе қателерден таза болды, бірақ ішкі түрде 16 биттік смещениелерді қолданды, осылайша оның максималды көлемі 64 мегабайтпен шектелді, сондай-ақ файл атауының ұзындығы 14 символмен шектелді. Осы шектеулерге байланысты Linux үшін жаңадан құрылған файлдық жүйені ауыстыру жұмыстары басталды. Жаңа файлдық жүйелерді қосуды жеңілдету және жалпы файлдық API-ды қамтамасыз ету үшін Linux ядросына виртуалды файлдық жүйе қабаты VFS қосылды. Кеңейтілген файлдық жүйе (ext) 1992 жылдың сәуір айында VFS API-ды қолданатын алғашқы файлдық жүйе ретінде шығарылды және Linux 0.96c нұсқасына енгізілді. ext файлдық жүйесі Minix файлдық жүйесіндегі екі маңызды мәселені шешті (максималды бөлімнің мөлшері және файл атауының ұзындығы 14 символмен шектелуі), сонымен қатар 2 гигабайт деректерге және 255 символға дейінгі файл атауларын пайдалануға мүмкіндік берді. Бірақ ол әлі де кемшіліктері бар еді: файлға қол жеткізу, inode-ты өзгерту және деректерді өзгерту үшін жеке-жеке уақыт белгілерін қолдау болмады. Осы мәселелерді шешу үшін 1993 жылдың қаңтарында Linux ядросы 0.99 үшін екі жаңа файлдық жүйе әзірленді: xiafs және екінші кеңейтілген файлдық жүйе (ext2), блок драйверіндегі шектеулер ext2 файлдық жүйелерінің максималды файл мөлшері 2 ТиБ-қа тең екенін білдіреді. ext2 файлдық жүйесін жүктемелі USB флэш-дискілерде және басқа да қатты күйдегі жад құрылғыларында сақтау ұсынылады. ext2, журналдау файлдық жүйелеріне қарағанда аз жазу операцияларын жасайды, себебі журналдау болмайды. Флэш-чиптің тозуының басты факторы – өшіру циклдерінің саны, ал өшіру циклдері жазу кезінде жиі орын алатындықтан, жазулардың азаюы қатты күйдегі құрылғының қызмет ету мерзімін ұзартады. Флэш-құрылғылардағы файлдық жүйелер үшін тағы бір жақсы тәжірибе – сол себепті noatime орнату опциясын пайдалану. Linux ядросы 6.9 нұсқасынан бастап ext2fs драйвері қолданыстан шығарылды және әдепкі конфигурацияда енді қосылмайды. Оның басты себебі – 2038 жылдан кейінгі күндерді қолдамауы. Пайдаланушыларға ext4 нұсқасына өту ұсынылады.

ext2 деректері

Ext2-дегі кеңістік блоктарға бөлінеді. Бұл блоктар Unix файлдық жүйедегі цилиндрлік топтарға ұқсас, блоктар тобына біріктірілген. Үлкен файлдық жүйеде әдетте мыңдаған блоктар болады. Кез келген файлдың деректері, мүмкіндігі шектес болса, бір блоктар тобының ішінде орналасады. Бұл үлкен көлемдегі үздірілімді деректерді оқығанда дискіні іздеу санын азайту үшін жасалады. Әрбір блоктар тобында суперблок пен блоктар тобының сипаттамалық кестесінің көшірмесі болады, ал барлық блоктар топтарында блоктардың биттік картасы, inode-тардың биттік картасы, inode кестесі және соңында деректер блоктары болады. Суперблок операциялық жүйені жүктеу үшін өте маңызды ақпаратты қамтиды. Сондықтан файлдық жүйеде бірнеше блоктар тобында қосымша көшірмелер жасалады. Дегенмен, көбінесе жүктеу кезінде файлдық жүйенің бірінші блогында орналасқан оның алғашқы көшірмесі ғана қолданылады. Топтың сипаттамасы блоктардың биттік картасының, inode-тардың биттік картасының орналасқан жерін және әрбір блоктар тобының inode кестесінің басталуын сақтайды. Бұл деректер топтық сипаттамалық кестеде сақталады.

Тізімдер

Әрбір каталог – каталог жазбаларының тізімі. Әрбір каталог жазбасы бір файл атауын бір inode нөмірімен байланыстырады және inode нөмірінен, файл атауының ұзындығынан және файл атауының нақты мәтінінен тұрады. Файлды табу үшін каталогта файл атауы бойынша бастапқыдан соңына қарай іздеу жүргізіледі. Ұқсас өлшемдегі каталогтар үшін бұл жеткілікті. Бірақ өте үлкен каталогтар үшін бұл тиімсіз, сондықтан ext3 каталогтарды сақтаудың екінші тәсілін (HTree) ұсынады, ол жай ғана файл атаулары тізімінен тиімдірек. Түбірлік каталог әрқашан екінші inode нөмірінде сақталады, осылайша файлдық жүйе коды оны орнату кезінде таба алады. Ішкі каталогтар, ішкі каталогтың атауын атау өрісінде және ішкі каталогтың inode нөмірін inode өрісінде сақтау арқылы іске асырылады. Қатты сілтемелер бір файл атауымен бірдей inode нөмірін сақтау арқылы жасалады. Файлға кез келген атаумен қол жеткізу бірдей inode нөміріне, демек, бірдей деректерге әкеледі. Арнайы каталогтар «.» (ағымдағы каталог) және «..» (жоғары каталог) каталогта «.» және «..» атауларын сақтау арқылы іске асырылады, ал inode өрісінде ағымдағы және жоғары каталогтардың inode нөмірлері болады. Бұл екі жазбаның ерекшелігі – олар кез келген жаңа каталог жасалғанда автоматты түрде құрылады және оларды жоюға болмайды.

Деректерді бөлу

Жаңа файл немесе каталог құрылғанда, ext2 деректерді қайда сақтау керектігін анықтауы керек. Егер диск көбінесе бос болса, деректерді кез келген жерге сақтауға болады. Бірақ, байланысты деректерді кластерлеу іздеу уақытын азайтып, өнімділікті арттырады. ext2 әрбір жаңа каталогты оның бас каталогы орналасқан топқа орналастыруға тырысады, себебі бас каталог пен оның ішіндегі каталогтарға бір-бірімен тығыз байланысты қолжетімділік болуы мүмкін деген болжам бар. Сондай-ақ, ext2 файлдарды олардың каталог жазбаларымен бір топқа орналастыруға ұмтылады, өйткені каталогтарға қолжетімділік көбінесе файлдарға қолжетімділікке алып келеді. Дегенмен, егер топ толып кетсе, жаңа файл немесе жаңа каталог басқа бос топқа орналастырылады. Каталогтар мен файлдарды сақтау үшін қажетті дерек блоктары дерек бөлу картасынан табылады. Инодтар кестесіндегі қажетті бос орын инодтарды бөлу картасынан табылады.

Файл жүйесіне қойылатын шектеулер

+ Linux-тағы ext2 жүйесінің теориялық шектері Блок мөлшері: 1 КиБ 2 КиБ 4 КиБ 8 КиБ ең көп файл көлемі: 16 ГиБ 256 ГиБ 2 ТиБ 2 ТиБ ең көп файлдық жүйенің көлемі: 4 ТиБ 8 ТиБ 16 ТиБ 32 ТиБ Ext2 жүйесінің кейбір шектерінің себебі – деректердің файл форматы және операциялық жүйенің ядросы. Көбінесе бұл факторлар файлдық жүйе құрылғанда бір рет анықталады. Олар блок мөлшеріне және блоктар мен inode-тар санының арақатынасына байланысты. Linux-та блок мөлшері архитектуралық бет мөлшерімен шектеледі. Сондай-ақ, 2 ГиБ-тан үлкен файлдарды өңдей алмайтын кейбір қолданушы бағдарламалары бар. Егер b – блок мөлшері болса, файлдың ең үлкен көлемі i блок құрылымына (бірнеше тікелей/тікелей емес EXT2 N БЛОК массиві) және i блоктарына (32 биттік бүтін сан) байланысты min(((b/4)³ + (b/4)² + b/4 + 12) × b, (2³² − 1) × 512) арқылы шектеледі, себебі i блоктары файлдағы 1024 байттық (1 килобайт) "блоктардың" санын көрсетеді. Байланыс санының шегіне байланысты, ішкі каталогтардың ең көп саны 31998-ге жетеді. Ext2 жүйесінде каталогтарды индекстеу мүмкін емес, сондықтан көптеген файлдары бар (>10,000) каталогтармен жұмыс істеуде өнімділік мәселелері туындайды. Каталогтағы файлдардың теориялық лимиті 1.3 × 10²⁰ құрайды, бірақ бұл нақты жағдайларда маңызды емес. Ескерту: Linux 2.4 және одан бұрынғы нұсқаларында блок құрылғылары 2 ТиБ-қа дейін шектелген, бұл бөлімнің ең үлкен мөлшерін, блок мөлшеріне қарамастан, шектейді.

Сығуды кеңейту

e2compr – файлдарды файлдық жүйе арқылы қысу және ашу үшін Linux ядросындағы ext2 драйверіне енгізілген өзгеріс, бұл ретте пайдаланушы қолданбаларынан қолдау күтілмейді. e2compr – ext2-ге жасалған шағын түзету. e2compr тек қана реттелген файлдарды қысады; әкімшілік деректер (суперблок, inode-тар, каталог файлдары және т.б.) қауіпсіздік мақсатында қысылмайды. Қысылған блоктарға оқу және жазу операциялары үшін қолжетімділік беріледі. Қысу алгоритмі және кластердің мөлшері әрбір файл үшін жеке анықталады. Каталогтарды да қысу үшін белгілеуге болады, мұндай жағдайда каталогта жаңа құрылған әрбір файл сол кластер мөлшерімен және каталог үшін көрсетілген сол алгоритммен автоматты түрде қысылады. e2compr – жаңа файлдық жүйе емес. Бұл EXT2 COMPR FL белгісін қолдау үшін жасалған ext2-ге енгізілген түзету ғана. Ол пайдаланушыдан жаңа бөлім жасауды талап етпейді және қолданыстағы ext2 файлдық жүйелерін оқуға немесе жазуға мүмкіндік береді. Мұны қарапайым оқу және жазу процедуралары үшін gzip немесе compress сияқты қарапайым құралдармен жасалған файлдарға қол жеткізудің бір жолы деп қарастыруға болады. Қысылған және қысылмаған файлдар ext2 бөлімдерінде үйлесімді түрде сақталады. e2compr-дың соңғы нұсқасы Linux 2.4, 2.6 және 3.0 нұсқалары үшін қолжетімді. Linux 3.0 үшін соңғы түзету 2011 жылдың тамызында жарық көрді және көп ядролы және үлкен жадты қолдауды қамтамасыз етеді. Linux 2.0 және 2.2 нұсқалары үшін де нұсқалар бар.

Басқа операциялық жүйелерде

Microsoft Windows жүйесінде ext2 бөлімдеріне қол жеткізу ext2ifs немесе ext2Fsd сияқты орнатылатын файлдық жүйе арқылы жүзеге асырылады. macOS жүйесінде Filesystem in Userspace қолданылуы мүмкін.