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