Файловая система Unix
Разработчик(и) | CSRG |
---|---|
Полное имя | Файловая система UNIX |
Представлено | с 4.2BSD |
Структуры | |
Содержимое каталога | столы |
Пределы | |
Максимальный размер тома | 2 73 байт (8 ЗиБ ) |
Максимальный размер файла | 2 73 байт (8 ЗиБ ) |
Максимальная длина имени файла | 255 байт |
Функции | |
Даты записи | UFS1 и UFS2: время последнего доступа (atime), время последнего изменения (mtime), время последней смены индексного дескриптора (ctime), UFS2: время создания индексного дескриптора (время рождения). [1] |
Диапазон дат | UFS1: 14 декабря 1901 г. – 18 января 2038 г., UFS2: 64-битное целое число со знаком, смещение от эпохи. [1] |
Разрешение даты | UFS1 и UFS2: наносекунда [1] |
Другой | |
Поддерживается операционные системы | A/UX , DragonFly BSD , FreeBSD , FreeNAS , NAS4Free , HP-UX , NetBSD , NeXTSTEP , Linux , OpenBSD , illumos , Solaris , SunOS , Tru64 UNIX , UNIX System V , Orbis OS и другие. |
( Файловая система Unix UFS ) — это семейство файловых систем, поддерживаемых многими Unix и Unix-подобными операционными системами. Это дальний потомок исходной файловой системы, используемой в Unix версии 7 .
Дизайн
[ редактировать ]Том UFS состоит из следующих частей:
- Несколько блоков в начале раздела, зарезервированные для загрузочных блоков (которые необходимо инициализировать отдельно от файловой системы)
- Суперблок, содержащий магическое число, идентифицирующее файловую систему UFS, а также некоторые другие важные числа, описывающие геометрию и статистику этой файловой системы, а также параметры настройки поведения.
- Коллекция групп цилиндров. Каждая группа цилиндров состоит из следующих компонентов:
- Резервная копия суперблока
- Заголовок группы цилиндров со статистикой, свободными списками и т. д. об этой группе цилиндров, аналогичный заголовкам в суперблоке.
- Несколько индексных дескрипторов , каждый из которых содержит атрибуты файла.
- Количество блоков данных
Индексные дескрипторы нумеруются последовательно, начиная с 0. Индексный дескриптор 0 зарезервирован для нераспределенных записей каталога, индексный дескриптор 1 был индексным дескриптором файла сбойного блока в исторических версиях UNIX, за которым следует индексный дескриптор корневого каталога , который всегда является индексным дескриптором 2, и индексный дескриптор для каталога loss+found, который имеет индексный дескриптор 3.
Файлы каталога содержат только список имен файлов в каталоге и индексный дескриптор, связанный с каждым файлом. файла Все метаданные хранятся в индексном дескрипторе.
История и эволюция
[ редактировать ]Ранние файловые системы Unix назывались просто FS . FS включала только загрузочный блок, суперблок, группу индексных дескрипторов и блоки данных. Это хорошо работало для небольших дисков, для которых были разработаны ранние Unix-системы, но по мере развития технологий и увеличения размеров дисков перемещение головки взад и вперед между скоплением индексных дескрипторов и блоками данных, на которые они ссылались, приводило к сбоям . Маршалл Кирк МакКьюсик , тогда аспирант Беркли , оптимизировал структуру V7 FS для создания FFS (быстрой файловой системы) BSD 4.2 , придумав группы цилиндров, которые разбивают диск на более мелкие фрагменты, причем каждая группа имеет свои собственные индексные дескрипторы и данные. блоки. [2] [3]
Целью BSD FFS является попытка локализовать связанные блоки данных и метаданные в одной и той же группе цилиндров и, в идеале, все содержимое каталога (как данные, так и метаданные для всех файлов) в той же или близлежащей группе цилиндров, таким образом уменьшение фрагментации , вызванной разбросом содержимого каталога по всему диску.
Некоторые параметры производительности суперблока включали количество дорожек и секторов, скорость вращения диска, скорость головки и выравнивание секторов между дорожками. В полностью оптимизированной системе головку можно было перемещать между близкими дорожками, чтобы считывать разбросанные сектора с чередующихся дорожек, ожидая вращения диска.
По мере того, как диски становились все больше и больше, оптимизация на уровне секторов устарела (особенно для дисков, которые использовали линейную нумерацию секторов и переменные сектора на дорожку). При использовании дисков большего размера и файлов фрагментированное чтение становилось все более серьезной проблемой. Чтобы бороться с этим, BSD изначально увеличила размер блока файловой системы с одного сектора до 1 КБ в версии 4.0 BSD; а в FFS размер блока файловой системы увеличен с 1 КБ до 8 КБ. Это имеет несколько последствий. Вероятность того, что сектора файла будут смежными, намного выше. Объем служебных данных для перечисления блоков файла уменьшается, а количество байтов, представленных любым заданным количеством блоков, увеличивается.
Также возможны диски большего размера, поскольку максимальное количество блоков ограничено номером блока с фиксированной разрядностью. Однако при больших размерах блоков диски с множеством мелких файлов будут тратить пространство впустую, поскольку каждый файл должен занимать хотя бы один блок. Из-за этого в BSD добавлена фрагментация на уровне блоков , также называемая субраспределением блоков, слиянием хвостов или упаковкой хвостов , при которой последний частичный блок данных из нескольких файлов может храниться в одном «фрагментном» блоке вместо нескольких в основном пустых блоков. [4]
Работа над Berkeley FFS была широко принята другими поставщиками Unix, а семейство файловых систем, производных от нее, известно под общим названием UFS.
Реализации
[ редактировать ]Поставщики некоторых проприетарных систем Unix, таких как SunOS / Solaris , System V Release 4 , HP-UX и Tru64 UNIX , а также открытых производных систем Unix, таких как illumos , приняли UFS. Большинство из них адаптировали UFS для своих нужд, добавив собственные расширения, которые могут не распознаваться версиями Unix других производителей. Много [ который? ] продолжают использовать исходный размер блока и ширину полей данных, как и исходный UFS, поэтому некоторая степень совместимости чтения сохраняется на разных платформах. [ который? ] [ нужна ссылка ] [ по мнению кого? ] Совместимость между реализациями в целом в лучшем случае неоднородна. [ по мнению кого? ]
Начиная с Solaris 7 , Sun Microsystems включила функцию ведения журнала UFS, которая привнесла журналирование файловой системы в UFS, которое все еще доступно в текущих версиях Solaris и Illumos. [5] Solaris UFS также имеет расширения для больших файлов и больших дисков, а также другие функции.
В 4.4BSD и BSD Unix-системах, производных от нее, таких как FreeBSD , NetBSD , OpenBSD и DragonFlyBSD , реализация UFS1 и UFS2 разделена на два уровня: верхний уровень, который обеспечивает структуру каталогов и поддерживает метаданные (разрешения, право собственности, и т. д.) в структуре индексных дескрипторов и нижние уровни, которые предоставляют контейнеры данных, реализованные как индексные дескрипторы. Это было сделано для поддержки как традиционной файловой системы FFS, так и LFS файловой системы с журнальной структурой с общим кодом для общих функций. Верхний уровень называется «UFS», а нижние уровни — «FFS» и «LFS». В некоторых из этих систем термин «FFS» используется для комбинации нижнего уровня FFS и верхнего уровня UFS, а термин «LFS» используется для комбинации нижнего уровня LFS и верхнего уровня UFS.
Кирк МакКьюсик реализовал перераспределение блоков — метод, который меняет порядок блоков в файловой системе непосредственно перед завершением записи, чтобы уменьшить фрагментацию и контролировать старение файловой системы. Он также реализовал мягкие обновления — механизм, который поддерживает согласованность файловой системы без ограничения производительности, как это делал традиционный режим синхронизации. Побочным эффектом этого является уменьшение необходимости проверки файловой системы после сбоя или сбоя питания. Чтобы преодолеть оставшиеся проблемы после сбоя, была введена фоновая утилита fsck.
В UFS2 Кирк МакКьюсик и Пол-Хеннинг Камп расширили уровни FreeBSD FFS и UFS, добавив 64-битные указатели блоков (позволяющие томам расти до 8 зебибайт ), блоки переменного размера (аналогично экстентам ), расширенные поля флагов, дополнительные Штампы «времени рождения», расширенная поддержка атрибутов и списки управления доступом POSIX1.e. UFS2 стала поддерживаемой версией UFS, начиная с FreeBSD 5.0. FreeBSD также представила программные обновления и возможность создавать снимки файловой системы как для UFS1, так и для UFS2. С тех пор они были перенесены в NetBSD, но в конечном итоге мягкие обновления (называемые мягкими зависимостями в NetBSD) были удалены из NetBSD 6.0 в пользу менее сложного механизма журналирования файловой системы, называемого WAPBL (также называемого журналированием), который был добавлен в FFS в NetBSD. 5.0. OpenBSD поддерживает программные обновления начиная с версии 2.9. [6] и имеет поддержку UFS2 (FFS2) (без ACL) начиная с версии 4.2. [7] OpenBSD теперь сделала UFS2 версией UFS по умолчанию и будет включена в выпуск 6.7. [8] Начиная с FreeBSD 7.0, UFS также поддерживает ведение журнала файловой системы с помощью поставщика gjournal GEOM . Во FreeBSD 9.0 добавлена поддержка облегченного журналирования поверх программных обновлений (SU+J), что значительно снижает потребность в фоновом fsck и списках управления доступом 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 от Mac OS X она была доступна как альтернатива HFS+ , их собственной файловой системе. Однако, начиная с Mac OS X Leopard , больше невозможно было установить Mac OS X на том в формате UFS. Кроме того, невозможно обновить более старые версии Mac OS X, установленные на томах в формате UFS, до Leopard; обновление требует переформатирования загрузочного тома. [9] Для дисков, отформатированных как UFS, в Mac OS X существовало ограничение на размер файлов в 4 ГБ. Начиная с Mac OS X Lion , поддержка UFS была полностью прекращена. [10]
См. также
[ редактировать ]Ссылки
[ редактировать ]Цитаты
[ редактировать ]- ^ Jump up to: а б с «[база] Содержимое /Head/Sys/Ufs/Ufs/Dinode.h» .
- ^ «Открытые исходные коды: голоса революции открытого исходного кода» . 29 марта 1999 г.
- ^ МакКьюсик, КМ; Джой, Вт; Леффлер, С; Фабри, Р. (август 1984 г.). «Быстрая файловая система для UNIX» (PDF) . Транзакции ACM в компьютерных системах . 2 (3): 181–197. дои : 10.1145/989.990 . S2CID 222285164 . Проверено 08 апреля 2013 г.
- ^ Аллен, Херви (20 июня 2005 г.). «UFS2 и программные обновления представляют собой мощную комбинацию» (PDF) . Введение во FreeBSD, Семинар PacNOG I, Дополнительные темы . Ресурсный центр сетевого запуска. п. 23 . Проверено 08 апреля 2013 г.
- ^ «Журналирование UFS» . Документация Oracle . Проверено 27 сентября 2022 г.
- ^ «Выпуск OpenBSD 2.9» . OpenBSD . 01.06.2001 . Проверено 08 апреля 2013 г.
- ^ «Выпуск OpenBSD 4.2» . OpenBSD. 01.11.2007 . Проверено 08 апреля 2013 г.
- ^ «Сделать FFS2 файловой системой по умолчанию» . OpenBSD. 05.04.2020 . Проверено 7 апреля 2020 г.
- ^ «В архиве — Mac OS X 10.5 Leopard: установка на том в формате UFS» . Apple, Inc. 12 июня 2012 г. Проверено 08 апреля 2013 г.
- ^ «Lion не будет монтировать образы дисков с помощью встроенной или Дисковой утилиты» . Сообщества поддержки Apple . Apple, Inc. 05.08.2011 . Проверено 24 декабря 2013 г.
Библиография
[ редактировать ]- Маршалл Кирк МакКьюсик , Уильям Н. Джой , Сэмюэл Дж. Леффлер и Роберт С. Фабри. Быстрая файловая система для UNIX (PDF) (Технический отчет). Группа исследования компьютерных систем, отдел компьютерных наук, факультет электротехники и информатики, Калифорнийский университет, Беркли . Проверено 08 апреля 2013 г.
{{cite tech report}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - Маршалл Кирк МакКьюсик, Уильям Н. Джой, Сэмюэл Дж. Леффлер и Роберт С. Фабри (август 1984 г.). «Быстрая файловая система для UNIX» (PDF) . Транзакции ACM в компьютерных системах . 2 (3): 181–197. дои : 10.1145/989.990 . S2CID 222285164 . Проверено 08 апреля 2013 г.
{{cite journal}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - Маршалл Кирк МакКьюсик; Кейт Бостик; Майкл Дж. Карелс и Джон С. Квартерман (1996). «Локальные файловые системы; Локальные файловые хранилища». Проектирование и реализация операционной системы 4.4BSD . Аддисон-Уэсли . ISBN 0-201-54979-4 .
- Маршалл Кирк МакКьюсик и Грегори Р. Гангер (июнь 1999 г.). «Мягкие обновления: метод устранения большинства синхронных записей в быстрой файловой системе» (PDF) . Материалы программы FREENIX Track: Ежегодная техническая конференция USENIX 1999 г. стр. 1–18 . Проверено 08 апреля 2013 г.
- Маршалл Кирк МакКьюсик (февраль 2002 г.). «Запуск «fsck» в фоновом режиме» . Материалы BSDCon 2002 . стр. 55–64 . Проверено 08 апреля 2013 г.
- Маршалл Кирк МакКьюсик (сентябрь 2003 г.). «Усовершенствования быстрой файловой системы для поддержки многотерабайтных систем хранения данных» . Материалы BSDCon 2003 . Проверено 7 февраля 2019 г.
- Ричард МакДугалл; Джим Мауро (2006). «15: Файловая система UFS». Внутреннее устройство Solaris: Solaris 10 и архитектура ядра OpenSolaris (PDF) (2-е изд.). Пресса Sun Microsystems/Прентис Холл. ISBN 0-13-148209-2 .
Внешние ссылки
[ редактировать ]- Йерун К. ван Гельдерен (23 апреля 2003 г.). «Небольшой FAQ по UFS2» . FreeBSD . Проверено 08 апреля 2013 г.
- «Файловые системы HOWTO: Другие файловые системы» . Проект документации Linux . 27 января 2007 г.
- Файловая система Solaris UFS , см. также [1]
- Формат USF(так в оригинале)/UFS2
- Локальность и быстрая файловая система