Какой максимальный размер файла поддерживает unix v7
Файловая система Unix ( UFS ) — это файловая система, используемая Unix-подобными операционными системами (ОС) .
btrfs
btrfs – это более функциональная и сложная файловая система чем ext4. Начали разрабатывать для Linux в 2007 году, а в 2014 году признали стабильной. Вот некоторые интересные функции:
- снимки состояния, которые позволяют запомнить состояние на определенный момент времени всех файлов и вернуться к этому состоянию в последующем. Полезно когда вы случайно удалили что-то важное или какой-то вирус зашифровал все ваши данные на компьютере;
- создание RAID конфигурации на уровне файловой системы;
- сжатие данных, когда данные при создании автоматически сжимаются экономя свободное место на диске;
- дедупликация данных. Когда есть два или более одинаковых файла, то они занимают размер только одного файла, что очень экономит пространство на жестком диске;
- контрольные суммы для данных и метаданных, что повышает надежность файловой системы;
- дефрагментация данных на лету;
- квоты на разделы;
- динамическая аллокация inode;
- максимальный размер файла 16 EB;
- наибольший размер раздела 16 EB;
- максимальный размер имени файла 255 B;
Из минусов: файловая система не так проверена временем как ext4, активно использует оперативную память и работает медленнее чем ext4.
JFS — это журналированная файловая система. На момент выхода в свет в 1999 году была наиболее производительной из существовавших файловых систем. Сейчас по функциональности сравнима с ext4, но менее популярна.
Вот некоторые её особенности:
- максимальная длина имени файла 255 B;
- максимальный размер файла 4 PB (4000 TB);
- максимальный размер раздела 32 PB (32000 TB);
- контрольные суммы;
- поддержка acl.
Так как по функциональности эта файловая система сравнима с ext4, но по характеристикам и популярности отстаёт, то в Ubintu установщик уже не предлагает использовать её. Можно использовать, если у вас будут храниться файлы размером более 16 ТБ, хотя и в этом случае лучше выбрать XFS.
XFS – это журналированная файловая система. Особенно хорошо работает с большими неизменяемыми файлами. Имеет следующие особенности:
- максимальная длина имени файла 255 B;
- наибольший размер файла 9 EB;
- максимальный размер раздела 9 EB;
- автоматическая аллокация и высвобождение inode;
- дефрагментация «на лету»;
- низкая производительность при работе с большим количеством файлов;
- невозможность уменьшить размер существующей файловой системы.
Эта файловая система позволит хранить просто огромные файлы, размер которых может достигать 9 EB.
Что такое файловая система
Полезные данные, такие как файлы и каталоги, напрямую на диск не записываются. Между разделом диска и файлами существует прослойка в виде файловой системы.
Файловая система – это средство, которое определяет различные правила работы с файлами, например:
- как данные будут располагаться на диске;
- как будет происходить запись, поиск, чтение или удаление файлов;
- какие метаданные будут использоваться;
- как обезопасить файлы от порчи (например при некорректном выключении компьютера);
Метаданные – это данные о данных, например файл содержит какие-то данные, а метаданные это:
- дата создания файла;
- пользователь создавший этот файл;
- тип файла;
- права доступа к этому файлу;
- и подобная информация о файле.
Разные файловые системы имеют разные ограничения, например:
- максимальный размер раздела;
- наибольший размер файла;
- максимальная длина имени файла.
В этой статье пробежимся по файловым системам, которые можно выбрать при установки Debian 11 и Ubuntu 20.04. При установке Debian 11 вы можете выбрать следующие файловые системы:
Установщик Ubuntu 20.04 имеет несколько меньший выбор:
Далее пробежимся по этим файловым системам:
Файловые системы семейства ext
EXT (Extended File System) — расширенная файловая система.
Ext2 была создана в январе 1993 года для linux, вот её особенности:
- не журналируемая;
- максимальная длина имени файла – 255B;
- максимальный размер файла – 16GB-2TB (в зависимости от размера кластера);
- максимальный размер раздела – 2TB-32TB (в зависимости от размера кластера);
- поддержка POSIX ACL.
Ext2 старая файловая система без журнала, но достаточно быстрая. Современные системы Linux могут работать с этой файловой системой.
Ext3 была создана в ноябре 1999 года и также стала применяться по умолчанию во многих дистрибутивах Linux. Единственное улучшение – это добавление журналирования (что сделало файловую систему надежнее, но медленнее).
Ext4 была создана в октябре 2006 года, но стабильная версия появилось в октябре 2008 года. Она сейчас является самой распространенной файловой системой для Linux. Убрали некоторые ограничения и оптимизировали:
- максимальный размер файла – 16 GB-16 TB (в зависимости от размера кластера);
- наибольший размер раздела – 1 EB (1048576 TB);
- максимальная длина имени файла – 255 B;
- время изменения файлов протоколируется точнее;
- упростилась работа с крупными файлами;
- была оптимизирована скорость работы.
На данный момент по моему мнению EXT4 лучший выбор для Linux систем.
Файловые системы семейства fat
Эти файловые системы могут работать в linux но создавались они для windows. Могут подойти для хранения файлов, но не для работы программ. Основной недостаток FAT – медленная работа с файлами:
- fat16 — максимальный раздел 2 GB, в настоящее время потеряла свою актуальность;
- fat32 — максимальный раздел 2 TB, для работы приложений не подходит, максимум можно использовать для хранения информации на флеш накопителе.
- В настоящее время рекомендуется использовать ext4 для работы Linux систем, а если вам нужны дополнительные функции можно изучить и использовать btrfs, если планируете хранить крупные файлы то можно попробовать xfs.
- Также если вам важнее скорость чем надежность можно использовать ext2, так как в ней нет журнала она должна работать быстрее чем ext4.
- Ну а fat32 можно использовать для хранения информации на флеш накопителе.
Кроме перечисленных файловых систем Linux может работать и с другими, например ntfs или zfs. Но так как их нельзя выбирать при установке, они были опущены. На этом сайте я планирую познакомить вас с файловой системой zfs, так как имею большой опыт работы с ней, но не в этом курсе, а в отдельных статьях.
задний план
Файловая система, использовавшаяся в ранних версиях UNIX, называлась просто FS . В ФС были только загрузочные блоки, суперблоки, иноды и блоки данных. Этого было достаточно для небольших дисков, использовавшихся в ранних версиях UNIX, но по мере развития технологий дисковое пространство растет, не говоря уже о резком падении эффективности, вызванном перемещением головок между некоторыми индексными дескрипторами и блоками данных.Я больше не могу этого делать. BSD представила FFS (Fast File System), которая является ее оптимизацией. Это изобретение концепции группы цилиндров, которая представляет собой конфигурацию, в которой диск разделен на мелкие части и в каждой части расположены индекс и блок данных.
Попытки BSD FFS для локализации доступа путем размещения блоков данных и связанные с ними метаданные , в одной и той же группе цилиндров, идеально подходит для содержания одного каталога (блоки данных также имеют соответствующие метаданные). Также) она помещается в одной и той же или близкой группе цилиндров, уменьшая фрагментация из-за распределенного распределения содержимого каталогов по диску .
Суперблок содержит такую информацию, как количество дорожек, количество секторов , скорость вращения, скорость головки и расположение секторов между дорожками в качестве параметров, связанных с производительностью . Полностью оптимизированная система может перемещать головку между соседними дорожками, ожидая вращения диска, считывая прерывисто расположенные сектора.
По мере увеличения емкости диска оптимизация на уровне секторов становилась неэффективной (особенно когда количество секторов на дорожке не было постоянным). По мере роста дисков и файлов фрагментированные чтения становятся еще большей проблемой. В ответ BSD изначально увеличила размер блока файловой системы с одного сектора до 1K (4.0BSD), а FFS увеличила его до 8K. Это имеет несколько эффектов. Вероятность того, что сектор файла постоянно защищен, увеличивается. Вы можете уменьшить накладные расходы на хранение блоков файлов в списке. Верхний предел размера файла, который может быть выражен битовым полем, содержащим количество блоков, становится большим.
Большие размеры блоков тратят место, когда есть много маленьких файлов. Поэтому BSD представила фрагментацию на уровне блоков. Так как последняя часть файла меньше размера блока, сохраните ее в подблоках, разделяющих блок, чтобы можно было эффективно использовать эту область. Это также называется перераспределением блоков, слиянием хвостов, упаковкой хвостов и т. д.
актуализация
UFS была представлена в коммерческих UNIX, таких как SunOS / Solaris , SVR4 , UP-UX и Tru64 UNIX . Многие имеют свои собственные расширения и не могут распознавать UFS от других поставщиков. Однако исходный размер блока и ширина поля данных часто сохраняются, а также сохраняется некоторая совместимость. Однако при совместном использовании дисков между разными моделями важно заранее проверить совместимость.
Sun Microsystems представила ведение журнала UFS в Solaris 7 с добавлением в UFS функций журналирования файловой системы . Существуют различные другие расширения Solaris UFS, такие как расширение для работы с огромными файлами и расширение для работы с огромными дисками.
Кирк МакКьюсик расширил уровни FFS и UFS FreeBSD для разработки UFS2. Он добавил 64-битный указатель блока ( расширил максимальный объем до 8 зеттабайт ), изменил размер блока, расширил поле флага , добавил новую временную отметку « время рождения» и т. д. Это вещь. UFS2 используется по умолчанию во FreeBSD 5.0. FreeBSD также представляет программные обновления и моментальные снимки как для UFS1, так и для UFS2 . Они также были перенесены на NetBSD. OpenBSD поддерживает программные обновления с версии 2.9 [1] и UFS2 с версии 4.2 [2] .
В системах на основе BSD, таких как 4.4BSD и FreeBSD , NetBSD , OpenBSD и DragonFly BSD , реализация UFS1 и UFS2 разделена на два уровня. Верхний уровень обрабатывает метаданные (разрешения, информацию о владельце и т. д.) в структуре каталогов и структуре inode, а нижний уровень обрабатывает контейнер данных, реализованный в виде inode. Это механизм для совместного использования общей части между обычными файловыми системами с журнальной структурой, называемыми FFS и LFS . Верхний уровень называется «UFS», а нижний уровень называется «FFS» или «LFS». В этом случае, если для нижнего уровня используется FFS, все может называться FFS, а если для нижнего уровня используется LFS, то все может называться LFS.
Linux также реализует UFS для совместимости с BSD и т. д., но, поскольку UFS не имеет общей стандартной реализации, Linux поддерживает в основном чтение и запись. Файловая система ext2 Linux подвержена влиянию UFS (фактически, некоторые системы, производные от 4.4BSD, используют UFS в качестве верхнего уровня, а ext2 — в качестве нижнего уровня, например, FFS и LFS).
NeXTStep также был производным от BSD, поэтому я использовал UFS. Производная от Apple macOS может использовать UFS в качестве альтернативы HFS + , но Mac OS X v10.5 и более поздние версии больше не могут устанавливаться на тома в формате UFS. Также больше невозможно обновить версию macOS до версии 10.5, установленную на томе UFS, до версии 10.5 или более поздней [3] .
Хотя это старая файловая система основные элементы используются и современных UNIX системах.
Имена файлов ограничены 14 символами ASCII, кроме косой черты "/" и NUL - отсутствие символа. (в последующих версиях расширены до 255)
Контроль доступа к файлам и каталогам.
Имена чувствительны к регистру, my.txt и MY.TXT это разные файлы.
Используется схема i-узлов.
Не делается различий между разными файлами (текстовыми, двоичными и д.р.).
Поддерживаются символьные специальные файлы (для символьных устройств ввода-вывода).
- Если открыть файл /dev/lp и записать в него данные, то данные будут распечатаны на принтере.
- Если открыть файл /dev/tty и прочитать из него данные, то получим данные, введенные с клавиатуры.
Поддерживаются блочные специальные файлы (для блочных устройств ввода-вывода, например /dev/hd1).
Позволяет монтировать разделы в любое место дерева системы.
Расположение файловой системы UNIX
Количество дисковых блоков
Начало списка свободных блоков диска
При уничтожении суперблока, файловая система становится не читаемой.
Каждый i-узел имеет 64 байта в длину и описывает один файл (в том числе каталог).
Каталог содержит по одной записи для каждого файла.
Каталоговая запись UNIX V7 в 16 байт
Первые 10 дисковых блоков файла хранятся в самом i-узле, при блоке в 1Кбайт, файл может быть 10Кбайт.
Дополнительные блоки для i-узла, в случае больших файлов:
Одинарный косвенный блок - дополнительный блок с адресами блоков файла, если файл не сильно большой, то один из адресов в i-узле указывает на дополнительный блок с адресами. Файл может быть 266Кбайт=10Кбайт+256Кбайт (256Кбайт
Двойной косвенный блок - дополнительный блок с адресами одинарных косвенных блоков, если одного дополнительного блока не хватает. Файл может быть 65Мбайт=10Кбайт+2^8Кбайт+2^16Кбайт.
Тройной косвенный блок - дополнительный блок с адресами двойных косвенных блоков, если одного одинарного косвенного блока не хватает. Файл может быть 16Гбайт=10Кбайт+2^8Кбайт+2^16Кбайт+2^24Кбайт.
3.1.1 Поиск файла
Этапы поиска файла по абсолютному пути /usr/sbin/mc
При использовании относительного пути, например sbin/mc, поиск начинается с рабочего каталога /usr.
3.1.2 Блокировка данных файла
Блокирование осуществляется по блочно.
Стандартом POSIX два типа блокировки:
Блокировка с монополизацией - больше ни один процесс эти блоки заблокировать не может.
Блокировка без монополизации - могут блокировать и другие процессы.
Блокировки данных файла без монополизации
Если процесс К попытается блокировать блок 6 с монополизацией, то сам процесс будет заблокирован до разблокирования блока 6 всеми процессами.
3.1.3 Создание и работа с файлом
fd=creat("abc", mode) - Пример создания файла abc с режимом защиты, указанном в переменной mode (какие пользователи имеют доступ). Используется системный вызов creat.
Успешный вызов возвращает целое число fd - дескриптор файла.
Который хранится в таблице дескрипторов файла, открывшего процесса.
После этого можно работать с файлом, используя системные вызовы write и read.
n=read(fd, buffer, nbytes)
n=write(fd, buffer, nbytes)
У обоих вызовов всего по три параметра:
fd - дескриптор файла, указывающий на открытый файл
buffer - адрес буфера, куда писать или откуда читать данные
nbytes - счетчик байтов, сколько прочитать или записать байт
Теперь нужно по дескриптору получить указатель на i-узел и указатель на позицию в файле для записи или чтения.
Таблица открытых файлов - создана для хранения указателей на i-узел и на позицию в файле. И позволяет родительскому и дочернему процессам совместно использовать один указатель в файле, но для посторонних процессов выделять отдельные указатели.
Связь между таблицей дескрипторов файлов, таблицей открытых файлов и таблицей i-узлов.
3.2 Файловая система BSD
Основу составляет классическая файловая система UNIX.
Особенности (отличие от предыдущей системы):
Увеличена длина имени файла до 255 символов
Было добавлено кэширование имен файлов, для увеличения производительности.
Применено разбиение диска на группы цилиндров, чтобы i-узлы и блоки данных были поближе друг к другу, для каждой группы были свои:
- суперблок
- i-узлы
- блоки данных.
Это сделано для уменьшения перемещений галовок.
Используются блоки двух размеров, для больших файлов использовались большие блоки, для маленьких маленькие.
Каталоговые записи ни как не отсортированы и следуют друг за другом.
Каталог BSD с тремя каталоговыми записями для трех файлов и тот же каталог после удаления файла zip, увеличивается длина первой записи.
3.3 Файловые системы LINUX
Изначально использовалась файловая система MINIX с ограничениями: 14 символов для имени файла и размер файла 64 Мбайта.
После была создана файловая система EXT с расширением: 255 символов для имени файла и размер файла 2Гбайта.
Система была достаточно медленной.
3.3.1 Файловая система EXT2
Эта файловая система стала основой для LINUX, она очень похожа BSD систему.
Вместо групп цилиндров используются группы блоков.
Размещение файловой системы EXT2 на диске
Размер блока 1 Кбайт
Размер каждого i-узла 128 байт.
i-узел содержит 12 прямых и 3 косвенных адресов, длина адреса в i-узле стала 4 байта, что обеспечивает поддержку размера файла чуть более 16Гбайт.
Особенности работы файловой системы:
Создание новых каталогов распределяется равномерно по группам блоков, чтобы в каждой группе было одинаковое количество каталогов.
Новые файлы старается создавать в группе, где и находится каталог.
При увеличении файла система старается новые блоки записывать ближе к старым.
Благодаря этому файловую систему не нужно дефрагментировать, она не способствует фрагментации файлов (в отличии от NTFS), что проверено многолетним использованием.
3.3.2 Файловая система EXT3
В отличие от EXT2, EXT3 является журналируемой файловой системой, т.е. не попадет в противоречивое состояние после сбоев. Но она полностью совместима с EXT2.
Разработанная в Red Hat
В данный момент является основной для LINUX.
Драйвер Ext3 хранит полные точные копии модифицируемых блоков (1КБ, 2КБ или 4КБ) в памяти до завершения операции. Это может показаться расточительным. Полные блоки содержат не только изменившиеся данные, но и не модифицированные.
Такой подход называется "физическим журналированием", что отражает использование "физических блоков" как основную единицу ведения журнала. Подход, когда хранятся только изменяемые байты, а не целые блоки, называется "логическим журналированием" (используется XFS). Поскольку ext3 использует "физическое журналирование", журнал в ext3 имеет размер больший, чем в XFS. За счет использования в ext3 полных блоков, как драйвером, так и подсистемой журналирования нет сложностей, которые возникают при "логическом журналировании".
Типы журналирования поддерживаемые Ext3, которые могут быть активированы из файла /etc/fstab:
data=journal (full data journaling mode) - все новые данные сначала пишутся в журнал и только после этого переносятся на свое постоянное место. В случае аварийного отказа журнал можно повторно перечитать, приведя данные и метаданные в непротиворечивое состояние.
Самый медленный, но самый надежный.
data=ordered - записываются изменения только мета-данных файловой системы, но логически metadata и data блоки группируются в единый модуль, называемый transaction. Перед записью новых метаданных на диск, связанные data блоки записываются первыми. Этот режим журналирования ext3 установлен по умолчанию.
При добавлении данных в конец файла режим data=ordered гарантированно обеспечивает целостность (как при full data journaling mode). Однако если данные в файл пишутся поверх существующих, то есть вероятность перемешивания "оригинальных" блоков с модифицированными. Это результат того, что data=ordered не отслеживает записи, при которых новый блок ложится поверх существующего и не вызывает модификации метаданных.
data=writeback (metadata only) - записываются только изменения мета-данных файловой системы. Самый быстрый метод журналирования. С подобным видом журналирования вы имеете дело в файловых системах XFS, JFS и ReiserFS.
3.3.3 Файловая система XFS
XFS - журналируемая файловая система разработанная Silicon Graphics, но сейчас выпущенная открытым кодом (open source).
XFS была создана в начале 90ых (1992-1993) фирмой Silicon Grapgics (сейчас SGI) для мультимедийных компьютеров с ОС Irix. Файловая система была ориентирована на очень большие файлы и файловые системы. Особенностью этой файловой системы является устройство журнала - в журнал пишется часть метаданных самой файловой системы таким образом, что весь процесс восстановления сводится к копированию этих данных из журнала в файловую систему. Размер журнала задается при создании системы, он должен быть не меньше 32 мегабайт; а больше и не надо - такое количество незакрытых транзакций тяжело получить.
Более эффективно работает с большими файлами.
Имеет возможность выноса журнала на другой диск, для повышения производительности.
Сохраняет данные кэша только при переполнении памяти, а не периодически как остальные.
В журнал записываются только мета-данные.
Используются B+ trees.
Используется логическое журналирование
3.3.4 Файловая система RFS
RFS (RaiserFS) - журналируемая файловая система разработанная Namesys.
Официальная информация на RaiserFS
Более эффективно работает с большим количеством мелких файлов, в плане производительности и эффективности использования дискового пространства.
Использует специально оптимизированные b* balanced tree (усовершенствованная версия B+ дерева)
Динамически ассигнует i-узлы вместо их статического набора, образующегося при создании "традиционной" файловой системы.
Динамические размеры блоков.
3.3.4 Файловая система JFS
JFS (Journaled File System) - журналируемая файловая система разработанная IBM для ОС AIX, но сейчас выпущенная как открытый код.
Журналы JFS соответствуют классической модели транзакций, принятой в базах данных
В журнал записываются только мета-данные
Размер журнала не больше 32 мегабайт.
Асинхронный режим записи в журнал - производится в моменты уменьшения трафика ввода/вывода
Хотя это старая файловая система основные элементы используются и современных UNIX системах.
Имена файлов ограничены 14 символами ASCII, кроме косой черты "/" и NUL - отсутствие символа. (в последующих версиях расширены до 255)
Контроль доступа к файлам и каталогам.
Имена чувствительны к регистру, my.txt и MY.TXT это разные файлы.
Используется схема i-узлов.
Не делается различий между разными файлами (текстовыми, двоичными и д.р.).
Поддерживаются символьные специальные файлы (для символьных устройств ввода-вывода).
- Если открыть файл /dev/lp и записать в него данные, то данные будут распечатаны на принтере.
- Если открыть файл /dev/tty и прочитать из него данные, то получим данные, введенные с клавиатуры.
Поддерживаются блочные специальные файлы (для блочных устройств ввода-вывода, например /dev/hd1).
Позволяет монтировать разделы в любое место дерева системы.
Расположение файловой системы UNIX
Количество дисковых блоков
Начало списка свободных блоков диска
При уничтожении суперблока, файловая система становится не читаемой.
Каждый i-узел имеет 64 байта в длину и описывает один файл (в том числе каталог).
Каталог содержит по одной записи для каждого файла.
Каталоговая запись UNIX V7 в 16 байт
Первые 10 дисковых блоков файла хранятся в самом i-узле, при блоке в 1Кбайт, файл может быть 10Кбайт.
Дополнительные блоки для i-узла, в случае больших файлов:
Одинарный косвенный блок - дополнительный блок с адресами блоков файла, если файл не сильно большой, то один из адресов в i-узле указывает на дополнительный блок с адресами. Файл может быть 266Кбайт=10Кбайт+256Кбайт (256Кбайт
Двойной косвенный блок - дополнительный блок с адресами одинарных косвенных блоков, если одного дополнительного блока не хватает. Файл может быть 65Мбайт=10Кбайт+2^8Кбайт+2^16Кбайт.
Тройной косвенный блок - дополнительный блок с адресами двойных косвенных блоков, если одного одинарного косвенного блока не хватает. Файл может быть 16Гбайт=10Кбайт+2^8Кбайт+2^16Кбайт+2^24Кбайт.
3.1.1 Поиск файла
Этапы поиска файла по абсолютному пути /usr/sbin/mc
При использовании относительного пути, например sbin/mc, поиск начинается с рабочего каталога /usr.
3.1.2 Блокировка данных файла
Блокирование осуществляется по блочно.
Стандартом POSIX два типа блокировки:
Блокировка с монополизацией - больше ни один процесс эти блоки заблокировать не может.
Блокировка без монополизации - могут блокировать и другие процессы.
Блокировки данных файла без монополизации
Если процесс К попытается блокировать блок 6 с монополизацией, то сам процесс будет заблокирован до разблокирования блока 6 всеми процессами.
3.1.3 Создание и работа с файлом
fd=creat("abc", mode) - Пример создания файла abc с режимом защиты, указанном в переменной mode (какие пользователи имеют доступ). Используется системный вызов creat.
Успешный вызов возвращает целое число fd - дескриптор файла.
Который хранится в таблице дескрипторов файла, открывшего процесса.
После этого можно работать с файлом, используя системные вызовы write и read.
n=read(fd, buffer, nbytes)
n=write(fd, buffer, nbytes)
У обоих вызовов всего по три параметра:
fd - дескриптор файла, указывающий на открытый файл
buffer - адрес буфера, куда писать или откуда читать данные
nbytes - счетчик байтов, сколько прочитать или записать байт
Теперь нужно по дескриптору получить указатель на i-узел и указатель на позицию в файле для записи или чтения.
Таблица открытых файлов - создана для хранения указателей на i-узел и на позицию в файле. И позволяет родительскому и дочернему процессам совместно использовать один указатель в файле, но для посторонних процессов выделять отдельные указатели.
Связь между таблицей дескрипторов файлов, таблицей открытых файлов и таблицей i-узлов.
3.2 Файловая система BSD
Основу составляет классическая файловая система UNIX.
Особенности (отличие от предыдущей системы):
Увеличена длина имени файла до 255 символов
Было добавлено кэширование имен файлов, для увеличения производительности.
Применено разбиение диска на группы цилиндров, чтобы i-узлы и блоки данных были поближе друг к другу, для каждой группы были свои:
- суперблок
- i-узлы
- блоки данных.
Это сделано для уменьшения перемещений галовок.
Используются блоки двух размеров, для больших файлов использовались большие блоки, для маленьких маленькие.
Каталоговые записи ни как не отсортированы и следуют друг за другом.
Каталог BSD с тремя каталоговыми записями для трех файлов и тот же каталог после удаления файла zip, увеличивается длина первой записи.
3.3 Файловые системы LINUX
Изначально использовалась файловая система MINIX с ограничениями: 14 символов для имени файла и размер файла 64 Мбайта.
После была создана файловая система EXT с расширением: 255 символов для имени файла и размер файла 2Гбайта.
Система была достаточно медленной.
3.3.1 Файловая система EXT2
Эта файловая система стала основой для LINUX, она очень похожа BSD систему.
Вместо групп цилиндров используются группы блоков.
Размещение файловой системы EXT2 на диске
Размер блока 1 Кбайт
Размер каждого i-узла 128 байт.
i-узел содержит 12 прямых и 3 косвенных адресов, длина адреса в i-узле стала 4 байта, что обеспечивает поддержку размера файла чуть более 16Гбайт.
Особенности работы файловой системы:
Создание новых каталогов распределяется равномерно по группам блоков, чтобы в каждой группе было одинаковое количество каталогов.
Новые файлы старается создавать в группе, где и находится каталог.
При увеличении файла система старается новые блоки записывать ближе к старым.
Благодаря этому файловую систему не нужно дефрагментировать, она не способствует фрагментации файлов (в отличии от NTFS), что проверено многолетним использованием.
3.3.2 Файловая система EXT3
В отличие от EXT2, EXT3 является журналируемой файловой системой, т.е. не попадет в противоречивое состояние после сбоев. Но она полностью совместима с EXT2.
Разработанная в Red Hat
В данный момент является основной для LINUX.
Драйвер Ext3 хранит полные точные копии модифицируемых блоков (1КБ, 2КБ или 4КБ) в памяти до завершения операции. Это может показаться расточительным. Полные блоки содержат не только изменившиеся данные, но и не модифицированные.
Такой подход называется "физическим журналированием", что отражает использование "физических блоков" как основную единицу ведения журнала. Подход, когда хранятся только изменяемые байты, а не целые блоки, называется "логическим журналированием" (используется XFS). Поскольку ext3 использует "физическое журналирование", журнал в ext3 имеет размер больший, чем в XFS. За счет использования в ext3 полных блоков, как драйвером, так и подсистемой журналирования нет сложностей, которые возникают при "логическом журналировании".
Типы журналирования поддерживаемые Ext3, которые могут быть активированы из файла /etc/fstab:
data=journal (full data journaling mode) - все новые данные сначала пишутся в журнал и только после этого переносятся на свое постоянное место. В случае аварийного отказа журнал можно повторно перечитать, приведя данные и метаданные в непротиворечивое состояние.
Самый медленный, но самый надежный.
data=ordered - записываются изменения только мета-данных файловой системы, но логически metadata и data блоки группируются в единый модуль, называемый transaction. Перед записью новых метаданных на диск, связанные data блоки записываются первыми. Этот режим журналирования ext3 установлен по умолчанию.
При добавлении данных в конец файла режим data=ordered гарантированно обеспечивает целостность (как при full data journaling mode). Однако если данные в файл пишутся поверх существующих, то есть вероятность перемешивания "оригинальных" блоков с модифицированными. Это результат того, что data=ordered не отслеживает записи, при которых новый блок ложится поверх существующего и не вызывает модификации метаданных.
data=writeback (metadata only) - записываются только изменения мета-данных файловой системы. Самый быстрый метод журналирования. С подобным видом журналирования вы имеете дело в файловых системах XFS, JFS и ReiserFS.
3.3.3 Файловая система XFS
XFS - журналируемая файловая система разработанная Silicon Graphics, но сейчас выпущенная открытым кодом (open source).
XFS была создана в начале 90ых (1992-1993) фирмой Silicon Grapgics (сейчас SGI) для мультимедийных компьютеров с ОС Irix. Файловая система была ориентирована на очень большие файлы и файловые системы. Особенностью этой файловой системы является устройство журнала - в журнал пишется часть метаданных самой файловой системы таким образом, что весь процесс восстановления сводится к копированию этих данных из журнала в файловую систему. Размер журнала задается при создании системы, он должен быть не меньше 32 мегабайт; а больше и не надо - такое количество незакрытых транзакций тяжело получить.
Более эффективно работает с большими файлами.
Имеет возможность выноса журнала на другой диск, для повышения производительности.
Сохраняет данные кэша только при переполнении памяти, а не периодически как остальные.
В журнал записываются только мета-данные.
Используются B+ trees.
Используется логическое журналирование
3.3.4 Файловая система RFS
RFS (RaiserFS) - журналируемая файловая система разработанная Namesys.
Официальная информация на RaiserFS
Более эффективно работает с большим количеством мелких файлов, в плане производительности и эффективности использования дискового пространства.
Использует специально оптимизированные b* balanced tree (усовершенствованная версия B+ дерева)
Динамически ассигнует i-узлы вместо их статического набора, образующегося при создании "традиционной" файловой системы.
Динамические размеры блоков.
3.3.4 Файловая система JFS
JFS (Journaled File System) - журналируемая файловая система разработанная IBM для ОС AIX, но сейчас выпущенная как открытый код.
Журналы JFS соответствуют классической модели транзакций, принятой в базах данных
В журнал записываются только мета-данные
Размер журнала не больше 32 мегабайт.
Асинхронный режим записи в журнал - производится в моменты уменьшения трафика ввода/вывода
Хотя это старая файловая система основные элементы используются и современных UNIX системах.
Имена файлов ограничены 14 символами ASCII, кроме косой черты "/" и NUL - отсутствие символа. (в последующих версиях расширены до 255)
Контроль доступа к файлам и каталогам.
Имена чувствительны к регистру, my.txt и MY.TXT это разные файлы.
Используется схема i-узлов.
Не делается различий между разными файлами (текстовыми, двоичными и д.р.).
Поддерживаются символьные специальные файлы (для символьных устройств ввода-вывода).
- Если открыть файл /dev/lp и записать в него данные, то данные будут распечатаны на принтере.
- Если открыть файл /dev/tty и прочитать из него данные, то получим данные, введенные с клавиатуры.
Поддерживаются блочные специальные файлы (для блочных устройств ввода-вывода, например /dev/hd1).
Позволяет монтировать разделы в любое место дерева системы.
Расположение файловой системы UNIX
Количество дисковых блоков
Начало списка свободных блоков диска
При уничтожении суперблока, файловая система становится не читаемой.
Каждый i-узел имеет 64 байта в длину и описывает один файл (в том числе каталог).
Каталог содержит по одной записи для каждого файла.
Каталоговая запись UNIX V7 в 16 байт
Первые 10 дисковых блоков файла хранятся в самом i-узле, при блоке в 1Кбайт, файл может быть 10Кбайт.
Дополнительные блоки для i-узла, в случае больших файлов:
Одинарный косвенный блок - дополнительный блок с адресами блоков файла, если файл не сильно большой, то один из адресов в i-узле указывает на дополнительный блок с адресами. Файл может быть 266Кбайт=10Кбайт+256Кбайт (256Кбайт
Двойной косвенный блок - дополнительный блок с адресами одинарных косвенных блоков, если одного дополнительного блока не хватает. Файл может быть 65Мбайт=10Кбайт+2^8Кбайт+2^16Кбайт.
Тройной косвенный блок - дополнительный блок с адресами двойных косвенных блоков, если одного одинарного косвенного блока не хватает. Файл может быть 16Гбайт=10Кбайт+2^8Кбайт+2^16Кбайт+2^24Кбайт.
3.1.1 Поиск файла
Этапы поиска файла по абсолютному пути /usr/sbin/mc
При использовании относительного пути, например sbin/mc, поиск начинается с рабочего каталога /usr.
3.1.2 Блокировка данных файла
Блокирование осуществляется по блочно.
Стандартом POSIX два типа блокировки:
Блокировка с монополизацией - больше ни один процесс эти блоки заблокировать не может.
Блокировка без монополизации - могут блокировать и другие процессы.
Блокировки данных файла без монополизации
Если процесс К попытается блокировать блок 6 с монополизацией, то сам процесс будет заблокирован до разблокирования блока 6 всеми процессами.
3.1.3 Создание и работа с файлом
fd=creat("abc", mode) - Пример создания файла abc с режимом защиты, указанном в переменной mode (какие пользователи имеют доступ). Используется системный вызов creat.
Успешный вызов возвращает целое число fd - дескриптор файла.
Который хранится в таблице дескрипторов файла, открывшего процесса.
После этого можно работать с файлом, используя системные вызовы write и read.
n=read(fd, buffer, nbytes)
n=write(fd, buffer, nbytes)
У обоих вызовов всего по три параметра:
fd - дескриптор файла, указывающий на открытый файл
buffer - адрес буфера, куда писать или откуда читать данные
nbytes - счетчик байтов, сколько прочитать или записать байт
Теперь нужно по дескриптору получить указатель на i-узел и указатель на позицию в файле для записи или чтения.
Таблица открытых файлов - создана для хранения указателей на i-узел и на позицию в файле. И позволяет родительскому и дочернему процессам совместно использовать один указатель в файле, но для посторонних процессов выделять отдельные указатели.
Связь между таблицей дескрипторов файлов, таблицей открытых файлов и таблицей i-узлов.
3.2 Файловая система BSD
Основу составляет классическая файловая система UNIX.
Особенности (отличие от предыдущей системы):
Увеличена длина имени файла до 255 символов
Было добавлено кэширование имен файлов, для увеличения производительности.
Применено разбиение диска на группы цилиндров, чтобы i-узлы и блоки данных были поближе друг к другу, для каждой группы были свои:
- суперблок
- i-узлы
- блоки данных.
Это сделано для уменьшения перемещений галовок.
Используются блоки двух размеров, для больших файлов использовались большие блоки, для маленьких маленькие.
Каталоговые записи ни как не отсортированы и следуют друг за другом.
Каталог BSD с тремя каталоговыми записями для трех файлов и тот же каталог после удаления файла zip, увеличивается длина первой записи.
3.3 Файловые системы LINUX
Изначально использовалась файловая система MINIX с ограничениями: 14 символов для имени файла и размер файла 64 Мбайта.
После была создана файловая система EXT с расширением: 255 символов для имени файла и размер файла 2Гбайта.
Система была достаточно медленной.
3.3.1 Файловая система EXT2
Эта файловая система стала основой для LINUX, она очень похожа BSD систему.
Вместо групп цилиндров используются группы блоков.
Размещение файловой системы EXT2 на диске
Размер блока 1 Кбайт
Размер каждого i-узла 128 байт.
i-узел содержит 12 прямых и 3 косвенных адресов, длина адреса в i-узле стала 4 байта, что обеспечивает поддержку размера файла чуть более 16Гбайт.
Особенности работы файловой системы:
Создание новых каталогов распределяется равномерно по группам блоков, чтобы в каждой группе было одинаковое количество каталогов.
Новые файлы старается создавать в группе, где и находится каталог.
При увеличении файла система старается новые блоки записывать ближе к старым.
Благодаря этому файловую систему не нужно дефрагментировать, она не способствует фрагментации файлов (в отличии от NTFS), что проверено многолетним использованием.
3.3.2 Файловая система EXT3
В отличие от EXT2, EXT3 является журналируемой файловой системой, т.е. не попадет в противоречивое состояние после сбоев. Но она полностью совместима с EXT2.
Разработанная в Red Hat
В данный момент является основной для LINUX.
Драйвер Ext3 хранит полные точные копии модифицируемых блоков (1КБ, 2КБ или 4КБ) в памяти до завершения операции. Это может показаться расточительным. Полные блоки содержат не только изменившиеся данные, но и не модифицированные.
Такой подход называется "физическим журналированием", что отражает использование "физических блоков" как основную единицу ведения журнала. Подход, когда хранятся только изменяемые байты, а не целые блоки, называется "логическим журналированием" (используется XFS). Поскольку ext3 использует "физическое журналирование", журнал в ext3 имеет размер больший, чем в XFS. За счет использования в ext3 полных блоков, как драйвером, так и подсистемой журналирования нет сложностей, которые возникают при "логическом журналировании".
Типы журналирования поддерживаемые Ext3, которые могут быть активированы из файла /etc/fstab:
data=journal (full data journaling mode) - все новые данные сначала пишутся в журнал и только после этого переносятся на свое постоянное место. В случае аварийного отказа журнал можно повторно перечитать, приведя данные и метаданные в непротиворечивое состояние.
Самый медленный, но самый надежный.
data=ordered - записываются изменения только мета-данных файловой системы, но логически metadata и data блоки группируются в единый модуль, называемый transaction. Перед записью новых метаданных на диск, связанные data блоки записываются первыми. Этот режим журналирования ext3 установлен по умолчанию.
При добавлении данных в конец файла режим data=ordered гарантированно обеспечивает целостность (как при full data journaling mode). Однако если данные в файл пишутся поверх существующих, то есть вероятность перемешивания "оригинальных" блоков с модифицированными. Это результат того, что data=ordered не отслеживает записи, при которых новый блок ложится поверх существующего и не вызывает модификации метаданных.
data=writeback (metadata only) - записываются только изменения мета-данных файловой системы. Самый быстрый метод журналирования. С подобным видом журналирования вы имеете дело в файловых системах XFS, JFS и ReiserFS.
3.3.3 Файловая система XFS
XFS - журналируемая файловая система разработанная Silicon Graphics, но сейчас выпущенная открытым кодом (open source).
XFS была создана в начале 90ых (1992-1993) фирмой Silicon Grapgics (сейчас SGI) для мультимедийных компьютеров с ОС Irix. Файловая система была ориентирована на очень большие файлы и файловые системы. Особенностью этой файловой системы является устройство журнала - в журнал пишется часть метаданных самой файловой системы таким образом, что весь процесс восстановления сводится к копированию этих данных из журнала в файловую систему. Размер журнала задается при создании системы, он должен быть не меньше 32 мегабайт; а больше и не надо - такое количество незакрытых транзакций тяжело получить.
Более эффективно работает с большими файлами.
Имеет возможность выноса журнала на другой диск, для повышения производительности.
Сохраняет данные кэша только при переполнении памяти, а не периодически как остальные.
В журнал записываются только мета-данные.
Используются B+ trees.
Используется логическое журналирование
3.3.4 Файловая система RFS
RFS (RaiserFS) - журналируемая файловая система разработанная Namesys.
Официальная информация на RaiserFS
Более эффективно работает с большим количеством мелких файлов, в плане производительности и эффективности использования дискового пространства.
Использует специально оптимизированные b* balanced tree (усовершенствованная версия B+ дерева)
Динамически ассигнует i-узлы вместо их статического набора, образующегося при создании "традиционной" файловой системы.
Динамические размеры блоков.
3.3.4 Файловая система JFS
JFS (Journaled File System) - журналируемая файловая система разработанная IBM для ОС AIX, но сейчас выпущенная как открытый код.
Журналы JFS соответствуют классической модели транзакций, принятой в базах данных
В журнал записываются только мета-данные
Размер журнала не больше 32 мегабайт.
Асинхронный режим записи в журнал - производится в моменты уменьшения трафика ввода/вывода
В этой статье познакомимся с тем, какие файловые системы могут быть использованы в операционной системе Linux: ext, btrfs, xfs и с другими.
дизайн
Том UFS состоит из следующих частей.
-
блок раздела зарезервирован как загрузочный блок (необходимо инициализировать отдельно от файловой системы).
- Суперблок, содержащий магические числа для обозначения UFS, базовые значения для указания конфигурации файловой системы, статистику и параметры настройки.
- Набор групп цилиндров. Каждая группа цилиндров имеет следующие компоненты.
- Резервная копия Суперблока
- Заголовок группы цилиндров. Имеется информация, аналогичная Super Block, например, статистика группы цилиндров и свободный список. группа инодов . Информация об атрибутах файла хранится в каждом. Группа блоков данных .
Иноды нумеруются по порядку. Некоторые индексные дескрипторы после индексного дескриптора в корневом каталоге зарезервированы по историческим причинам.
Файл каталога содержит только имя файла в этом каталоге и соответствующий номер инода. Все метаданные о файле находятся в inode.
Читайте также: