Video Thumbnail

CS162 Lecture 21: Filesystems 3: Case Studies (Con't), Buffering, Reliability, and Transactions

John Kubiatowicz01:26:51
https://www.youtube.com/watch?v=NpM0n6xBbrA

Содержание

Краткое резюме

  • Файловая система обеспечивает отображение путей файлов на блоки данных на диске через структуры inode и индексы.
  • FAT — простая файловая система с одним уровнем указателей и широко используется в флешках и камерах.
  • BSD UNIX FS (4.1 и 4.2 Fast FS) добавляет многоуровневые индексы и блоки групп для повышения производительности и надежности.
  • NTFS использует мастер-файл-таблицу (MFT) с переменными экстентами, объединяя метаданные и данные, что улучшает эффективность мелких файлов.
  • mmap позволяет отображать файлы в память, упрощая доступ и модификацию данных через операции с памятью.
  • Буферный кеш (buffer cache) в ОС кэширует блоки с диска для повышения скорости, поддерживает отложенную запись (delayed write) для производительности.
  • Для повышения надежности и долговечности данных используются RAID и схемы с избыточностью.
  • Ключевые «-ility» характеристики файловых систем: доступность (availability), долговечность (durability) и надежность (reliability), каждая из которых отвечает за разные аспекты работы системы.

Контекст и основные концепты файловых систем

Файловая система — это набор структур, преобразующих привычные для пользователей пути файлов в конкретные физические блоки данных на диске. В основе лежит разрешение пути через директории к inode (индексному дескриптору), в котором содержится метаданные файла и указатели на блоки.

FAT (File Allocation Table)

  • Самая простая и давняя файловая система (с 1970-х), до сих пор используется в USB, камерах и других устройствах.
  • FAT — это массив, где каждой позиции соответствует блок диска и указатель на следующий блок файла.
  • Файл представлен цепочкой блоков, связанных через FAT.
  • Таблица FAT хранится в заранее определенной области диска, дублируется для надежности.
  • FAT легко реализуется в прошивке, поэтому широко применяется на встраиваемых устройствах.

«FAT — простая файловая система, выдержавшая испытание временем и доступная на большинстве флешек и камер.»


UNIX Berkeley File System (BSD)

Структура inode

  • Содержит метаданные (права, владелец, временные метки, размер).
  • Указатели на данные организованы в многоуровневую структуру:
    • Прямые блоки (10-12 штук), указывающие непосредственно на данные.
    • Косвенные блоки: одинарные, двойные, тройные косвенные — позволяющие адресовать очень большие файлы.

Производительность и размещение

  • 4.1BSD не оптимизировал размещение данных по диску, что привело к постепенному ухудшению производительности из-за фрагментации.
  • Fast File System (FFS, 4.2BSD) внедрил улучшения:
    • Деление диска на группы блоков (block groups), где inode, данные и bitmap свободного пространства размещаются совместно для локальности.
    • Свободное пространство учитывается с резервом ~10%, позволяя находить большие непрерывные области.
    • Внедрены алгоритмы положения блоков, учитывающие вращение диска (skip sectoring).
    • Вводится цилиндрическая группировка (cylinder group) — сборка блок-групп с разных пластин диска.

Преимущества Fast File System

  • Хорошая локальность метаданных и данных для маленьких и средних файлов.
  • Минимизация количества переключений головки по диску благодаря распределению блоков.
  • Более высокая надежность, так как повреждение одной группы вряд ли уничтожит все inode.

Ограничения

  • Эффективность для очень маленьких файлов все еще низкая, поскольку каждый файл требует отдельный inode и минимум один блок данных.
  • Поиск в больших директориях остается линейным в большинстве реализаций.

EXT2 и EXT3 (Linux)

  • Потомки BSD файловой системы.
  • EXT3 добавляет журналирование для повышения надежности.
  • Поддерживаются блоки размером 1K–4K (стандартно 4К).
  • Иерархия директорий и работа с inode усложнены, но принципы аналогичны BSD.

Windows NTFS

  • Переменные размеры экстентов (континуальных участков), а не фиксированные блоки, что позволяет снижать фрагментацию.
  • Мастер-файл-таблица (MFT) — база данных, где каждая запись (обычно 1 КБ) содержит метаданные и либо данные (для малых файлов), либо ссылки на экстенты.
  • Позволяет сразу хранить метаданные и данные вместе, сокращая расход дискового пространства для маленьких файлов.
  • Поддерживается журналирование.
  • В случае больших файлов MFT может содержать указатели на записи, формируя цепочку.
  • NTFS напрямую управляет именами файлов и может хранить все названия, включая hardlinks.

«NTFS — это база данных с переменными экстентами, позволяющая эффективно работать как с малыми, так и с очень большими файлами.»


Работа с памятью: memory mapping (mmap)

  • Альтернатива классическим open/read/write/close — отображение файла напрямую в виртуальное адресное пространство процесса.
  • Механизм подгружает части файла по требованию при обращении к памяти (page fault).
  • Позволяет работать с файлами как с обычной памятью: чтение и запись через операции над указателями.
  • Пример показывает, как изображение файла в память позволяет изменить его содержимое просто изменяя области памяти.
  • Поддерживает совместное использование файла несколькими процессами через отображение по одному или разным адресам.
  • Есть режим "анонимной" памяти, когда отображение выделяется без backing файла.

Буферный кеш (Buffer Cache)

  • Кеш блоков в оперативной памяти, включая данные, метаданные, inode, директории и карты свободных блоков.
  • Позволяет существенно ускорить доступ к диску, минимизируя операции чтения/записи.
  • Удерживает состояние "грязных" блоков (dirty blocks) — данные изменены в памяти, но еще не записаны на диск.
  • Поддерживает отложенную запись (delayed write), возвращая управление процессу быстро, а запись на диск откладывая.
  • Замена блоков в кеше обычно реализована через алгоритм LRU.
  • Размер буферного кеша динамически регулируется современными ОС, балансируя с памятью, выделенной под виртуальную память.
  • Используется предвычитывание (prefetching) последовательных блоков для оптимизации последовательных обращений к файлам.
  • Написанные, но не записанные данные могут быть потеряны при сбое, поскольку flushing происходит периодически (~30 секунд по умолчанию).

Надежность и долговечность файловых систем

Основные характеристики («-ilities»)

  • Доступность (Availability) — вероятность отклика системы на запросы, не обязательно гарантирует правильность работы.
  • Долговечность (Durability) — способность сохранить данные без потерь.
  • Надежность (Reliability) — способность корректно выполнять свои функции; включает безопасность, отказоустойчивость и корректность.

Обеспечение долговечности

  • Использование кодов коррекции ошибок (ECC) на уровне дисков для восстановления данных.
  • Применение батарейно поддерживаемой RAM и flash-кэшей для сохранения данных между записью и фиксацией на диск.
  • Множественные копии данных:
    • На одном диске (лучшее распределение дисковых секторов, но малополезно при отказе всего диска).
    • На разных дисках серверов или даже в разных географических локациях.
  • RAID-массивы:
    • RAID 1 (зеркалирование) — полное дублирование данных, высокая надежность и простое восстановление.
    • RAID 5 — распределение данных и контрольной суммы (parity) с меньшими затратами на избыточность.
    • Современные диски требуют RAID 6 или выше, поскольку время восстановления больших объемов данных слишком велико, и риск двух отказов растет.

«Надежность достигается за счет независимости отказов: копии хранятся в местах, где маловероятен одновременный сбой.»


Дополнительные особенности файловых систем

Жесткие и символические ссылки

  • Hard link — новое имя для существующего inode, увеличивает счетчик ссылок, файл удаляется только когда счетчик равен нулю и нет открытых дескрипторов.
  • Symbolic link (soft link) — специальный файл, содержащий путь к другому файлу, разрешается динамически при обращении. Может указывать на несуществующий файл.

Поиск иерархии директорий

  • Директории — специальные файлы с записями имени и inode файла.
  • Поиск происходит последовательно (линейно) в большинстве UNIX-систем.
  • В некоторых системах опционально используется индексирование через B-деревья.

Итоги

  • Файловая система — это сложный уровень абстракции между пользователем и физическим носителем, кардинально влияющий на производительность и надежность.
  • Основные подходы — индексация через inode, распределение данных по блокам и группам, журналирование для восстановления.
  • Современные файловые системы стремятся сочетать эффективность по размеру и быстродействию с максимальной надежностью и удобством.
  • Значительная часть оптимизаций связана с минимизацией перемещений головки, снижением фрагментации и использованием кэширования.
  • Важнейшие требования: сохранить данные, обеспечить быстрый доступ, минимизировать потери при сбоях и оптимизировать работу с разными типами файлов и сценариев использования.

🚀 Файловая система — это «сердце» хранения данных, и понимание её принципов позволяет грамотнее проектировать и использовать современные вычислительные системы.