Файловая система Linux: что скрывается под капотом?

Особенности файловой системы в ОС Linux, как ей управлять и что такое монтирование. Типы файлов и файловых системы в Линукс.

Обложка: Файловая система Linux: что скрывается под капотом?

Пользователям, которые знакомы только с Windows, файловые системы в Linux могут показаться очень странными. Никаких дисков C и D, как в винде, тут нет, вместо них — каталоги с непонятными буквенными обозначениями.

В целом структуру файловых систем (ФС) в Линукс определяет унифицированный стандарт FHS (Filesystem Hierarchy Standard), однако есть множество нюансов, в которых стоит разобраться, прежде чем работать с этой ОС.

Выясним, что собой представляет файловые системы, доступные в Linux, какие директории и типы файлов в них содержатся, как управлять ФС и что такое монтирование в Линуксе.

Общий обзор файловой системы Linux

Еще на стадии установки Linux предоставляет пользователю выбор файловой системы — разные типы ФС уже встроены в ядро ОС. Выбирать нужно в соответствии с требованиями и задачами владельца устройства, поскольку у каждой системы свои функциональные возможности. В Windows опции выбора нет — в этом одно из принципиальных отличий этой ОС от Linux.

Различается и иерархическое устройство ФС, а также структура каталогов. В Линукс поддерживается разбивка жесткого диска на разделы. В специальной таблице определяются физические границы разделов, где содержатся метки и адреса расположения начальных и конечных точек.

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

Правильный выбор файловой системы влияет на следующие показатели:

  • скорость выполняемых операций;
  • сохранность файлов;
  • скорость записи данных;
  • размер и другие параметры файлов. 

От типа файловой системы в Линукс зависит и то, будет ли информация сохраняться в оперативной памяти устройства и каким способом пользователь может воздействовать на конфигурацию ядра.

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

В Линукс ФС представляет собой пространство, разделенное на блоки определенных размеров, кратных 1024, 2048, 4096 байт и т.д. Вместимость блоков известна заранее и ограничена максимальным объемом ФС.

Обмен данными реализуется двумя способами:

  • С помощью VHS — виртуальной файловой системы. В таких системах ядро и установленные приложения работают совместно без учета особенностей конкретных ФС;
  • С помощью драйверов, отвечающих за обмен данными между железом и софтом. 

Список систем, поддерживаемых ядром, находится в файле /proc/filesystems. Наиболее востребованные ФС мы подробно рассмотрим в одном из следующих разделов.

Структура ФС и каталога

В Linux файловая система отвечает также за иерархию, то есть порядок распределения файлов. Структура подобна дереву — в основе лежит корневой каталог root directory, от которого отходят «ветви».

В такой ФС работает принцип целостности — изменения, которые внесли в один файл, никак не повлияют на другой, если он не связан напрямую с первым. Данные хранятся в физической памяти. Целостность системы можно проверить с помощью команды fsck.

В Linux используется несколько типов файлов. Часть из них повторяет аналогичные пакеты в Windows — это текстовые документы, медиа различного формата, музыка. Принципиальные различия начинаются с каталогов, представленных отдельными типами файлов.

Жесткие диски в такой структуре относятся в блочным устройствам, принтеры — к символьным, в отдельной группе — символические ссылки, о которых расскажем позднее. В типы файлов входят каналы взаимодействия между процессами и гнезда центрального процессора. Тип файла можно определить через команду ls.

Структура каталога выглядит следующим образом:

Структура файловой системы в Linux

Помимо единственного корневого раздела root, присутствуют подкаталоги, к которым привязаны соответствующие каталоги. Типовая структура первых двух уровней выглядит так:

├── bin -> usr/bin

├── boot

│ ├── grub

│ └── lost+found

├── dev

│ ├── block

│ └── …

├── etc

│ ├── …

│ ├── update-manager

│ ├── update-motd.d

│ └── xdg

├── home

├── lib -> usr/lib

├── lib32 -> usr/lib32

├── lib64 -> usr/lib64

├── libx32 -> usr/libx32

├── lost+found

├── media

├── mnt

├── opt

├── proc

│ ├── …

│ └── tty

├── root

├── run

│ └── …

├── sbin -> usr/sbin

├── srv

├── sys

├── tmp

│ └── …

├── usr

└── var

Каждый файл в ФС Линукса имеет конкретный индекс Inode. У одного файла в такой структуре может быть несколько имен, т.е. путей. В структуре системы файлы могут различаться, но на жестком диске им соответствует один файл. Такое свойство называют перекрестной иерархичностью — ветви дерева пересекаются.

Inode — индексный дескриптор, который используется в UNIX-системах. В нем хранятся все мета-данные о файле: владелец, время последнего обращения, размер, другая информация.

Каталог можно переместить в другую ФС, после этого его дескриптор будет создан заново. Только после этого исходник будет удален. В пределах одной системы изменится только путь файла. Каталоги и файлы существуют до момента, пока хранятся данные об их имени или пути к ним. При удалении этой информации блоки освобождаются под другие файлы.

