Файловая система Linux
В этой статье мы поговорим про файловую систему Linux. Но здесь вы не найдете описания тонкостей работы с определенной файловой системой, например, ext4, а также не найдете команд для работы с какой-либо ФС. Мы остановимся на более общих понятиях и попытаемся разобраться что такое файловая система, и как она работает в целом.
Каждый компьютер сохраняет данные и результаты на жестком диске, твердотельном накопителе SSD или любом другом носителе информации, это неизбежно. Для этого есть несколько причин. Во-первых, содержимое RAM очищается при каждой перезагрузке компьютера. Конечно, есть быстрые энергонезависимые устройства хранения, такие как флеш память, но они стоят намного дороже, чем стандартные модули DDR3.
Вторая причина хранить данные на диске, это то, что оперативная память намного дороже чем более медленные, но вместительные жесткие диски. Фактически 16 Гб оперативной памяти будет стоить столько же, сколько жесткий диск на 2 Тб. Таким образом, мы видим, что оперативная память в 71 раза дороже чем HDD.
Что такое файловая система?
Люди могут подразумевать под файловой системой совсем разные понятия. Само словосочетание может иметь несколько значений и вам придется понимать о чем идет речь из контекста документа.
Давайте рассмотрим наиболее часто используемые значения слов файловая система. Мы не будем останавливаться на официальной трактовке, а попытаемся обратить внимание на сферу применения:
- Все структура каталогов Linux, начиная с корня (/);
- Конкретный формат раздела хранения данных, например, Ext3, Ext4, Btrfs, XFS и так далее. Ядро Linux поддерживает более 100 типов файловых систем, в том числе очень старых и новых. Каждый тип файловой системы использует свои структуры метаданных чтобы организовать работу с данными на диске;
- Раздел или логический том, отформатированный в определенный тип файловой системы, который можно примонтировать к определенной точке монтирования.
Дальше рассмотрим как выполнена организация файловой системы Linux и ее основные функции.
Основные функции файловой системы
Необходимость использования дисковых хранилищ приносит некоторые особенности работы файловых систем. Основная функция файловой системы — предоставление организованного пространства для хранения файлов на энергонезависимом запоминающем устройстве. Но есть несколько дополнительных функций, которые вытекают из основной.
Все файловые системы должны обеспечивать пространство имен. Оно определяет как будут называться файлы, ограничения на длину имени, используемые символы, а также логическую структуру данных на диске, например, использование каталогов для организации файлов, а не просто складывания их в одном месте.
Когда пространство имен определено, необходимо создать для него основу с помощью метаданных файловой системы. Она включает в себя структуры данных для создания иерархии каталогов, структуры для хранения занятых и свободных блоков на диске, структуры с именами файлов и каталогов, информацией о файлах, такой как размер, время создания, расположение файла на диске и так далее. В самих блоках файла на диске хранится только его содержимое, вся же остальная информация находится в метаданных.
Также метаданные используются для описания логических томов и подразделов, если таковые поддерживаются, и еще одни содержат информацию, описывающую файловую систему.
Для доступа к файлам также необходим набор функций API, с помощью которых программы могли бы управлять различными объектами файловой системы. Обычно должны существовать методы для создания, перемещения и удаления файлов.
Современные файловые системы также обеспечивают модель безопасности, которая представляет из себя схему прав доступа к файлам для пользователей. Модель безопасности ФС в Linux гарантирует что пользователи будут иметь доступ только к своим файлам.
Дальше, нам нужно программное обеспечение, которое будет выполнять все эти функции. Организация файловой системы linux состоит из двух частей:
Первая часть — это виртуальная файловая система. Она представляет собой единый набор команд ядра, с помощью которого разработчики могут получить доступ к любой из файловых систем. Виртуальной файловой системе необходим драйвер для работы с различными типами ФС. Драйвера файловой системы — это вторая часть реализации, в них реализован стандартный набор команд, выполняющих специфичные для файловой системы действия.
Структура каталогов
Намного проще найти файлы, если они хранятся небольшими группами, каждый на своем месте, а не все в одной куче. Структуру файловой системы Linux можно представить в виде простой иерархии. Все каталоги находятся в корневом каталоге (/) поэтому каждый адрес файла начинается с него. Например, /var/log/dmesg, /usr/share/, /bin.
Корневая файловая система Linux — это ФС верхнего уровня, она должна содержать все файлы, необходимые для загрузки Linux еще до того как другие файловые системы будут смонтированы. Здесь уже должны быть все исполняемые файлы и библиотеки, нужные для подключения других ФС. Во время загрузки другие файловые системы монтируются в четко определенные для них каталоги. Более детально предназначение каждого каталога Linux мы рассматривали в статье структура файловой системы Linux.
Каталоги /bin, /dev, /etc, /lib, /root, /sbin не могут быть примонтированы и должны быть доступны еще до загрузки, так как в них находятся все необходимые файлы. Что касается каталогов /media и /mnt, то они должны быть пустыми, поскольку это точки монтирования для других файловых систем. Остальные каталоги можно смело монтировать позже, они никак не повлияют на запуск.
В некоторых не Unix операционных системах разделам присваиваются отдельные буквы, например, C: или D:. В них каждый раздел будет иметь отдельную файловую систему. Чтобы найти нужный файл на диске C: вам необходимо сначала выполнить команду C:, а затем искать путь к файлу.
В Linux все физические диски и разделы, объеденные в одну файловую структуру. Она начинается с корня (/) в котором расположены все другие каталоги. Это работает потому что файловые системы /var, /home, /boot, /tmp и т д могут находиться на других физических дисках. Даже съемные диски подключаются в основную файловую систему.
И это очень хорошо, потому что при обновлении версии дистрибутива можно сохранить абсолютно все файлы и настройки в домашнем каталоге. Иногда полезно переформатировать корневой раздел чтобы убрать оттуда весь мусор, если /home находится на отдельном разделе, то вы ничего не потеряете. Есть и другие причины так поступать, например, защита корневой ФС от переполнения, что привело бы к неработоспособности системы.
Типы файловых систем
Как уже было сказано, Linux поддерживает более 10 различных файловых систем, но создавать и выполнять запись, возможно, только в некоторые из них. Зато можно подключить их все к корневой файловой системе. Под типом мы подразумеваем совокупность структур и метаданных, необходимых для хранения файлов.
Linux может монтировать и читать такие файловые системы:
Основная причина почему они поддерживаются — это попытка организовать максимальную совместимость с другими операционными системами. А вот основные файловые системы linux, которые можно создавать:
Мы более подробно рассматривали особенности некоторых из них в статье типы файловых систем Linux.
Монтирование файловых систем
Термин смонтировать появился еще в самом начале развития Linux, тогда было необходимо вставить кассету или съемный диск в специальный привод. Только после этого можно было получить доступ к файловой системе устройства.
Точка монтирования — это обычный каталог, как любая другая часть файловой системы. Например, домашняя папка смонтирована в каталог /home. И так далее.
Корневая файловая система ос Linux / подключается на раннем этапе загрузки. Другие файловые системы монтируются системой инициализации, например, SysVinit или Systemd. Точки монтирования настраиваются с помощью файла /etc/fstab. Также можно выполнять ручное монтирование в Linux с помощью команды mount. Каталог для монтирования необязательно должен быть пустым, он может содержать файлы, но тогда они будут просто скрыты.
Выводы
Эта статья была ориентирована на новичков и я надеюсь, что некоторые вопросы, касаемо термина файловая система linux были сняты. Теперь вы можете оценить элегантность, сложность и функциональность файловой системы Linux. Если у вас есть вопросы, спрашивайте в комментариях!
Файловая система в ОС Linux
Что такое файловая система?
Так же, современные ОС Linux совместимы с файловыми системами (ФС дальше), используемыми ОС Windows, такими как NTFS и FAT32, но применение данных ФС в Linux крайне не желательно по причине этого, что данные ФС разрабатывались под ОС Windows и поддержка Windows-разделов ядром Linux выполнена с помощью сторонних утилит/драйверов/модулей, что прикладывает некоторые ограничения (например, согласно проекту Linux-NTFS на сегментах с NTFS поддерживается практически только чтение (запись — только в существующие файлы без изменения их размера), так же ОС Linux не обладает возможности разграничивать права доступа к файлам на сегментах NTFS. Операционная система (ОС далее) Linux удерживает множество файловых систем, в настоящее время более широко используются: ext2, ext3,ext4, reiserfs. Данная ситуация со порой может поменяться.
В Linux объектами файловой системы представляются: процессы, устройства, структуры данных ядра и характеристики настройки, каналы межзадачного взаимодействия, папки, и, безусловно, обычные файлы. К недостаткам относится реализация файловой системы по способу Франкенштейна.
Файловая система состоит из четырех главных компонентов: Такое устройство файловой системы обладает как преимущества, так и недостатки. Файловая система — это единая иерархическая конструкция, которая начинается с каталога / и разветвляется, охватывая случайное число каталогов.
Несмотря на то, что основным назначением файловой системы представляется упорядочение хранимых ресурсов, программистам не очень желалось бы «изобретать велосипед» для управления объектами других типов. К превосходствам относится единый программный интерфейс, легкость доступа из интерпретатора бригад.
- Пространство имен — методы именования объектов и компании в виде единой иерархии
- API — набор системных призывов для перемещения между объектами и управления ими
- Методы сохранности — схема защиты, сокрытия и совместного использования объектен
- Реализация — программный код, который связывает логические модификации с дисковой подсистемой
В повседневной работе вы даже не станете замечать, какую именно файловую систему теперь используете. От файловой системы зависит очень значительное, скорость работы с файлами, скорость записи и простонар размер файлов. Простейшие команды, например ls или cp, управление преимуществами доступа и др. — все это работает независимо от файловой системы. Абсолютно всем этим занимается файловая система. Также от устойчивости файловой системы будет зависеть сохранность ваших файлов.
Файловые системы Linux приноровлены для установки Linux и работы с ней. Чтобы на каждом разделе возможно было работать с файлами и каталогами, необходима файловая система. Мы имели возможность бы писать просто содержимое файлов на диск, но необходимо еще где-то хранить данные о папках, имена файлов, их габарит, адрес на жестком диске, атрибуты доступа.
К данным признакам относятся: скорость обработки внушительных по габариту файлов или большого количества сравнительно небольших файлов, результативность выполнения операций считывания и записи, нагрузка, показываемая на процессор, функция журналирования (меры, предпринимаемые после авантюристичного прекращения работы системы), функции квотирования (вероятность ограничить максимальное потребление памяти на пользователя), сопоставимость с NFS, дополнительные затраты энергии на управление системой, помощь дополнительных прав доступа (ACL), совместимость с SELinux и т. д. Файловые системы выделяются по признакам, представляющим интерес в первую очередь для многоопытных пользователей либо для тех, кто работает с сервером.
Устройство файловых систем ОС Linux
А сам по себя список inodes, соответствующих как существующим файлам, так и независимым блокам дискового раздела, и определяет границы файловой системы, то имеется сколько файлов может быть в ней создано. В данном разделе будет говориться о предметах, общих для абсолютно всех Linux. Все файлы в Linux физически состоят из 2 частей, реально локализованных в различных блоках атриторного накопителя, но обязательно находящихся в одном дисковом разделе, основном или логическом. Первая часть файла — его так называемые метаданные, какие содержат файловый дескриптор (это просто некое чудесное число), сведения о его атрибутах (принадлежности, правах доступа, времени изменения и т.д.), а также информацию о том, в каких блоках атриторного раздела (которые так и называются — блоки данных) физиологически размещено содержимое файла — те самые последовательности б, которые образуют доступный пользователю ASCII-текст или выполняемый модуль программы. Метаданные каждого файла вписаны в специальной области диска, называемой суперблоком, где образуют т.н. inodes (от information nodes — информативные узлы). Каждому существующему файлу соответствует собственный inode, и именно он однозначно идентифицируется файловым дескриптором.
Так вот, сущность процесса создания файловой системы на дисковом разделе (или, в осмысливании DOS/Windows, его форматирования) — в создании на нем суперблока (или, в некоторых файловых системах, многих его копий), списка inodes и отведении дискового места под блоки данных (а также загрузочного блока, о каком будет сказано ниже), а устройством этих атриторных областей определяются различия между файловыми системами разных типов. В результате на новом разделе образуется один-единственный файл — каталог корневого (для данной файловой системы) разоблачила (в некоторых случаях создается еще и каталог /lost+found, нужный для хранения нарушенных файлов).
Ответ прост: в Linux имя представляет собой атрибут не файла, но файловой системы (в 5-ом, логическом, понимании термина). Поэтому идущая от MacOS и деятельно используемая в Windows метафора каталога как папки с бумагами — в Linux только затемняет суть дела: тут это скорее именно каталожный ящик в библиотеке. Выясняет вопрос, почему такой, казалось бы неотъемлемый, свойство файла, как его имя, не обнаруживается ни в его метаданных, ни, тем более, среди его этих. Они представляют собой просто списки файловых дескрипторов идентификаторов и определенных им имен файлов. И для хранения имен файлов нужны файлы особого типа — каталоги (в Linux имеется и другие типы файлов, например, упомянутые реке файлы устройств).
Не смотря на столь простое механизм, роль каталогов в файловой системе Linux нелегко переоценить: имена файлов, через которые они врубаются в файловую систему (и через которые пользователь приобретает доступ к их содержимому), фигурируют только в составе каталога, к какому файл приписан — и больше нигде в системе. Только так осуществляется удаление файла командой rm или файловым клерком типа Midnoght Commander. Так что удаление имени файла (или подсправочника) из списка, представляющего собой данные его родительского каталога (какой, конечно, также имеет свой inode и файловый дескриптор, сваленный к каталогу, расположенному уровнем выше в иерархии файловой системы, и так дальше) равносильно тому, что метаданные файла становится недосягаемыми, а приписанные к его inode блоки данных помечаются как независимые.
Кроме того, в inode ее корневого каталога ставится т.н. бит чистого размонтирования (clean bit). Пока же рассмотрим характерные черты файловых систем, используемых в Linux’е. Обратный процесс — размонтирование, последствием чего является отсоединение от точки монтирования бревна смонтированной файловой системы. Из сказанного понятно, что для данного она со всем ее содержимым (суперблоком, списком inode, блоками этих) должна быть включена в состав какого-либо из имеющийся каталогов, называемого точкой монтирования. Именно это и сочиняет суть процесса монтирования. Впрочем, вопросам монтирования и размонтирования файловых систем станет посвящена специальная статья. Результат же для монтируемой файловой системы — в том, что ее крупнокорневой каталог (до сих пор безымянный) получает имя каталога — точки монтирования (mount point), содержание которого отныне составляет список имен ее файлов и подсправочников. Нас, однако, сейчас интересует прямо противоположное — делать файловую систему доступной.
Типы файловых систем в ОС Linux
Из-за этому после сбоя электропитания файловая система постоянно автоматически возвращается в рабочее состояние. Существует достаточно много разных файловых систем, которые выделяются друг от друга внутренним устройством, однако user везде найдёт привычную структуру из вложенных каталогов и файлов. Есть несколько типов файловых систем, которые в целой мере поддерживают все возможности, необходимые для полноценной службы Linux (все необходимые типы и атрибуты файлов, в том количестве права доступа). Журналируемая файловая система водит постоянный учёт всех операций записи на диск. Файловые системы отличаются скоростью доступа, надёжностью хранения данных, ступенью устойчивости при сбоях, некоторыми дополнительными возможностями. Нынешние операционные системы поддерживают по несколько типов файловых систем (кроме файловых систем, используемых для хранения данных на твердом диске, также файловые системы CD и DVD и пр.). Впрочем для каждой операционной системы обычно есть одна «классическая» файловая система, которая предлагается по умолчанию, представляется универсальной и подходит абсолютному большинству пользователей. Любой дистрибутив Linux позволяет использовать одну из данных файловых систем, каждая из них имеет свои превосходства и недостатки: Важное свойство файловых систем — помощь журналирования.
Описание файловых систем в ОС Linux
Далее мы рассмотрим типы файловых систем Linux, вводя специальные файловые системы. В 2001 году вышла ext3, какая добавила еще больше стабильности благодаря использованию журналирования. В ней было привнесено много улучшений, в том числе увеличен максимальный габарит раздела до одного экзабайта. Она самая стабильная из абсолютно всех существующих, кодовая база изменяется очень крайне редко и эта файловая система содержит больше всего функций. В 2006 была отпущена версия ext4, которая используется во всех дистрибутивах Linux до нынешнего дня. Файловые системы в Linux используются не только для службы с файлами на диске, но и для хранения данных в оперативной памяти или доступа к конфигурации ядра во время службы системы. Версия ext2 была разработана уже именно для Linux и заполучила много улучшений. Ext2, Ext3, Ext4 или Extended Filesystem – это стандартная файловая система для Linux. Она была изобретена еще для Minix.
При разработке файловой системы ставилась мишень создать максимально эффективную файловую систему для мультипроцессорных компьютеров. Сейчас она используется там, где необходима высокая стабильность и наименьшее потребление ресурсов. Также как и ext, это журналируемая файловая система, но в журнальчике хранятся только метаданные, что может привести к применению старых версий файлов после сбоев. JFS или Journaled File System была изобретена в IBM для AIX UNIX и использовалась в качестве альтернативы для файловых систем ext.
Ранее ReiserFS применялась по умолчанию в SUSE Linux, но теперь разработчики перешли на Btrfs. Она была разработана под управлением Ганса Райзера и поддерживает только Linux. Из необыкновенностей можно отметить динамический размер блока, что дозволяет упаковывать несколько небольших файлов в один блок, что предупреждает фрагментацию и улучшает работу с небольшими файлами. Но минус в отдельной нестабильности и риске потери данных при отключении энергии. ReiserFS – была изобретена намного позже, в качестве альтернативы ext3 с улучшенной продуктивностью и расширенными возможностями. Еще одно преимущество – в возможности менять размеры разделов на лету.
Из преимуществ файловой системы возможно отметить высокую скорость работы с большими файлами, зарезервированное выделение места, увеличение разделов на лету и ничтожный размер служебной информации. Она изначально была уволена на файлы большого размера, и поддерживала диски до 2 Терабайт. XFS – это производительная файловая система, разработанная в Silicon Graphics для свой операционной системы еще в 2001 году.
Из недостатков – это неосуществимость уменьшения размера, сложность восстановления данных и риск утраты файлов при записи, если будет неожиданное отключение кормления, поскольку большинство данных находится в памяти. Она утилизируется по умолчанию в дистрибутивах на основе Red Hat. XFS – журналируемая файловая система, хотя в отличие от ext, в журнал записываются только изменения метаданных.
Но многочисленными пользователями файловая система Btrfs считается неустойчивой. Btrfs или B-Tree File System – это совершенно новоиспеченная файловая система, которая сосредоточена на отказоустойчивости, свободности администрирования и восстановления данных. Тем не менее, она уже используется как файловая система по умолчанию в OpenSUSE и SUSE Linux. Файловая система соединяет в себе очень много новых интересных способностей, таких как размещение на нескольких разделах, поддержка подтомов, модифицирование размера не лету, создание мгновенных снимков, а вдобавок высокая производительность.
Другие файловые системы, подобные как NTFS, FAT, HFS могут использоваться в Linux, но корневая файловая система linux на них не ставится, поскольку они для этого не предназначены.
Специальные файловые системы в ОС Linux
Ядро Linux утилизирует специальные файловые системы, чтобы предоставить доступ юзеру и программам к своим настройкам и информации. Наиболее довольно частенько вы будете сталкиваться с такими вариантами:
Довольно создать блочное устройство нужного размера, потом подключить его к папке, и вы можете писать файлы в эксплуатационную память. Файловая система tmpfs позволяет помещать любые пользовательские файлы в оперативной памяти ПК.
procfs — по умолчанию смонтирована в папку proc и включает всю информацию о запущенных в системе процессах, а также самый-самом ядре.
sysfs — с помощью этой файловой системы вы сможете задавать различные настройки ядра во время исполнения.
Виртуальные файловые системы в ОС Linux
Разработчики ядра досоздали модуль FUSE ( filesystem in userspace), который дозволяет создавать файловые системы в пространстве пользователя. К условным файловым системам можно отнести ФС для шифрования и сетные файловые системы.
EncFS — файловая система, какая шифрует все файлы и сохраняет их в зашифрованном виде в необходимую директорию. Не все файловые системы нужны в ядре. Имеется даже очень экзотические варианты, обратите вниманье на проект PIfs. Существуют некоторые решения, какие можно реализовать и в пространстве пользователя. Получить доступ к дешифрированным данным можно только примонтировав файловую систему.
Aufs (AnotherUnionFS) — дозволяет объединять несколько файловых систем (папок) в одну всеобщую.
NFS (Network Filesystem) — позволяет примонтировать файловую систему далёкого компьютера по сети.
Таких файловых систем весьма много, и мы не будем перечислять все их в данной статье.
Как узнать файловую систему в ОС Linux?
Оказывается, что команда file сможет дать много информации не только об обычных файлах, но и о файлах механизмов (вспомните, что в Linux всё есть файл). Иногда случается необходимо узнать файловую систему раздела диска в Linux. Установить файловую систему для смонтированных разделов можно с поддержкою команды df с ключем -T. Если же раздел не смонтирован, то выручит команда file с ключем -s, как указано выше. Пример, чтобы определить, какая файловая система на разделе /dev/sda1, накопите в командной строке команду file с ключем -s. Как это постоянно бывает в системах типа Linux/UNIX, спрашиваемый результат можно получить множеством способов.