Файлова система

Матеріал з Вікіпедії — вільної енциклопедії.
(Перенаправлено з Файлові системи)
Перейти до навігації Перейти до пошуку

Фа́йлова систе́ма — спосіб організації даних, який використовується операційною системою для збереження інформації як файлів на носіях інформації. Також цим поняттям позначають сукупність файлів та директорій, які розміщуються на логічному або фізичному пристрої.

Процес створення файлової системи називається форматування.

Архітектура[ред. | ред. код]

Поняття файлової системи має декілька рівнів абстракції: логічна файлова система — високорівнева абстракція, яка описує можливості операційної системи для роботи з даними та описує API, яке дозволяє відкривати, зчитувати, записувати та закривати файли, а реалізація цих методів відбувається на нижчих рівнях абстракції.

Віртуальна файлова система — це необов'язковий рівень, який підтримує в операційній системі декілька фізичних файлових систем та надає універсальні методи роботи з ними. Завдяки цьому рівню абстракції існують файлові системи над нефізичними пристроями, як, наприклад, віртуальні файлові системи (procfs, sysfs) та FUSE.

Фізична файлова система — це рівень, який існує як дані на пристроях (дисках, розділах, тощо). Його реалізують драйвери, які працюють з даними. Вони також реалізують механізми, що пришвидшують роботу (буферізація, структури для швидшого пошуку), збільшують надійність (журналювання), вибір блоків, у яких потрібно помістити дані та інше. Переважно коли ми кажемо про різні файлові системи — NTFS, APFS, ext4 — ми маємо на увазі цей рівень.

Класифікація[ред. | ред. код]

Файлових систем існує багато, десятки. Деякі з'явились історично, щоб розв'язувати певні задачі й еволюціонували, або були витісненні іншими. Саме тому існують метадані, властивості, обмеження та особливості, які різні файлові системи підтримують по різному.

Однією з таких властивостей є організація файлів на носії даних. Файлові системи можуть поділятися на:

  • плоскі файлові системи — вони не використовують каталогів. Це ранній етап файлових систем.
  • ієрархічні файлові системи — дозволяють розміщувати файли в каталоги

Залежно від локальности комп'ютера, якому надається доступ до файлів, можна поділити файлові системи на:

  • локальні файловій системи — забезпечують доступ до файлів з носіїв на локальному комп'ютері
  • мережеві файлові системи — забезпечують механізми доступу до файлів однієї машини з інших машин мережі
  • розподілені файлові системи — забезпечують зберігання файлів через їх розподіл між кількома машинами мережі.

Файлові системи можна класифікувати за особливостями носія на:

Для забезпечення надійности та швидкости відновлення в разі збоїв, у деяких файлових системах було впроваджено журналювання. Таким робом файлові системи можна класифікувати як:

Журнальовані файлові системи пишуть, фіксують зміну стану інформації двічі: спершу в журналі дій файлової системи, потім до її належного місця у звичайній файловій системі. Але це допомагає в разі аварійного завершення. Система без журналювання повинна перевірити узгодженість свого стану, зчитуючи весь свій уміст такими програмами, як scandisk, chkdsk або fsck. Залежно від розміру файлової системи на це можна витратити багато часу. З журналюванням до узгодженого стану можна дійти швидше, відтворюючи, перевіряючи зміни по журналу за останній час.

Метадані[ред. | ред. код]

Окрім самих даних у файлах, файлова система зберігає додаткову інформацію про файли. Така інформація називається метаданими.

Приклади метаданих:

  • ім'я файлу або шлях до файлу в ієрархічних файлових системах.
  • розмір — це може бути об'єктивна характеристика, як кількість блоків або байтів. А також може бути заявлений розмір у разі розріджених файлів[en].
  • часові відмітки — коли був створений файл, коли його востаннє змінювали, отримували до нього доступ, архівували або навіть видалили. Залежно від файлової системи гранулярність часової відмітки може бути різною. Від наносекунд до секунд або 2-секундних інтервалів, або доби, а також діапазон можливих значень.
  • інформація про власника, групу власника й права доступу.
  • квоти на використання дискового простору
  • атрибути, які підтримує файлова система, наприклад, чи є файл виконуваним, доступним лише для читання, доступним лише для дозапису (журнал), стисненим, зашифрованим, файл, який потрібно архівувати.
  • атрибути SELinux контексту,
  • окрім звичайних файлів на файловій системі можуть бути присутні об'єкти, які для неї схожі на файли, але поведінка інша, наприклад, у UNIX каталоги — це спеціальний тип файлів. Ще окремі типи файлів — це символьні посилання, файли пристроїв, сокети.

Іменування файлів та каталоги[ред. | ред. код]

Докладніше: Назва файлу

