Файловая система 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]
См. также
[ редактировать ]Ссылки
[ редактировать ]Цитаты
[ редактировать ]- ^ Перейти обратно: а б с «[база] Содержимое /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
- Локальность и быстрая файловая система