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

Файоловая система в Linux — что это и зачем она нужна

225 открытий921 показов
Файловая система 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: что скрывается под капотом? 1
Структура файловой системы в 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, где независимые разработчики постоянно предлагают новые решения, обеспечивая постоянное развитие экосистемы.
Следите за новыми постами
Следите за новыми постами по любимым темам
225 открытий921 показов