Файловая система Unix - Unix File System

УФС
Разработчики)CSRG
Полное имяФайловая система UNIX
Введенос 4.2BSD
Структуры
Содержимое каталогастолы
Пределы
Максимум. размер тома273 байтов (8 ЗиБ )
Максимум. размер файла273 байтов (8 ЗиБ )
Максимум. длина имени файла255 байт
Функции
Даты записаныUFS1 и UFS2: время последнего доступа (atime), время последнего изменения (mtime), время последнего изменения inode (ctime), UFS2: время создания inode (время рождения)[1]
Диапазон датUFS1: 14 декабря 1901 г. - 18 января 2038 г., UFS2: смещение 64-битного целого числа со знаком от эпоха[1]
Разрешение датыUFS1 и UFS2: наносекунда[1]
Другой
Поддерживается операционные системыA / UX, DragonFly BSD, FreeBSD, FreeNAS, NAS4Free, HP-UX, NetBSD, Следующий шаг, Linux, OpenBSD, иллюзия, Солярис, SunOS, Tru64 UNIX, Система UNIX V, и другие

В Файловая система Unix (УФС) это файловая система поддерживается многими Unix и Unix-подобный операционные системы. Это дальний потомок исходной файловой системы, используемой Версия 7 Unix.

Позже Быстрая файловая система Беркли (Быстрая файловая система BSD, FFS) использовался в Unix, который отличается от UFS.[2]

Дизайн

Том UFS состоит из следующих частей:

  • Несколько блоков в начале раздела зарезервированы для загрузочные блоки (который необходимо инициализировать отдельно от файловой системы)
  • Суперблок, содержащий магическое число идентифицируя это как файловую систему UFS, и некоторые другие важные числа, описывающие геометрию и статистику этой файловой системы, а также параметры настройки поведения
  • Набор групп цилиндров. Каждая группа цилиндров состоит из следующих компонентов:
    • Резервная копия суперблока
    • Заголовок группы цилиндров со статистикой, списками свободных номеров и т. Д., Относящимися к этой группе цилиндров, как и в суперблоке.
    • Номер inodes, каждый из которых содержит атрибуты файла
    • Номер блоки данных

Inode нумеруются последовательно, начиная с 0. Inode 0 зарезервирован для нераспределенных записей каталога, inode 1 был inode файла плохих блоков в исторических версиях UNIX, за которым следовал inode для корневая директория, который всегда является индексом 2, а индекс каталога lost + found - индексом 3.

Файлы каталога содержат только список имен файлов в каталоге и индексный дескриптор, связанный с каждым файлом. Все файлы метаданные хранятся в индексном дескрипторе.

История и эволюция

Ранние версии файловых систем Unix назывались просто FS. ФС включала только загрузочный блок, суперблок, скопление inodes, и блоки данных. Это хорошо работало для небольших дисков, для которых были разработаны ранние Unix, но по мере развития технологий и роста дисков, перемещение головы вперед и назад между скоплением inodes и блоками данных, на которые они ссылались, вызывало взбучка. Маршалл Кирк МакКусик, затем Беркли аспирант, оптимизировал BSD 4.2 FFS (быстрая файловая система), изобретая группы цилиндров, которые разбивают диск на более мелкие части, каждая из которых имеет свои собственные индексные дескрипторы и блоки данных.

Цель BSD FFS - попытаться локализовать связанные блоки данных и метаданные в одной группе цилиндров и, в идеале, все содержимое каталога (как данные, так и метаданные для всех файлов) в той же или соседней группе цилиндров, таким образом сокращение фрагментация вызвано разбросом содержимого каталога по всему диску.

Некоторые параметры производительности в суперблоке включали количество дорожек и секторов, скорость вращения диска, скорость головки и выравнивание секторов между дорожками. В полностью оптимизированной системе головку можно было перемещать между близкими дорожками для чтения разбросанных секторов из чередующихся дорожек, ожидая вращения диска.

По мере того, как диски становились все больше и больше, оптимизация на уровне секторов стала устаревшей (особенно с дисками, которые использовали линейную нумерацию секторов и переменные сектора на дорожку). С большими дисками и большими файлами фрагментированное чтение стало большей проблемой. Чтобы бороться с этим, BSD изначально увеличила размер блока файловой системы с одного сектора до 1 КБ в 4.0 BSD; а в FFS увеличен размер блока файловой системы с 1 КБ до 8 К. Это имеет несколько эффектов. Вероятность того, что секторы файла будут смежными, намного выше. Объем служебных данных для перечисления блоков файла уменьшается, в то время как количество байтов, представляемых любым заданным количеством блоков, увеличивается.

Также возможны диски большего размера, поскольку максимальное количество блоков ограничено фиксированным числом блоков разрядности. Однако при больших размерах блоков диски с большим количеством мелких файлов будут тратить впустую пространство, поскольку каждый файл должен занимать хотя бы один блок. Из-за этого BSD добавила фрагментация на уровне блоков, также называемый перераспределение блоков, слияние хвостов или упаковка хвостов, где последний частичный блок данных из нескольких файлов может храниться в одном «фрагментном» блоке вместо нескольких по большей части пустых блоков (Аллен 2005 ).

Реализации

Поставщики некоторых проприетарных систем Unix, таких как SunOS / Солярис, System V Выпуск 4, HP-UX, и Tru64 UNIX и открытые производные системы Unix, такие как иллюзия, приняли УФС. Большинство из них адаптировали UFS для собственных нужд, добавив проприетарные расширения, которые могут не распознаваться версиями Unix других поставщиков. Много[который? ] продолжили использовать исходный размер блока и ширину полей данных в качестве исходной UFS, поэтому некоторая степень совместимости чтения сохраняется на разных платформах.[который? ][нужна цитата ][согласно кому? ] Совместимость между реализациями в целом в лучшем случае неоднородна.[согласно кому? ]