Ім'я (назва) файлу — це рядок символів, що однозначно (унікально) визначає файл у просторі імен файлової системи, зазвичай це в контексті каталогу. Це головний атрибут файлу. Імена файлів будуються з правилами та обмеженнями, які заведені в операційній системі й у файловій системі.

Імена файлів мають обмеження:

  • обмеження імені файлу на довжину. У перших версіях FAT12 і FAT16 використовувався фіксований розмір "8.3", який виділяв 8 байт на ім'я та 3 на розширення. Сучасні файлові системи дозволяють до 255 символів
  • список символів, які недозволені в іменах файлів
  • чутливість до регістру

У UNIX-подібних ОС у назві файлу може використовуватися будь-який символ, за винятком скісної риски, і вони чутливі до регістру.

Назви файлів у Microsoft Windows не є чутливими до регістру. Вимога неповторности та чутливість до регістру тут відіграє роль: якщо файлова система є чутливою до регістру — це, наприклад, файли File.txt FILE.TXT file.txt — це можуть бути різні файли, якщо система не чутлива до регістру. Такі імена відповідають тому самому файлу.

Каталог, директорія, тека або папка — це елемент файлової системи, який допомагає впорядковувати файли.

У такому разі, крім імені файлу потрібно знати й імена каталогів, до яких цей файл належить. Таким чином формується шлях до файлу — перелік каталогів та ім'я файлу, які розділені символом-розділювачем каталогів. UNIX-подібні операційні системи (BSD, Linux, Mac OS X) та AmigaOS використовують як розділювач каталогів символ скісної риски (/), тоді як DOS використовує цей символ для задання додаткових опцій у командному рядку, а як розділювач заведено вживати символ оберненої скісної риски (\). У Microsoft Windows заведена та сама домовленість, за винятком китайської і корейської версій, де розділювачем є знак запитання (?). Версії MacOS до Х використовували як розділювач двокрапку; RISC OS — дефіс.

Розмір[ред. | ред. код]

Розмір файлу — це характеристика файлу скільки блоків, або байтів, він займає.

Файлові системи мають обмеження щодо розміру даних, які вони можуть зберігати. Ці обмеження зазвичай визначаються типовим розміром пристроїв зберігання даних на час розроблення файлової системи, актуальними розмірами структур даних, а також прогнозами на майбутнє. Оскільки розміри накопичувачів даних з початку своєї історії зростають експоненціально (згідно із законом Мура), нові пристрої зберігання даних часто перевищують обмеження файлової системи вже через 10–20 років після її створення. Збільшення ємности також веде до зростання потреб у функціональності та, як наслідок, до ускладнення файлових систем.

У 1980-х це була потреба обробляти дані об'ємами в сотні кілобайт. Файлові системи використовували 8–16 битні структури, які обмежували розмір файлів від сотень кілобайт (256КБ для ADFS) або декількох мегабайт (8МБ для FAT12) до сотень мегабайт.

У 1990-х перехід від 16-бітних до 32-бітних систем, об'єми жорстких дисків виросли від десятків мегабайт до десятків гігабайт. Відомим обмеженням є, наприклад, розмір файлу у 2 або 4 ГБ для файлових систем FAT32.

Файлові системи, що були розроблені після 2000-х, мають 64-бітні структури та їхні обмеження, і поки що перевищують розміри пристроїв, для яких вони були розроблені, наприклад: exFAT (128 ПБ) , NTFS (256 ТБ–8 ПБ), ext4 (1 ЕБ), XFS (8 ЕБ).

Більшість дистрибутивів Лінукс підтримують більшість (або всі) перелічені ФС: ext2, ext3, ext4, Btrfs, ReiserFS, Reiser4, GFS, GFS2, OCFS, OCFS2, NILFS, XFS, JFS, загалом, як і FAT та NTFS.

Microsoft Windows підтримує лише FAT12, FAT16, FAT32, та NTFS. Серед них NTFS є найефективнішою і єдиною, на котру може бути встановлена Windows Vista. Windows Embedded CE 6.0 включає також підтримку ExFAT, призначеної/рекомендованої для роботи на портативних пристроях.

Mac OS X підтримує HFS+ як первинну ФС та кілька інших як допоміжних.

Файлові системи малих носіїв даних[ред. | ред. код]

На додаток усі ці та інші ОС підтримують файлові системи змінних носіїв — FAT12 для дискет, ISO 9660 та UDF (Universal Disk Format) для компакт-дисків та DVD відповідно.

Windows Vista та Linux з ядром версії 2.6 підтримують розширення UDF, які дозволяють перезаписувати вміст DVD як у звичайних дискетах.

Організація простору[ред. | ред. код]

Приклади файлових систем[ред. | ред. код]

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]