Кіріспе
Көптеген Unix және Unix-ке ұқсас операциялық жүйелерде қолданылатын файлдық жүйе, сондай-ақ кейбір Unix және BSD операциялық жүйелеріндегі файлдық жүйенің іске асылуы. BSD FFS-тің мақсаты – байланысты дерек блоктары мен метадеректерді бір цилиндрлік топта, ал ең жақсысы, каталогтың барлық мазмұнын (барлық файлдар үшін деректер мен метадеректерді) бір немесе жақын орналасқан цилиндрлік топта орналастыруға тырысу, осылайша каталогтың мазмұнын бүкіл дискіге шашыратудан туындаған фрагментацияны азайту. Суперблоктағы өнімділік параметрлерінің кейбіреулеріне жолдар мен секторлардың саны, дискінің айналу жылдамдығы, оқу басының жылдамдығы және жолдар арасындағы секторлардың сәйкестігі кіреді. Толықтай оңтайландырылған жүйеде оқу басы жақын жолдар арасында жылжуы мүмкін, ал дискінің айналуын күтіп, кезектесіп орналасқан жолдардан шашыраңқы секторларды оқуға болады. Дискілердің көлемі үлкендеген сайын сектор деңгейіндегі оңтайландыру ескірді (әсіресе сызықтық сектор нөмірлеуді және жол бойынша өзгеретін секторларды қолданған дискілер үшін). Үлкен дискілер мен үлкен файлдар пайда болғанда фрагменттелген оқулар үлкен мәселеге айналды. Бұған қарсы күресу үшін BSD бастапқыда файлдық жүйе блогының көлемін 4.0 BSD-де бір сектордан 1 КБ-қа дейін ұлғайтты; ал FFS-де файлдық жүйе блогының көлемін 1 КБ-тан 8 КБ-қа дейін ұлғайтты. Бұл бірнеше әсерге ие. Файлдың секторларының тізбектес болу ықтималдығы әлдеқайда артады. Файлдың блоктарын тізімдеуге кеткен қосымша шығындар азаяды, ал белгілі бір блоктар санымен бейнеленетін байттардың саны көбейеді. Дискілердің үлкен көлемі де мүмкін болады, өйткені блоктардың максималды саны белгілі бір бит енімен шектеледі. Алайда, үлкен блоктармен көптеген кішкентай файлдары бар дискілер орынды ысыраптайды, өйткені әрбір файл кем дегенде бір блокты алуы керек. Осыған байланысты BSD блок деңгейіндегі фрагментацияны енгізді, сондай-ақ блоктардың қосалқы бөлуі, құйрық біріктіруі немесе құйрық жинағы деп те аталады, онда бірнеше файлдардан алынған соңғы толық емес дерек блогы бірнеше бос блоктардың орнына бір «фрагмент» блогында сақталуы мүмкін. Беркли FFS бойынша жұмыс басқа Unix өндірушілерімен кеңінен қабылданды, ал одан туындаған файлдық жүйелер отбасы UFS деп белгілі.
the file system implementation in some Unix and BSD operating systems
The intent of BSD FFS is to try to localize associated data blocks and metadata in the same cylinder group and, ideally, all of the contents of a directory (both data and metadata for all the files) in the same or nearby cylinder group, thus reducing fragmentation caused by scattering a directory's contents over a whole disk. Some of the performance parameters in the superblock included number of tracks and sectors, disk rotation speed, head speed, and alignment of the sectors between tracks. In a fully optimized system, the head could be moved between close tracks to read scattered sectors from alternating tracks while waiting for the platter to spin around. As disks grew larger and larger, sector level optimization became obsolete (especially with disks that used linear sector numbering and variable sectors per track). With larger disks and larger files, fragmented reads became more of a problem. To combat this, BSD originally increased the filesystem block size from one sector to 1 K in 4.0 BSD; and, in FFS, increased the filesystem block size from 1 K to 8 K. This has several effects. The chance of a file's sectors being contiguous is much greater. The amount of overhead to list the file's blocks is reduced, while the number of bytes representable by any given number of blocks is increased. Larger disk sizes are also possible, since the maximum number of blocks is limited by a fixed bit width block number. However, with larger block sizes, disks with many small files will waste space, since each file must occupy at least one block. Because of this, BSD added block level fragmentation, also called block suballocation, tail merging, or tail packing, where the last partial block of data from several files may be stored in a single "fragment" block instead of multiple mostly empty blocks. The work on Berkeley FFS was widely adopted by other Unix vendors, and the family of filesystems derived from it are collectively known as UFS.
Қолданылу
SunOS / Solaris, System V Release 4, HP UX және Tru64 UNIX сияқты кейбір меншік Unix жүйелерінің және illumos сияқты ашық Unix туынды жүйелерінің жеткізушілері UFS-ті қабылдады. Олардың көпшілігі UFS-ті өздерінің мақсаттарына бейімдеп, басқа сатушылардың Unix нұсқалары танымауы мүмкін меншік кеңейтулерін қосты. Көптегендер бастапқы блок өлшемін және деректер өрісінің енін бастапқы UFS ретінде пайдалануды жалғастырды, сондықтан платформалар арасында оқуға үйлесімділік белгілі бір дәрежеде сақталады. Жалпы алғанда, іске асырулардың үйлесімділігі нашар. Solaris 7-ден бастап Sun Microsystems UFS Logging-ті енгізді, ол UFS-ке файлдық жүйенің журналын қосты, ол әлі күнге дейін Solaris және illumos-тың қазіргі нұсқаларында бар. Solaris UFS-те үлкен файлдар мен үлкен дискілер үшін кеңейтулер және басқа да мүмкіндіктер бар. 4.4BSD және одан алынған BSD Unix жүйелерінде, мысалы FreeBSD, NetBSD, OpenBSD және DragonFlyBSD, UFS1 және UFS2 іске асыру екі қабатқа бөлінеді: жоғарғы қабат каталог құрылымын қамтамасыз етеді және метадеректерді қолдайды (рұқсаттар, меншік және т.б.) inode құрылымында, ал төменгі қабаттар inode ретінде іске асырылған деректер контейнерлерін қамтамасыз етеді. Бұл дәстүрлі FFS және LFS журналды құрылымдалған файл жүйесін ортақ функциялар үшін ортақ кодпен қолдау үшін жасалды. Жоғарғы қабат "UFS", ал төменгі қабаттар "FFS" және "LFS" деп аталады. Осы жүйелердің кейбіреулерінде "FFS" термині FFS төменгі қабаты мен UFS жоғарғы қабатының комбинациясына қолданылады, ал "LFS" термині LFS төменгі қабаты мен UFS жоғарғы қабатының комбинациясына қолданылады. Кирк Маккусик блоктарды қайта бөлуді іске асырды, бұл файл жүйесіндегі блоктар жазулар аяқталғанға дейін қайта реттеп, фрагментацияны азайту және файл жүйесінің ескіруін бақылау үшін. Ол сонымен қатар файл жүйесінің тұрақтылығын сақтайтын, бірақ өнімділікті дәстүрлі синхрондау режимінде шектемейтін жұмсақ жаңартуларды енгізді. Бұл файл жүйесін апат немесе электр қуатының бұзылуынан кейін тексеруді азайтады. Ақаудан кейін қалған мәселелерді шешу үшін fsck пайдалы бағдарламасы енгізілді. UFS2-де Кирк Маккусик пен Пол Хеннинг Камп FreeBSD FFS және UFS қабаттарын 64 биттік блок сілтемелерін (көлемдерді 8 зебибайтқа дейін өсіруге мүмкіндік береді), өзгермелі өлшемді блоктарды (шығарылымдарға ұқсас), кеңейтілген жалаушалар өрістерін, қосымша "туған күн" мөртабандарын, кеңейтілген атрибуттарды қолдауды және POSIX1 ACL-дарын қосу үшін кеңейтті. UFS2 FreeBSD 5.0-ден бастап қолдайтын UFS нұсқасы болды. FreeBSD сонымен қатар UFS1 және UFS2 үшін файл жүйесінің снэпшоттарын жасау мүмкіндігімен қатар, жұмсақ жаңартуларды енгізді. Бұл NetBSD-ге көшірілді, бірақ ақыр соңында жұмсақ жаңартулар (NetBSD-дегі жұмсақ тәуелділіктер деп аталады) NetBSD 6.0-ден WAPBL деп аталатын (одан әрі журналға жазу деп аталады) файл жүйесін журналға жазудың күрделі емес механизмі пайдасына алынып тасталды, ол NetBSD 5.0-де FFS-ке қосылды. OpenBSD 2.9 нұсқасынан бастап жұмсақ жаңартуларды қолдайды және 4.2 нұсқасынан бастап UFS2 (FFS2) қолдауы бар (ACL жоқ). OpenBSD қазір UFS2 UFS-тің әдеттегі нұсқасын жасады және 6.7 нұсқасына қосылады. FreeBSD 7.0-ден бастап UFS файл жүйесі GEOM провайдерін пайдалану арқылы журналға жазуды қолдайды. FreeBSD 9.0 бағдарламасында жұмсақ жаңартулар (SU+J) үстінде жеңіл журнал жазуға қолдау қосылды, бұл фондық fsck және NFSv4 ACL қажеттілігін едәуір азайтады. FreeBSD, NetBSD, OpenBSD және DragonFly BSD-де Иан Доузи әзірлеген Dirhash жүйесі бар. Бұл жүйе каталогтарды жылдам іздеу үшін жадыда хэш-кесте жасайды. Dirhash UFS-тегі үлкен каталогтармен байланысты бірқатар өнімділік мәселелерін жеңілдетеді. Linux-та UFS-ті басқа Unix-термен оқу деңгейінде үйлесімділік үшін енгізу бар, бірақ UFS-ке жеткізуші кеңейтулері үшін стандартты енгізу болмағандықтан, Linux-та UFS-ке жазу үшін толық қолдау жоқ. Туған Linux ext2 файл жүйесі UFS1-ден шықты, бірақ фрагменттерді қолдамайды және жұмсақ жаңартуларды енгізу жоспарланбаған. (Бірнеше 4.4BSD-ден алынған жүйелерде UFS қабаты ext2 қабатын контейнер қабаты ретінде пайдалана алады, дәл FFS және LFS пайдаланатыны сияқты.) NeXTStep, ол BSD-ден алынған, сонымен қатар UFS нұсқасын қолданды. Apple-дің Mac OS X-інде HFS+, олардың меншік файл жүйесіне балама ретінде қол жетімді болды. Алайда Mac OS X Leopard-тан бастап Mac OS X-ті UFS пішіміндегі томға орнату мүмкін емес болды. Сонымен қатар, UFS пішімделген томдарға орнатылған Mac OS X-тің ескі нұсқаларын Leopard-қа жаңарта алмайсыз; жаңарту үшін бастау томын қайта пішімдеу қажет. Mac OS X-те UFS форматталған дискілер үшін 4 ГБ файл шектелген. Mac OS X Lion-нан бастап UFS қолдау толығымен тоқтатылды.