По состоянию на Solaris 7, Sun Microsystems включил UFS Logging, который принес ведение журнала файловой системы в UFS, который все еще доступен в текущих версиях Solaris и illumos.[3] 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 зебибиты ), блоки переменного размера (аналогично экстенты ), расширенные поля флагов, дополнительные отметки «время рождения», поддержка расширенных атрибутов и ACL POSIX1.e. UFS2 стала версией UFS по умолчанию, начиная с FreeBSD 5.0. FreeBSD также представила программные обновления и возможность делать файловую систему снимки как для UFS1, так и для UFS2. С тех пор они были перенесены в NetBSD, но в конечном итоге мягкие обновления (называемые мягкими зависимостями в NetBSD) были удалены из NetBSD 6.0 в пользу менее сложного механизма журналирования файловой системы, называемого WAPBL (также называется журналированием), который был добавлен в FFS в NetBSD 5.0. OpenBSD поддерживает программные обновления начиная с версии 2.9[4] и имеет поддержку UFS2 (FFS2) (без ACL), начиная с версии 4.2.[5] OpenBSD сделал UFS2 версией UFS по умолчанию и будет включен в выпуск 6.7.[6] Начиная с FreeBSD 7.0, UFS также поддерживает ведение журнала файловой системы используя gjournal GEOM провайдер. FreeBSD 9.0 добавляет поддержку легкого журналирования поверх мягких обновлений (SU + J), что значительно снижает потребность в фоновой fsck и списках ACL NFSv4.

FreeBSD, NetBSD, OpenBSD и DragonFly BSD также включают Дирхаш система, разработанная Яном Доузом. Эта система поддерживает хеш-таблицу в памяти для ускорения поиска в каталогах. Dirhash устраняет ряд проблем с производительностью, связанных с большими каталогами в UFS.

Linux включает реализацию UFS для двоичной совместимости на уровне чтения с другими Unix, но, поскольку нет стандартной реализации для расширений поставщика для UFS, Linux не имеет полной поддержки записи в UFS. Родной Linux ext2 файловая система была вдохновлена ​​UFS1, но не поддерживает фрагменты, и нет планов по внедрению мягких обновлений.[нужна цитата ] (В некоторых системах, производных от 4.4BSD, уровень UFS может использовать слой ext2 в качестве уровня контейнера, точно так же, как он может использовать FFS и LFS.)

Следующий шаг, который был производным от BSD, также использовал версию UFS. В яблоко с Mac OS X, он был доступен как альтернатива HFS +, их проприетарная файловая система. Однако по состоянию на Mac OS X Leopard, больше нельзя было установить Mac OS X на том в формате UFS. Кроме того, нельзя обновить старые версии Mac OS X, установленные на томах в формате UFS, до Leopard; обновление требует переформатирования загрузочного тома.[7] Для дисков, отформатированных как UFS в Mac OS X, было ограничение в 4 ГБ. Mac OS X Lion, Поддержка UFS была полностью прекращена.[8]

Смотрите также

Примечания

  • Маршалл Кирк МакКусик, Уильям Н. Джой, Сэмюэл Дж. Леффлер и Роберт С. Фабри. Быстрая файловая система для UNIX (PDF) (Технический отчет). Группа исследования компьютерных систем, Подразделение компьютерных наук, Департамент электротехники и компьютерных наук, Калифорнийский университет в Беркли. Получено 2013-04-08.CS1 maint: несколько имен: список авторов (связь)
  • Маршалл Кирк МакКьюсик, Уильям Н. Джой, Сэмюэл Дж. Леффлер и Роберт С. Фабри (август 1984 г.). «Быстрая файловая система для UNIX» (PDF). ACM-транзакции в компьютерных системах. 2 (3): 181–197. Дои:10.1145/989.990. Получено 2013-04-08.CS1 maint: несколько имен: список авторов (связь)
  • Маршалл Кирк МакКьюсик; Кейт Бостик; Майкл Дж. Карелс и Джон С. Куортерман (1996). «Локальные файловые системы; локальные файловые хранилища». Дизайн и реализация операционной системы 4.4BSD. Эддисон-Уэсли. ISBN  0-201-54979-4.
  • Маршалл Кирк МакКусик и Грегори Р. Гэнджер (июнь 1999 г.). «Мягкие обновления: метод устранения большинства синхронных записей в быстрой файловой системе» (PDF). Труды FREENIX Track: Ежегодная техническая конференция USENIX 1999 г.. стр. 1–18. Получено 2013-04-08.
  • Маршалл Кирк МакКусик (февраль 2002 г.). "Запуск" fsck "в фоновом режиме". Материалы BSDCon 2002. стр. 55–64. Получено 2013-04-08.
  • Маршалл Кирк МакКьюсик (сентябрь 2003 г.). «Улучшения быстрой файловой системы для поддержки многотерабайтных систем хранения». Материалы BSDCon 2003. Получено 2019-02-07.
  • Ричард Макдугалл; Джим Мауро (2006). «15: Файловая система UFS». Внутреннее устройство Solaris: архитектура ядра Solaris 10 и OpenSolaris (PDF) (2-е изд.). ISBN  0-13-148209-2.
  • Аллен, Херви (20 июня 2005 г.). «UFS2 и Soft Updates представляют собой мощную комбинацию» (PDF). Введение в FreeBSD, семинар PacNOG I, дополнительные темы. Центр ресурсов по запуску сети. п. 23. Получено 2013-04-08.

Рекомендации

внешняя ссылка