В числе других особенностей Linux — ссылки двух типов:

  • жесткая ссылка (то есть hard link) — путь файла, заданный командой ls -li;
  • символьная ссылка (symbolic link) — файл стандарта UNIX с текстовой строкой, задающей путь к оригинальному файлу.

Существует также суперблок, где хранятся все параметры ФС — общее количество блоков и Inode, наличие свободных блоков и данные о них. Суперблок должен сохранять целостность — это напрямую влияет на стабильность и работу всей системы. Для безопасности в Линукс создается несколько копий для восстановления информации в случае ее потери.

Ключевые директории и их назначение

В Linux директория — фундаментальный элемент системы. Это каталог (папка), где содержатся другие файлы, расположенные согласно иерархии. Отправной точкой, а точнее, базой выступает корневой каталог «/», на котором выстраивается вся система.

В некоторых источниках этот каталог сравнивают с диском С на винде, но это не совсем корректное сравнение — в Линуксе нет буквенных дисков. В Windows дополнительный раздел расположен на диске D, в Линукс это будет отдельная папка с тем же корнем. Иными словами, путь к любому файлу проходит через корень.

Пример. Файл /home/user/alien имеет структуру root -> home -> user -> documents, и никакую другую.

Рассмотрим наиболее востребованные директории и их функции.

Пользовательские файлы /bin и /sbin

В этой директории расположены бинарные исполняемые файлы, которые требуются для загрузки системы и ее работы. Именно здесь вы найдете команды ls, cp, grep, mv, ping и прочие утилиты, доступные каждому юзеру. В /usr/bin хранятся и такие приложения, как браузер Chrome, Firefox и другие.

В каталоге /sbin, который имеет схожую конфигурацию, содержатся важные исполняемые файлы для системного администрирования. Это iptables, reboot, fdisk и т.д..

Пользовательские данные /home (домашняя папка)

В этом каталоге хранится домашняя папка с личными файлами и настройками. Например, если ваше имя юзера — denis, у вас будет домашняя папка /home/denis. Сюда записываются, например, скачанные файлы. Если пользователей несколько, они будут записывать файлы в свои папки. Для изменения других системных файлов потребуются права root.

Конфигурационные файлы /etc

Это место хранения файлов конфигурации — сетевых настроек, приложений, файлов инициализации различных служб (серверов печати, хостов и т.д). Папка крайне важна для работы всей системы. При необходимости общие файлы можно редактировать вручную в текстовом редакторе.

Файлы устройств /dev и системные файлы /proc

В директории /dev хранятся интерфейсы системных и периферийных устройств — дисков, принтеров, динамиков и прочих. В Линуксе устройства представлены в виде файлов. Стоит понимать, что это не совсем файлы в том виде, к которому мы привыкли. Псевдоустройства из этого каталога — это, например, генераторы случайных чисел /dev/random.

Файлы ядра и процессов содержатся в каталоге /proc. В нем, как и в /dev, нет стандартных файлов, а есть специфические области данных о системах и процессах. Здесь есть информация о процессоре /proc/cpuinfo; сведения о памяти, используемой системой — /proc/meminfo; время — /proc/uptime. Тут же содержится информация о системных ресурсах.

Переменные (изменяемые) данные /var

В этой директории лежат данные, которые в процессе работы системы постоянно меняются. Сюда относятся логи, кэши, системные журналы, почтовые очереди и прочие файлы, создаваемые программами.

Это записываемая директория, которая в стандартном режиме доступна только для чтения. Логи содержатся в /var/log, базы данных в /var/lib, файлы для перезагрузки в /var/tmp.

Статические файлы для загрузки /boot

Это важные файлы для загрузки ОС, в том числе ядра Линукс. Запуск системы без этой папки проблематичен. При этом файлы конфигурации загрузчика находятся в другой папке — /etc, о которой мы писали выше.

Общие файлы библиотеки /lib

В директории /lib находятся файлы, которые обеспечивают работу системных программ и ядра. Эти данные приложения и бинарные файлы /bin и /sbin используют для выполнения заданных функций.

Съемный носитель /media

В этом директории монтируются съемные носители. К примеру, когда вы используете компакт-диск или флешку, автоматически создается каталог. Юзеры получают полный доступ к содержимому носителей.

Временные файлы /tmp

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

Восстановленные данные /lost+found

В любой ФС Linux есть такая директория. Если в системе случится сбой, при следующей загрузке произойдет автоматическая проверка, и любые обнаруженные поврежденные файлы отправятся в каталог /lost+found, чтобы пользователь при необходимости смог восстановить данные.

Файлы состояния приложений /run

Относительно новая директория в Линукс. Здесь хранятся необходимые приложениям временные файлы — сокеты, идентификаторы процессов и другие. В отличие от каталога /tmp данные в /run нельзя удалить.

Типы файлов в Linux

Линукс подчиняется концепции «Всё есть файл», то есть работа с системой — это по сути взаимодействие с файлами. Применяются разные файлы, используемые как для стандартных данных, так и для устройств.

Плюс этой концепции в том, что система не тратит ресурсы на реализацию отдельных API для каждого приложения, так как все стандартные программы и процессы реализуются через работу с файлами.

