- •Передумови виникнення файлових систем
- •Імена файлів
- •Внутрішня структура файлів
- •Типи файлів
- •Атрибути файлів
- •Операції з файлами
- •Каталоги
- •Системи з однорівневими каталогами
- •Ієрархічні системи каталогів
- •Імена файлів
- •Операції з каталогами
- •Реалізація файлової системи Структура файлової системи
- •Реалізація файлів Неперервне розміщення
- •Реалізація каталогів
- •Типи файлових систем
- •Файлові системи з журнальною структурою
- •Журнальовані файлові системи
- •Віртуальні файлові системи
- •Керування файловою системою
- •Керування дисковим простором
- •Розмір блоку
- •Відслідковування вільних блоків
- •Дискові квоти
- •Резервне копіювання файлової системи
- •Несуперечливість (Однозначність)файлової системи
- •Продуктивність файлової системи Кешування
- •Випереджаюче читання блоку
- •Скорочення обсягу переміщень блоку головок диска
Типи файлових систем
Наведено основні типи файлових систем, їх основні переваги та недоліки, а також те що послугувало поштовхом для їх створення.
Файлові системи з журнальною структурою
При стрімкому рості швидкості центрального процесора, об’єму оперативної пам’яті та дискових накопичувачів, час позиціонування блоку головок на потрібний циліндр диску залишається сталим, що стає причиною того, що у багатьох файлових систем виникає вузьке місце в зростанні продуктивності.
LFS (Log-structured File System) — файлова система з журнальною структурою, яка покликана згладити цю проблему.
В основу LFS закладена ідея про те, що в міру підвищення швидкості роботи центральних процесорів і збільшення обсягу оперативної пам'яті істотно підвищується і рівень кешування дисків. Отже, з'являється можливість задоволення вельми істотної частини всіх дискових запитів на читання прямо з кешу файлової системи без звернення до диску.
В більшості файлових систем запис проводиться дуже малими блоками даних, що є неефективним, оскільки запису на диск, що займає 50 мкс, часто передує позиціонування на потрібний циліндр, на який витрачається 10 мс, і очікування підходу під головку потрібного сектора, на яке йде 4 мс. Для запису файлу повинні бути записані i-вузол для каталогу, блок каталогу, i-вузол для файлу і сам файл. Але якщо відбудеться збій до того, як будуть проведені всі записи, файлова система зіткнеться з серйозними проблемами узгодженості даних. Тому, як правило, записи i-вузлів виробляються негайно.
В основу LFS було покладено ідею структурувати весь диск у вигляді журналу. Періодично, коли в цьому виникає особлива потреба, вся інформація, що очікує здійснення запису, що знаходяться в буфері пам'яті, збирається в один сегмент і записуються на диск у вигляді одного безперервного сегменту в кінець журналу. Таким чином, окремий сегмент може містити i-вузли, блоки каталогу і блоки даних. На початку кожного сегменту знаходиться його зведена інформація, в якій повідомляється, що може бути знайдено в цьому сегменті. Якщо середній розмір сегмента зможе бути доведений приблизно до 1 Мбайт, то буде використовуватися практично вся пропускна здатність диску. Тепер знаходження i-вузла значно ускладнюється, оскільки його адреса не може бути просто вичислена з його i-номера. Для здійснення пошуку i-вузлів ведеться масив i-вузлів, проіндексований по i-номерах. Елемент і в такому масиві вказує на i-вузол на диску. Масив зберігається на диску, але він також піддається кешуванню, тому частини, що найбільш інтенсивно використовуються більшу частину часу будуть знаходитися в пам'яті.
Підсумовуючи все раніше сказане, всі записи спочатку буферизуются в пам'яті, і періодично все, що потрапило в буфер, записується на диск в один сегмент, в кінець журналу. Відкриття файлу тепер складається з використання масиву для визначення місця розташування i-вузла для цього файлу. Після визначення місця розташування i-вузла з нього можуть бути вилучені адреси блоків. А всі блоки будуть в сегментах, розташованих в різних місцях журналу. З часом журнал займе весь диск і нові сегменти не зможуть бути записані в журнал. Проте, багато існуючих сегментів можуть мати вже непотрібні блоки, наприклад, якщо файл перезаписаний, його i-вузол тепер буде вказувати на нові блоки, але його старі блоки все ще будуть займати простір в раніше записаних сегментах. Щоб справитися з цією проблемою, у LFS є очищаючий потік, який займається тим, що здійснює кругове сканування журналу з метою зменшення його розміру. Спочатку він зчитує короткий зміст першого сегменту журналу, щоб побачити, які i-вузли і файли в ньому знаходяться. Потім він перевіряє поточний масив i-вузлів, щоб визначити, чи актуальні ще i-вузли і чи використовуються ще файлові блоки. Якщо вони вже не потрібні, то інформація викидається. Ті i-вузли і блоки, які ще використовуються, переміщуються в пам'ять для запису в наступний сегмент. Потім вихідний сегмент позначається як вільний, і журнал може його використовувати для нових даних. Таким чином очищаючий потік переміщується по журналу, видаляючи позаду застарілі сегменти і поміщаючи всі актуальні дані в пам'ять для їх подальшого повторного запису в наступний сегмент. В результаті диск стає великим кільцевим буфером з пишучим потоком, що додає попереду нові сегменти, і з очищуючим потоком, що видаляє позаду застарілі сегменти.