Файловая система с журнальной структурой (BSD)
Файловая система с журнальной структурой (или LFS ) — это реализация файловой системы с журнальной структурой (концепция, первоначально предложенная и реализованная Джоном Оустерхаутом ), изначально разработанная для BSD . Он был удален из FreeBSD и OpenBSD ; реализация NetBSD была нефункциональной до тех пор, пока работа, предшествовавшая выпуску 4.0, не сделала ее снова жизнеспособной в качестве производственной файловой системы. [1]
Дизайн
[ редактировать ]Большая часть дискового формата LFS заимствована из UFS . Форматы косвенного блока, индексного дескриптора и каталога практически идентичны. Это позволяет повторно использовать хорошо протестированный код файловой системы UFS; текущие реализации LFS используют код UFS более высокого уровня и код более низкого уровня для FFS, поскольку обе эти файловые системы имеют много общего с UFS.
LFS делит диск на сегменты , только один из которых активен в любой момент времени. Каждый сегмент имеет заголовок, называемый сводным блоком . Каждый сводный блок содержит указатель на следующий сводный блок, связывающий сегменты в одну длинную цепочку, которую LFS рассматривает как линейный журнал. Сегменты не обязательно должны быть соседними на диске; по этой причине рекомендуется использовать сегменты большего размера (от 384 КБ до 1 МБ), поскольку они амортизируют затраты на поиск между сегментами. [2]
Всякий раз, когда файл или каталог изменяется, LFS записывает в заголовок этого журнала:
- Любые измененные или новые блоки данных.
- Косвенные блоки обновлены и теперь указывают на (1).
- Индексные дескрипторы обновлены и теперь указывают на (2).
- Блоки карты индексных дескрипторов обновлены и теперь указывают на (3). [3]
В отличие от UFS, индексные дескрипторы в LFS не имеют фиксированного местоположения. Карта индексных дескрипторов — плоский список местоположений блоков индексных дескрипторов — используется для их отслеживания. Как и все остальное, блоки карты индексных дескрипторов также записываются в журнал при их изменении.
Когда сегмент заполнен, LFS продолжает заполнять следующий свободный или чистый сегмент. Сегменты называются « грязными» , если они содержат активные блоки или блоки, для которых в журнале нет более новых копий. LFS Сборщик мусора превращает грязные сегменты в чистые , копируя живые блоки из грязного сегмента в текущий сегмент и пропуская остальные. Сводный блок в каждом сегменте содержит карту для отслеживания живых блоков.
Обычно сбор мусора откладывается до тех пор, пока не останется чистых сегментов; его также можно отложить на время простоя системы. Даже в этом случае для сбора отбираются только наименее загрязненные сегменты. Это сделано для того, чтобы избежать штрафа за очистку полных сегментов, когда полоса пропускания ввода-вывода наиболее необходима. [2]
В контрольной точке (обычно запланированной примерно раз в 30 секунд) LFS записывает последние известные местоположения блоков карты индексного дескриптора и номер текущего сегмента в область контрольной точки в фиксированном месте на диске. Таких регионов два; ОРС чередует их на каждой контрольной точке. После написания контрольная точка представляет собой последний согласованный снимок файловой системы. Восстановление после сбоя и обычное монтирование работают одинаково — файловая система просто восстанавливает свое состояние с последней контрольной точки и возобновляет ведение журнала оттуда.
Недостатки
[ редактировать ]- В LFS может возникнуть серьезная фрагментация файловой системы , особенно для медленно растущих файлов или для нескольких одновременных операций записи больших объемов. Это приводит к серьезному снижению производительности, хотя обоснование конструкции файловых систем с журнальной структурой предполагает, что операции чтения с диска в основном будут кэшироваться.
- LFS становится все менее эффективной по мере приближения к максимальной емкости, когда сборщику мусора приходится работать почти постоянно, чтобы обеспечить доступность чистых сегментов.
- LFS не позволяет создавать снимки или управлять версиями, хотя обе функции в целом легко реализовать в файловых системах с журнальной структурой.
Примечания
[ редактировать ]- Зельцер, Марго; Бостик, Кейт; МакКьюсик, Маршалл Кирк; Стаелин, Карл (январь 1993 г.), «Реализация файловой системы с журнальной структурой для UNIX» (PDF) , Материалы зимнего Usenix 1993 г.
- Мэтьюз, Джинна Нифе; Роселли, Дрю; Костелло, Адам М.; Ван, Рэндольф Ю.; Андерсон, Томас Э. (октябрь 1997 г.), «Улучшение производительности файловых систем с журнальной структурой с помощью адаптивных методов», Труды шестнадцатого симпозиума ACM по принципам операционных систем - SOSP '97 , стр. 238–251, doi : 10.1145/ 268998.266700 , ISBN 978-0897919166 , S2CID 11858758
Ссылки
[ редактировать ]- ^ Буйе, Мануэль (15 декабря 2007 г.). «СИСТЕМА ИЗМЕНЕНИЙ выпуска NetBSD 4.0» . Проверено 4 февраля 2019 г. .
- ^ Перейти обратно: а б Розенблюм, Мендель; Оустерхаут, Джон К. (февраль 1992 г.), «Проектирование и реализация файловой системы с журнальной структурой» (PDF) , Транзакции ACM в компьютерных системах , 10 (1): 26–52, doi : 10.1145/146941.146943 , S2CID 28452863 .
- ^ Розенблюм, Мендель; Оустерхаут, Джон К. (июнь 1990 г.), «Менеджер хранилища LFS» (PDF) , Proceedings of the Summer Usenix 1990 г .: 315–324 .