Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Дизайн [ править ]

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

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

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

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

История и эволюция [ править ]

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

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

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

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

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

Реализации [ править ]

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

Начиная с Solaris 7 , Sun Microsystems включила функцию UFS Logging, которая принесла журналирование файловой системы в UFS, которая по-прежнему доступна в текущих версиях Solaris и illumos. [3] Solaris UFS также имеет расширения для больших файлов и больших дисков и другие функции.

В системах Unix 4.4BSD и BSD, производных от него, таких как FreeBSD , NetBSD , OpenBSD и DragonFlyBSD , реализация UFS1 и UFS2 разделена на два уровня: верхний уровень, который обеспечивает структуру каталогов и поддерживает метаданные (разрешения, владение, и т. д.) в структуре индексных дескрипторов и нижние уровни, которые предоставляют контейнеры данных, реализованные как дескрипторы. Это было сделано для поддержки как традиционных 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 , разработанную Яном Доузом. Эта система поддерживает хеш-таблицу в памяти для ускорения поиска в каталогах. Dirhash устраняет ряд проблем с производительностью, связанных с большими каталогами в UFS.

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

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

Ссылки [ править ]

  1. ^ а б в https://svnweb.freebsd.org/base/head/sys/ufs/ufs/dinode.h?revision=313780&view=markup
  2. ^ https://tldp.org/HOWTO/Filesystems-HOWTO-9.html#ss9.29
  3. ^ http://docs.oracle.com/cd/E19253-01/817-5093/fsoverview-43/index.html
  4. ^ "OpenBSD 2.9 Release" . OpenBSD . 2001-06-01 . Проверено 8 апреля 2013 .
  5. ^ "OpenBSD 4.2 Release" . OpenBSD. 2007-11-01 . Проверено 8 апреля 2013 .
  6. ^ "Сделать FFS2 файловой системой по умолчанию" . OpenBSD. 2020-04-05 . Проверено 7 апреля 2020 .
  7. ^ «Архивировано - Mac OS X 10.5 Leopard: установка на том в формате UFS» . Яблоко, Inc . 2012-06-12 . Проверено 8 апреля 2013 .
  8. ^ «Lion не будет монтировать образы дисков с помощью встроенной или Дисковой утилиты» . Сообщества поддержки Apple . Яблоко, Inc . 2011-08-05 . Проверено 24 декабря 2013 .

Внешние ссылки [ править ]

  • Йерун К. ван Гелдерен (23 апреля 2003 г.). "Маленький FAQ по UFS2" . FreeBSD . Проверено 8 апреля 2013 .
  • "Filesystems HOWTO: Other filesystems" . Проект документации Linux . 2007-01-27.
  • Файловая система Solaris UFS , см. Также [1]
  • Формат USF (sic) / UFS2
  • Местоположение и быстрая файловая система