Рассмотрим типы файлов, которые используются в Linux:

  • Обычные (regular). Это стандартные файлы, используемые чаще других — данные, текст, исходный код, медиа и все остальное;
  • Файлы устройств. Сюда входят символьные и блочные файлы (char и block devices), представляющие внешние устройства — принтеры, жесткий диск и другие;
  • Именованные каналы. Файлы named pipes требуются для взаимодействия между процессами и передачи данных;
  • Ссылки. Используется два типа ссылок. Символические (так называемые симлинки) — работают как ярлыки для указания других каталогов и файлов; жесткие — отвечают за альтернативные способы доступа к физическим данным на диске и выступают дубликатами файлов, но без их фактического дублирования;
  • Каталоги. Папки со ссылками на файлы и другие папки. Отвечают за организацию данных и их распределение по категориям, упрощают доступ к различным разделам;
  • Сокеты. Файлы, предназначенные для обмена данными при выполнении рабочих задач. Используются как внутри системы, так и при взаимодействии устройств друг с другом. По сути, это своего рода почтовые службы, с помощью которых программы пересылают информацию друг другу;
  • Двери. Еще один механизм, ответственный за взаимодействие между процессами. 

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

Управление файловой системой

Через консоль управления (терминал) в Linux доступен целый арсенал для работы с директориями и файлами.

Основные команды управления:

  • Is. Просмотр содержимого папки и навигация. При использовании с различными опциями возможности расширяются, например, команда ls -l создает  подробный список;
  • cd. Путь к папке — меняет текущую директорию на указанную пользователем;
  • pwd. Обозначает текущие местоположение юзера в структуре каталогов;
  • mkdir. Используется для создания новой папки с присвоением ей имени;
  • cp. Копирует файлы из исходной папки в целевую;
  • mv. Перемещает или переименовывает каталоги и файлы;
  • rm. Удаляет указанные файлы;
  • cat. Выводит содержимое указанного файла в окно панели управления;
  • less. Используется для постраничного пролистывания файла;
  • touch. Создает новый пустой файл (с новым именем);
  • ln -s. Генерирует символьную ссылку, указывающую на выбранный каталог или файл;
  • which. Демонстрирует пошаговый путь к исполняемым файлам;
  • nano. Используется для текстовой редактуры файла;
  • locate. Применяется для поиска файлов по заданным шаблонам. 

Указанные выше команды формируют основу для взаимодействия с ФС. При необходимости используется более расширенный список.

Монтирование и файловые системы Linux

Монтирование — подключение файловых систем, жестких дисков и внешних носителей, получение доступа к ним, ручное и автоматическое отключение. При загрузке ядро устройства на Linux автоматически монтирует разделы, считывая данные из конфигурации /etc/fstab.

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

Монтирование системы реализуется с помощью команд mount и umount, подготавливающих устройства и точки монтирования. Они реализуют автоматическое подключение ФС. К виртуальной машине подключается диск /dev/sdc, на котором создаются разделы для файловой системы. После создания точки монтирования процесс загрузки ФС запускается.

Какие файловые системы на Linux наиболее востребованные:

  • Ext. Первая ФС, разработанная специально для Линукс. Система значительно превзошла предыдущие решения по производительности и функционалу;
  • Ext2. Улучшенная версия первой ФС. Повышает надежность, улучшает управление и позволяет работать с большим количеством данных и файлов;
  • Ext3. Третье поколение ФС для Линукс. Поддерживает журналирование, что делает работу более стабильной и минимизирует риски потери данных после сбоев системы;
  • Ext4. Новейшая версия с повышенной эффективностью и масштабируемостью. Технически более совершенный вариант, упрощающий работу с большим объемом данных; 
  • JFS. Разработка компании IBM. Эффективно использует ресурсы, отличается высокой производительностью, рассчитана на сильные нагрузки;
  • XFS. Высокопроизводительная ФС, разработанная компанией SGI. Подходит для работы с серверами и системами хранения данных; 
  • ReiserFS. Разработка программиста Ганса Райзера. Главная особенность — возможность при необходимости увеличивать размер блока, тем самым избегая фрагментации;
  • Btrfs. Продукт компании Oracle. Обеспечивает гибкость при управлении данными, предоставляет опции оперативной проверки и восстановления файлов, интегрирует разные устройства в единую ФС; 
  • Swap. Позволяет использовать дисковое пространство как виртуальную память, если физические возможности RAM исчерпаны. Технически этот инструмент нельзя назвать файловой системой, но он обеспечивает широкие возможности для управления данными в Линукс. 

ОС Linux уникальна в плане адаптации к разным сценариям использования, поскольку поддерживает работу многих файловых систем. Функциональное разнообразие обогащает платформу, позволяя тестировать и внедрять в практику множество полезных инноваций.

При этом у пользователя всегда есть свобода выбора — например, между стабильностью линейки Ext и гибкими возможностями файловых систем XFS, JFS. Безграничные возможности выбора отражают дух сообщества Linux, где независимые разработчики постоянно предлагают новые решения, обеспечивая постоянное развитие экосистемы.