Файловые системы

Файловая система (далее – ФС) определяет способ организации и хранения данных на носителях информации, таких как жесткие диски, SSD- и USB-накопители. Она управляет тем, как данные записываются, хранятся и читаются с устройств хранения, предоставляя структуру каталогов и файлов.

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

ОС поддерживает различные ФС для обеспечения гибкости и оптимальной производительности при работе с дисками и разделами. По умолчанию используется журналируемая файловая система Ext4. Однако во время установки Системы администратору предоставляется возможность выбора других файловых систем (см. раздел Поддерживаемые файловые системы), таких как XFS, BTRFS, ZFS, GFS2. Также поддерживается работа с дисками, отформатированными в NTFS (ФС Windows).

Поддерживаемые файловые системы

Общие аспекты поддерживаемых в Системе ФС:

  • Ext4 (Fourth Extended Filesystem) – журналируемая ФС общего назначения. В ОС РОСА "ХРОМ" Ext4 используется в качестве основной и рекомендуемой файловой системы для локальных дисковых разделов. Поддерживает работу с файлами и разделами большого объема, экстенты, механизмы уменьшения фрагментации, расширенные атрибуты и списки контроля доступа ACL. Журналирование обеспечивает сохранение согласованности структуры ФС после аварийного завершения работы или сбоя питания.
  • XFS – высокопроизводительная журналируемая ФС, предназначенная для работы с большими объемами данных и интенсивной дисковой нагрузкой. Поддерживает большие файлы и файловые системы, экстенты, расширенные атрибуты и механизм reflink. Встроенный механизм создания снимков ФС, аналогичный BTRFS, отсутствует.
  • BTRFS (B-tree File System) – ФС с поддержкой механизма Copy-on-Write (CoW). Поддерживает создание подтомов и снимков, контрольные суммы данных и метаданных, сжатие данных, изменение размера ФС и работу с несколькими устройствами. Снимки BTRFS могут использоваться для сохранения состояния системы и последующего восстановления после изменения конфигурации или обновления.
  • NTFS (New Technology File System) – ФС, разработанная компанией Microsoft и используемая преимущественно в ОС семейства Windows. В ОС РОСА "ХРОМ" поддерживается работа с NTFS-разделами в режиме чтения и записи. NTFS может использоваться для доступа к разделам и внешним накопителям, созданным в ОС Windows, а также для обмена данными между ОС РОСА "ХРОМ" и ОС семейства Windows.

Проверка поддержки ФС Системой

При необходимости ОС может работать с любой из поддерживаемых ФС. Для проверки совместимости необходимо выполнить следующую команду:

cat /proc/filesystems

В результате выполнения команды выводится список поддерживаемых ФС, в котором должна присутствовать требуемая ФС (рисунок 4).

Рисунок 4 – Список поддерживаемых ФС

Примечание — Использование команды cat /proc/filesystems позволяет определить все ФС, которые поддерживаются в Системе. Однако для удобства можно использовать команду cat /proc/filesystems | grep имяФС для поиска конкретной ФС (рисунок 5).

Рисунок 5 – Поиск BTRFS в списке поддерживаемых ФС

Организация каталогов в Системе

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

Каталоги организованы в виде иерархической древовидной структуры. Начальной точкой структуры является корневой каталог /, относительно которого располагаются остальные системные и пользовательские каталоги.

Для ускорения поиска записей в каталогах большого размера Ext4 поддерживает индексирование каталогов с использованием структуры HTree.

Основные каталоги ОС:

  • / – корневой каталог, являющийся начальной точкой иерархии файловой системы;
  • /boot – содержит файлы, необходимые для загрузки Системы, включая ядро и файлы загрузчика;
  • /dev – содержит специальные файлы устройств, предоставляющие интерфейс доступа к устройствам Системы;
  • /etc – содержит системные конфигурационные файлы и конфигурацию служб;
  • /home – содержит домашние каталоги пользователей;
  • /media – используется для монтирования съемных носителей;
  • /mnt – используется в качестве точки временного монтирования файловых систем;
  • /opt – предназначен для размещения дополнительного программного обеспечения;
  • /proc – точка монтирования виртуальной файловой системы proc, предоставляющей сведения о процессах и состоянии ядра;
  • /root – домашний каталог суперпользователя root;
  • /run – содержит изменяемые данные, относящиеся к текущему сеансу работы Системы, включая файлы идентификаторов процессов, сокеты и другие служебные данные;
  • /srv – предназначен для хранения данных, предоставляемых системными службами;
  • /sys – точка монтирования виртуальной файловой системы sysfs, предоставляющей сведения об устройствах, драйверах и других объектах ядра;
  • /tmp – предназначен для хранения временных файлов;
  • /usr – содержит основную часть установленного программного обеспечения, исполняемые файлы, библиотеки и общие данные. Основными подкаталогами являются:
    • /usr/bin – основные исполняемые файлы пользовательских и системных программ;
    • /usr/sbin – исполняемые файлы, предназначенные преимущественно для системного администрирования;
    • /usr/lib – библиотеки и другие архитектурно-зависимые файлы программ;
    • /usr/lib64 – 64-разрядные библиотеки;
    • /usr/share – архитектурно-независимые общие данные, включая документацию, локализации и другие ресурсы;
    • /usr/local – предназначен для программного обеспечения и данных, устанавливаемых администратором локально;
  • /var – содержит изменяемые в процессе работы Системы данные, в том числе журналы, кэш, очереди и другие служебные файлы.

В ОС РОСА "ХРОМ" используется объединенная структура каталогов /usr. Каталоги /bin и /sbin в корневом каталоге являются символическими ссылками на /usr/bin и /usr/sbin соответственно. Аналогичным образом отдельные пути к системным библиотекам могут быть представлены символическими ссылками на соответствующие каталоги в /usr. Поэтому основное размещение исполняемых файлов и системных библиотек осуществляется в иерархии /usr.

В домашних каталогах пользователей наряду с пользовательскими данными размещаются файлы и каталоги конфигурации программ. Файл или каталог считается скрытым, если его имя начинается с точки (.), например .config. Чтобы сделать файл или каталог скрытым, достаточно переименовать его, добавив в начало имени точку. Например, можно переименовать файл filename в .filename:

mv filename .filename

Для того чтобы увидеть скрытые файлы в командной строке, можно использовать команду ls с параметром -a:

ls -a

Монтирование

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

Для успешного монтирования ФС важно убедиться, что каталог, выбранный в качестве точки монтирования, существует в Системе. Если точка монтирования является непустым каталогом, его содержимое будет недоступно до тех пор, пока файловая система не будет размонтирована. Поэтому рекомендуется использовать специально созданные каталоги для этой цели, которые обычно находятся в каталогах /mnt или /media.

Например, необходимо смонтировать ISO-образ в каталог /mnt. Этот каталог должен существовать до монтирования, иначе операция завершится неудачно. После успешного монтирования в каталоге появится содержимое ФС, в противном случае каталог останется пустым.

Для определения ФС, к которой относится текущий каталог, и объема свободного пространства используется команда:

df -h

В ОС для монтирования ФС используется команда mount. Общий синтаксис команды:

sudo mount устройство точка_монтирования

где:

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

Из соображений безопасности команда mount доступна для выполнения только с правами суперпользователя. Команда mount может включать дополнительные параметры, такие как:

  • -f – имитирует монтирование, выполняя все действия, кроме фактического монтирования ФС;
  • -v – предоставляет подробный отчёт о выполняемых действиях;
  • -w – монтирует ФС с доступом для чтения и записи;
  • -r – монтирует ФС только для чтения;
  • -n – монтирует без записи в файл /etc/mtab;
  • -t type – указывает тип монтируемой ФС;
  • -a – монтирует все ФС, указанные в /etc/fstab;
  • -o list_of_options – применяет список опций к ФС, где опции разделены запятыми. Подробнее об этом см. в man mount.

Подробное описание опций команды mount доступно в руководстве man mount.

Если у команды mount не указаны опции, то она попытается определить их по конфигурационному файлу /etc/fstab.

Примеры команд монтирования:

  • Монтирование раздела жесткого диска:
sudo mount /dev/hdb3 /mnt
  • Монтирование всех ФС NFS, указанных в /etc/fstab:
sudo mount -vat nfs

Если возникли ошибки при монтировании, можно использовать команду:

sudo mount -vf устройство точка_монтирования

Команда имитирует операцию монтирования и выводит подробные сведения о выполняемых действиях, но не монтирует ФС.

Файл /etc/fstab — это конфигурационный файл, который определяет порядок монтирования файловых систем в ОС. Этот файл играет ключевую роль в автоматическом подключении устройств и разделов при загрузке Системы, а также упрощает управление монтированием для системных администраторов.

Файл /etc/fstab состоит из строк, каждая из которых описывает отдельную ФС или устройство. Рассмотрим типовую структуру файла fstab:

# <файловая система>   <точка монтирования>   <тип>   <параметры>   <dump>   <pass>
UUID=abcd1234-ef56-7890-abcd-1234567890ab  /          ext4    defaults        1 1
UUID=abcd1234-ef56-7890-abcd-1234567890ac  /home      ext4    defaults        1 2
UUID=abcd1234-ef56-7890-abcd-1234567890ad  /var       xfs     defaults        1 2
UUID=abcd1234-ef56-7890-abcd-1234567890ae  swap       swap    defaults        0 0
/dev/cdrom      /media/cdrom  auto    noauto,ro     0 0

Каждая строка включает следующие поля:

  • <файловая система> — идентификатор ФС, которая должна быть смонтирована. Обычно это UUID (уникальный идентификатор) раздела, но может быть также использован путь к блочному устройству (например, /dev/sda1). В рассмотренном выше примере: UUID=abcd1234-ef56-7890-abcd-1234567890ab, /dev/cdrom.
  • <точка монтирования> — каталог, в который будет подключена файловая система. В рассмотренном выше примере: /, /home, /var, /media/cdrom.
  • <тип> — тип файловой системы, который будет использоваться при монтировании. Это может быть ext4, xfs, btrfs, swap для разделов подкачки или auto для автоматического определения типа. В рассмотренном выше примере: ext4, xfs, swap, auto.
  • <параметры> — монтировочные опции, которые определяют поведение файловой системы. Наиболее часто используются опции:
    • defaults — включает стандартный набор опций: rw, suid, dev, exec, auto, nouser, async.
    • noauto — файловая система не монтируется автоматически при загрузке.
    • ro — монтирование в режиме только для чтения.
    В рассмотренном выше примере: defaults, noauto, ro.
  • <dump> — опция для утилиты dump, которая выполняет резервное копирование файловой системы. Если установлено значение "1", резервное копирование включено, если "0" — отключено. В рассмотренном выше примере: 1, 0.
  • <pass> — определяет порядок проверки файловых систем при загрузке:
    • 0 — файловая система не будет проверяться;
    • 1 — корневая файловая система проверяется первой;
    • 2 — другие файловые системы проверяются после корневой.
    В рассмотренном выше примере: "1", "2", "0".

В Системе обработка записей файла /etc/fstab выполняется с использованием механизма systemd. При загрузке Системы генератор systemd-fstab-generator преобразует записи /etc/fstab в соответствующие mount- и swap-юниты systemd, которые используются для управления монтированием файловых систем и подключением пространства подкачки.

Редактирование файла /etc/fstab требует прав суперпользователя. После изменения файла /etc/fstab необходимо обновить конфигурацию systemd командой:

sudo systemctl daemon-reload

После этого для проверки записей и монтирования ФС, указанных в /etc/fstab, необходимо выполнить команду:

sudo mount -a

Если команда выполнена без ошибок, новые параметры монтирования будут применены в Системе. При наличии ошибок необходимо проверить внесенные в /etc/fstab записи до перезагрузки Системы. Некорректная конфигурация файла может привести к ошибкам монтирования ФС при загрузке.

Для получения полной информации о формате файла /etc/fstab и доступных параметрах используется справочное руководство:

man fstab

Размонтирование

Для отключения файловой системы от ОС используется команда umount. Операция размонтирования может потребоваться для выполнения проверок и восстановления ФС с использованием команды fsck.

В случае проблем с сетью удаленные ФС также могут быть отключены.

Команда umount имеет следующий формат:

sudo umount устройство
sudo umount точка_монтирования
sudo umount -a
sudo umount -t тип_фс

где:

  • устройство – физическое устройство, которое нужно отключить;
  • точка_монтирования — каталог, к которому оно подключено (можно указать устройство или точку монтирования);
  • -a – отключает все подключенные ФС;
  • -t fstype – отключает ФС указанного типа.

Команда umount не позволяет размонтировать ФС, если она используется каким-либо процессом. Например, если ФС смонтирована в каталоге /mnt и данный каталог является текущим, выполнение следующих команд приведет к ошибке:

cd /mnt
sudo umount /mnt

Для размонтирования ФС необходимо перейти в каталог, расположенный за пределами размонтируемой ФС, после чего повторно выполнить команду umount:

cd /
sudo umount /mnt

Параметр -f используется для принудительного размонтирования недоступных сетевых ФС, например NFS:

sudo umount -f /mnt/nfs

Важно – Принудительное размонтирование ФС может привести к потере несохраненных данных. Параметр -f следует использовать только при невозможности штатного размонтирования.

Для безопасного извлечения сменного носителя используется команда eject.

Подробное описание команды umount доступно в справочном руководстве:

man umount

Файловая система Ext4

Ext4 (Fourth Extended Filesystem) – журналируемая файловая система общего назначения, используемая в ОС РОСА "ХРОМ" по умолчанию. Ext4 поддерживает экстенты, расширенные атрибуты, списки контроля доступа ACL, журналирование метаданных и работу с файлами и разделами большого объема.

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

Получение информации о ФС

Для просмотра типа ФС, метки, UUID и точки монтирования используется команда:

lsblk -f

Для получения UUID и типа ФС на указанном разделе используется команда:

sudo blkid /dev/sdb1

Для просмотра параметров Ext4, включая размер блока, количество inode, состояние ФС и параметры журналирования, используется команда:

sudo tune2fs -l /dev/sdb1

Дополнительные сведения о служебных структурах Ext4 выводятся командой:

sudo dumpe2fs -h /dev/sdb1

где /dev/sdb1 – раздел с ФС Ext4.

Создание ФС

Перед созданием ФС необходимо подготовить раздел диска. Порядок создания разделов приведен в пп. Fdisk и Gdisk.

Для выполнения аналогичных операций через графический интерфейс могут использоваться программы, описанные в пп. Диспетчер разделов KDE и GParted.

Создание ФС Ext4 выполняется командой:

sudo mkfs.ext4 /dev/sdb1

Для одновременного создания ФС и назначения метки используется команда:

sudo mkfs.ext4 -L data /dev/sdb1

где:

  • data – метка создаваемой ФС;
  • /dev/sdb1 – раздел, на котором создается ФС.

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

После создания ФС необходимо проверить результат:

lsblk -f /dev/sdb1

Порядок подключения созданной ФС и настройки файла /etc/fstab приведен в разделе Монтирование.

Проверка ФС

Для проверки Ext4 используется утилита e2fsck. Перед выполнением проверки ФС должна быть размонтирована. Порядок размонтирования приведен в разделе Размонтирование.

Проверка выполняется командой:

sudo e2fsck -f /dev/sdb1

Параметр -f обеспечивает выполнение проверки независимо от текущего состояния ФС.

Важно – Выполнение утилиты e2fsck для смонтированной ФС не допускается, поскольку может привести к повреждению данных. Для проверки корневой ФС следует загрузить Систему в режиме восстановления или использовать внешний загрузочный носитель. Порядок загрузки приведен в разделе Режим восстановления.

Изменение размера ФС

Для увеличения размера Ext4 необходимо предварительно увеличить размер соответствующего раздела или логического тома. После этого выполняется команда:

sudo resize2fs /dev/sdb1

Если размер не указан, ФС расширяется до размера блочного устройства.

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

Важно – Команда resize2fs изменяет размер ФС, но не изменяет размер раздела диска. Подробнее о выполнении операций с разделами см. п. Управление жесткими дисками.

Настройка параметров ФС

Для изменения метки Ext4 используется команда:

sudo tune2fs -L data /dev/sdb1

где:

  • data – новая метка ФС;
  • /dev/sdb1 – раздел с ФС Ext4.

Для разделов, предназначенных только для хранения данных, при необходимости может быть уменьшен объем пространства, зарезервированного для суперпользователя. Например, для установки значения 1% используется команда:

sudo tune2fs -m 1 /dev/sdb1

Порядок настройки ограничений на использование дискового пространства пользователями и группами приведен в разделе Управление дисковыми квотами.

Файловая система BTRFS

Файловая система BTRFS (B-tree File System) — современная файловая система с механизмом копирования при записи (Copy-on-Write, CoW), предназначенная для повышения надежности хранения данных и упрощения управления дисковым пространством. BTRFS поддерживает ряд возможностей, отсутствующих в Ext4. При этом в некоторых сценариях, особенно при высокой нагрузке на запись, работе с большим количеством мелких файлов или создании множества снимков, производительность BTRFS может быть ниже производительности Ext4.

ОС включает поддержку BTRFS в составе ядра и репозитория пакетов, что позволяет использовать данную ФС без необходимости сборки модулей вручную.

Основные особенности эксплуатации BTRFS:

  • При интенсивном использовании снимков на жестких дисках HDD может увеличиваться уровень фрагментации данных, что приводит к снижению производительности. На SSD-накопителях влияние фрагментации на производительность, как правило, менее существенно.
  • При неравномерном распределении свободного пространства между данными и метаданными может возникнуть ситуация, при которой запись данных будет невозможна, несмотря на наличие свободного пространства. Для перераспределения пространства используется операция балансировки, выполняемая с помощью команды btrfs balance.
  • Для регулярного выполнения балансировки может использоваться набор сценариев и таймеров systemd из пакета btrfsbalance, доступного в репозитории ОС.
  • Для автоматизации создания снимков и их передачи на удаленный сервер могут использоваться утилиты just-backup-btrfs и btrfs-sync, доступные в репозитории ОС. При передаче снимков копируются только измененные данные.
  • BTRFS использует контрольные суммы данных и метаданных, что позволяет обнаруживать поврежденные блоки при чтении. Автоматическое восстановление поврежденных данных возможно при наличии избыточной копии.
  • При установке ОС на BTRFS с помощью программы установки Anaconda создание отдельного раздела /boot не является обязательным. Для упрощения создания снимков корневой ФС может использоваться подтом root с точкой монтирования /. Такая структура применяется при автоматической разметке BTRFS.

Полный список доступных команд и основных параметров для работы с BTRFS выводится с помощью команды btrfs help (рисунок 6).

Рисунок 6 – Список всех доступных команд и опций

Создание ФС

Создание файловой системы BTRFS выполняется командой:

sudo mkfs.btrfs /dev/sdb

где:

  • mkfs.btrfs — утилита для создания ФС BTRFS;
  • /dev/sdb — диск, на котором нужно создать ФС.

Для проверки версии BTRFS используется команда:

btrfs --version

Для проверки типа BTRFS используется команда (рисунок 7):

sudo blkid /dev/sda

Рисунок 7 – Проверка типа BTRFS

Проверка целостности ФС

Для проверки целостности ФС можно выполнить одно из следующих действий:

  • использовать команду sudo btrfs check /dev/sda, если монтирование не проводилось (рисунок 8);

Рисунок 8 – Проверка целостности ФС, если монтирование не проводилось

  • использовать команды sudo btrfs scrub start /mnt/btrfs_disk и sudo btrfs scrub status /mnt/btrfs_disk, если монтирование проводилось (рисунок 9).

Рисунок 9 – Проверка целостности ФС, если монтирование проводилось

Если в результате выполнения команд появляется строка no error found, это означает, что проверка прошла успешно.

Ручное монтирование

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

Ручное монтирование можно выполнить с помощью следующей команды:

sudo mount /dev/sda /mnt

где /mnt — каталог, в который будет смонтирован диск /dev/sda.

Проверить успешность монтирования можно командой lsblk (рисунок 10).

Рисунок 10 – Список существующих дисков и разделов после монтирования

В выводе команды lsblk указано, что устройство /dev/sda смонтировано в каталог /mnt.

Автоматическое монтирование

Для долгосрочной работы рекомендуется настроить автоматическое монтирование, при котором диск привязывается к точке монтирования через UUID.

Чтобы настроить автоматическое монтирование, нужно выполнить следующие действия:

  1. создать точку монтирования с помощью команды:
sudo mkdir -p /mnt/btrfs_disk

где параметр -p обеспечивает создание отсутствующих родительских каталогов;

  1. получить UUID диска с помощью команды (рисунок 11):
sudo blkid /dev/sda

Рисунок 11 – Получение UUID диска

Примечание — Для надежного монтирования не рекомендуется использовать имя диска /dev/sda, потому что оно может измениться, а UUID диска остаётся неизменным.

  1. отредактировать файл /etc/fstab, в котором хранятся правила автоматического монтирования дисков при загрузке Системы. Для этого нужно использовать команду для открытия файла /etc/fstab на редактирование (рисунок 12):
sudo nano /etc/fstab

Рисунок 12 – Файл <!-- Serif_start -->/etc/fstab<!-- Serif_end --> в редакторе nano

  1. вписать строку "UUID=cd8a47ef-1f64-4d04-8a02-7933ebe127cb /mnt/btrfs_disk btrfs defaults 0 0" в конце файла (рисунок 13);

Рисунок 13 – Редактирование файла <!-- Serif_start -->/etc/fstab<!-- Serif_end -->

  1. нажать сочетание клавиш Ctrl+O;
  2. подтвердить имя файла нажатием клавиши Enter;
  3. выйти из редактора nano с помощью сочетания клавиш Ctrl+X;
  4. выполнить монтирование всех разделов с помощью команды:
sudo mount -a
  1. проверить успешность монтирования с помощью команды (рисунок 14):
mount | grep btrfs

Рисунок 14 – Успешно выполненное монтирование

Балансировка

Балансировка в BTRFS — это процесс перераспределения данных и метаданных по блочным устройствам. Она необходима для оптимизации использования пространства и поддержания производительности.

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

  1. создать демонстрационную нагрузку с помощью команды (рисунок 15):
sudo dd if=/dev/zero of=/mnt/btrfs_disk/@/largefile bs=1M count=100

Рисунок 15 – Создание нагрузки

  1. просмотреть статистику использования с помощью команды (рисунок 16):
sudo btrfs filesystem show /mnt/btrfs_disk

Рисунок 16 – Просмотр статистики использования

  1. просмотреть распределение данных с помощью команды (рисунок 17):
sudo btrfs filesystem df /mnt/btrfs_disk

Рисунок 17 – Просмотр распределения данных

  1. запустить балансировку без фильтров:
sudo btrfs balance start /mnt/btrfs_disk

Важно – При запуске балансировки может возникнуть ошибка (рисунок 18). В таком случае можно использовать флаг --full-balance, который отключает предупреждение и сразу запускает балансировку (рисунок 19). Однако использование флага --full-balance небезопасно. Лучше всего использовать фильтры, как указано в следующем шаге текущей инструкции.

Рисунок 18 – Ошибка запуска балансировки

Рисунок 19 – Запуск балансировки с флагом --full-balance

  1. запустить балансировку с ограничением по заполнению следующей командой (рисунок 20):
sudo btrfs balance start -dusage=50 /mnt/btrfs_disk

Рисунок 20 – Запуск балансировки с ограничением по заполнению

  1. проверить статус балансировки с помощью команды (рисунок 21):
sudo btrfs balance status /mnt/btrfs_disk

Рисунок 21 – Проверка статуса балансировки

Примечание — При необходимости балансировка может быть выполнена только для метаданных. Для этого используется команда (рисунок 22):

sudo btrfs balance start -m /mnt/btrfs_disk

Рисунок 22 – Запуск балансировки метаданных

Работа с подтомами

Подтомы функционируют как отдельные ФС, но используют общее пространство диска.

Создание подтомов

Для создания корневого подтома с именем @ нужно выполнить следующую команду (рисунок 23):

sudo btrfs subvolume create /mnt/btrfs_disk/@

Рисунок 23 – Создание корневого подтома

Чтобы создать подтом @home для хранения пользовательских данных, необходимо выполнить команду (рисунок 24):

sudo btrfs subvolume create /mnt/btrfs_disk/@home

Рисунок 24 – Создание подтома @home

Чтобы создать подтом @data для хранения пользовательских данных отдельно от Системы, нужно выполнить команду (рисунок 25):

sudo btrfs subvolume create /mnt/btrfs_disk/@data

Рисунок 25 – Создание подтома @data

Чтобы просмотреть список подтомов, нужно выполнить следующую команду (рисунок 26):

sudo btrfs subvolume list /mnt/btrfs_disk

Рисунок 26 – Просмотр списка подтомов

Примечание — Для просмотра детальной информации о подтоме нужно использовать команду (рисунок 27):

sudo btrfs subvolume show /mnt/btrfs_disk/@

Рисунок 27 – Просмотр информации о подтоме

Назначение подтома по умолчанию

Подтом по умолчанию (default subvolume) — это механизм BTRFS, который определяет, какой подтом будет монтироваться автоматически, если при монтировании не указан параметр subvol=.

Примечание — Без использования подтома по умолчанию при каждом монтировании нужно указывать подтом. Например, с помощью команды:

sudo mount -o subvol=@ /dev/sda /mnt

Для назначения подтома @ подтомом по умолчанию нужно выполнить команду:

sudo btrfs subvolume set-default 256 /mnt/btrfs_disk

Для проверки, что подтом по умолчанию действительно изменён, используется команда (рисунок 28):

sudo btrfs subvolume get-default /mnt/btrfs_disk

Рисунок 28 – Проверка подтома по умолчанию

Теперь при монтировании без указания подтома с помощью команды sudo mount /dev/sda /mnt автоматически будет монтироваться подтом @.

Работа со снимками

Снимок (snapshot) BTRFS представляет собой состояние подтома, зафиксированное на определенный момент времени, и может использоваться для последующего восстановления данных.

Создание снимка

Для создания снимка необходимо:

  1. создать тестовый файл в подтоме с помощью команды (рисунок 29):
echo "Данные для снимка" | sudo tee /mnt/btrfs_disk/@/snapshot_test.txt

Рисунок 29 – Создание тестового файла в подтоме

  1. создать снимок, доступный для чтения и записи, с помощью команды (рисунок 30):
sudo btrfs subvolume snapshot /mnt/btrfs_disk/@ /mnt/btrfs_disk/@snap_rw

Рисунок 30 – Создание read-write снимка

  1. сделать снимок только для чтения с помощью команды (рисунок 31):
sudo btrfs subvolume snapshot -r /mnt/btrfs_disk/@ /mnt/btrfs_disk/@snap_ro

Рисунок 31 – Создание снимка только для чтения

  1. просмотреть список созданных снимков с помощью команды (рисунок 32):
sudo btrfs subvolume list /mnt/btrfs_disk

Рисунок 32 – Просмотр списка снимков

Удаление снимков

Для удаления снимка используется команда (рисунок 33):

sudo btrfs subvolume delete /mnt/btrfs_disk/@snap_rw

Рисунок 33 – Удаление снимка

Проверить удаление снимка можно с помощью команды (рисунок 34):

sudo btrfs subvolume list /mnt/btrfs_disk

Рисунок 34 – Проверка удаления снимка

Восстановление данных из снимка

Для проверки восстановления потерянных данных необходимо:

  1. создать тестовый файл с помощью команды (рисунок 35):
echo "Важные данные" | sudo tee /mnt/btrfs_disk/@/important.txt

Рисунок 35 – Создание тестового файла для восстановления

  1. создать резервный снимок с помощью команды (рисунок 36):
sudo btrfs subvolume snapshot /mnt/btrfs_disk/@ /mnt/btrfs_disk/@backup

Рисунок 36 – Создание резервного снимка

  1. удалить созданный файл с помощью команды:
sudo rm /mnt/btrfs_disk/@/important.txt
  1. проверить удаление файла с помощью следующей команды (рисунок 37):
ls -la /mnt/btrfs_disk/@/

Рисунок 37 – Проверка удаления файла

  1. восстановить файл из снимка с помощью команды:
sudo cp -a /mnt/btrfs_disk/@backup/important.txt /mnt/btrfs_disk/@/
  1. проверить, что файл действительно восстановлен и содержит исходные данные, с помощью команды (рисунок 38):
cat /mnt/btrfs_disk/@/important.txt

Рисунок 38 – Проверка восстановления файла

Настройка квот

Квоты в BTRFS позволяют ограничивать использование дискового пространства для подтомов и их групп. В работе с квотами администратор может выполнить следующие действия:

  • активировать подсистему поддержки квот на ФС с помощью команды, без которой квоты не будут работать:
sudo btrfs quota enable /mnt/btrfs_disk
  • просмотреть текущие группы квот с помощью команды (рисунок 39):
sudo btrfs qgroup show /mnt/btrfs_disk

Рисунок 39 – Просмотр текущей группы квот

  • создать пользовательскую группу квот с идентификатором 1/100 командой:
sudo btrfs qgroup create 1/100 /mnt/btrfs_disk
  • установить лимит в 500 МБ для группы 1/100 командой:
sudo btrfs qgroup limit 500M 1/100 /mnt/btrfs_disk

Примечание — Когда суммарный размер данных в группе достигнет лимита, запись будет запрещена и появится ошибка No space left.

  • привязать подтом к группе квот командой:
sudo btrfs qgroup assign 0/256 1/100 /mnt/btrfs_disk
  • просмотреть существующие лимиты и их использование командой (рисунок 40):
sudo btrfs qgroup show -re /mnt/btrfs_disk

Рисунок 40 – Просмотр существующих лимитов

  • отключить подсистему квот командой:
sudo btrfs quota disable /mnt/btrfs_disk

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

Графическая программа snapshot-gui

Для более удобного администрирования BTRFS в Системе возможно использование графической утилиты btrfs-snapshot-gui (рисунок 41). С её помощью можно управлять снимками ФС без необходимости использования командной строки.

Рисунок 41 – Графическая программа btrfs-snapshot-gui

Для установки пакета btrfs-snapshot-gui необходимо выполнить следующую команду:

sudo dnf install btrfs-snapshot-gui

Для запуска программы btrfs-snapshot-gui нужно выполнить одно из следующих действий:

  • выполнить в консоли команду:
btrfs-snapshot-gui
  • нажать на иконку Меню запуска приложений в левом нижнем углу экрана, затем в строке поиска ввести название программы и нажать клавишу Enter.

В приложении доступны:

  • создание снимка Системы по кнопке Создать снимок;
  • удаление снимка Системы по кнопке Удалить снимок;
  • восстановление Системы из снимка по кнопке Восстановление из снимков.

Файловая система ZFS

Файловая система ZFS (Zettabyte File System) — это высокопроизводительная ФС с поддержкой копирования при записи Copy-on-Write (CoW). ZFS объединяет функции файловой системы и менеджера томов, обеспечивая расширенные возможности управления данными, контроля их целостности и оптимизации хранения. Благодаря архитектуре ZFS особенно эффективна на серверах и в системах хранения данных, где требуются высокая надежность и масштабируемость.

Основные особенности эксплуатации ZFS:

  • ZFS использует механизм копирования при записи Copy-on-Write (CoW), что гарантирует целостность данных даже при сбоях питания. Транзакционная модель гарантирует, что ФС всегда находится в согласованном состоянии;
  • для проверки целостности данных в ZFS используется механизм скраба (scrub), который считывает все данные и проверяет их контрольные суммы, автоматически исправляя ошибки при наличии избыточности;
  • в репозитории доступны утилиты для автоматизации создания снимков и их передачи на удаленные серверы, позволяющие передавать только изменения между снимками.

Начало работы с ZFS

Перед началом работы необходимо убедиться, что в ОС установлена и загружена поддержка файловой системы ZFS. Для этого нужно выполнить команду:

lsmod | grep zfs

В результате её выполнения будет выведен список загруженных модулей ZFS, если они имеются в Системе (рисунок 42).

Рисунок 42 – Проверка загруженных модулей ZFS

Примечание — Если модули ФС не загружены, необходимо установить пакеты OpenZFS с помощью команды:

sudo dnf install zfs

После установки необходимо загрузить модуль ZFS командой (рисунок 43):

sudo modprobe zfs

Рисунок 43 – Загрузка модулей ZFS

Полный список доступных команд и основных параметров для работы с ZFS выводится с помощью команд zpool help и zfs help (рисунок 44).

Рисунок 44 – Список всех доступных команд и опций ZFS

Создание ZFS пула и датасетов

ZFS использует двухуровневую архитектуру: пулы хранения (zpools) и датасеты (datasets), которые создаются внутри пулов.

Создание пула

Пул в ZFS создается командой:

sudo zpool create tank /dev/sdb

где:

  • zpool create — команда для создания пула хранения;
  • tank — имя создаваемого пула (может быть любым);
  • /dev/sdb — диск, на котором нужно создать пул.

Проверить создание пула можно командой (рисунок 45):

sudo zpool status tank

Рисунок 45 – Проверка создания пула

Создание ФС

Создание файловой системы ZFS выполняется в пуле командой:

sudo zfs create tank/data

Проверить результат создания ФС ZFS можно командой (рисунок 46):

sudo zfs list tank/data

Рисунок 46 – Проверка создания ФС

Проверить версию используемой ZFS можно с помощью команды (рисунок 47):

zfs --version

Рисунок 47 – Проверка версии ZFS

Создание ZFS с указанием точки монтирования выполняется командой:

sudo zfs create -o mountpoint=/mnt/data tank/data

Создание датасетов

Датасеты в ZFS аналогичны подтомам в BTRFS. Для создания корневого датасета используется команда:

sudo zfs create tank/ROOT

Датасет для пользовательских данных создается командой:

sudo zfs create tank/HOME

Датасет для хранения данных создается командой:

sudo zfs create tank/DATA

Просмотреть список всех датасетов можно командой (рисунок 48):

sudo zfs list

Рисунок 48 – Список всех датасетов

Проверка целостности ФС

Для проверки целостности данных в ZFS используется механизм скраба. Для запуска скраба используется команда:

sudo zpool scrub tank

Для проверки статуса выполнения механизма скраба выполняется команда (рисунок 49):

sudo zpool status

Рисунок 49 – Проверка статуса выполнения механизма скраба

При обнаружении поврежденных данных ZFS автоматически восстанавливает их при наличии избыточной копии в пуле. Результаты проверки отображаются в выводе команды sudo zpool status tank. Значение repaired 0B означает, что в ходе проверки данные не восстанавливались. Отсутствие обнаруженных ошибок подтверждается значениями with 0 errors и No known data errors.

Настройка точки монтирования

Наборы данных ZFS автоматически монтируются при создании или импорте содержащего их пула. При необходимости для набора данных может быть назначена другая точка монтирования:

sudo zfs set mountpoint=/mnt/data tank/DATA

где:

  • /mnt/data – назначаемая точка монтирования;
  • tank/DATA – имя набора данных ZFS.

Для проверки точки монтирования используется команда (рисунок 50):

mount | grep tank

Рисунок 50 – Проверка монтирования датасетов ZFS

Автоматическое монтирование

При импорте пула ZFS автоматически монтирует содержащиеся в нем наборы данных в назначенные точки монтирования.

Импорт пула tank выполняется командой:

sudo zpool import tank

Для автоматического импорта пулов и монтирования наборов данных при загрузке Системы необходимо включить соответствующие службы:

sudo systemctl enable zfs-import-cache.service
sudo systemctl enable zfs-mount.service

Для просмотра точки монтирования набора данных используется команда (рисунок 51):

sudo zfs get mountpoint tank/DATA

Рисунок 51 – Просмотр точки монтирования датасета

Работа со снимками

Снимок (snapshot) ZFS представляет собой доступное только для чтения состояние набора данных, зафиксированное на определенный момент времени. В момент создания снимка копирование всех данных не выполняется. Объем пространства, занимаемого снимком, увеличивается по мере изменения или удаления данных в исходном наборе данных.

Создание снимков

Для создания снимков необходимо:

  1. создать тестовый файл с помощью команды (рисунок 52):
echo "Данные для снимка" | sudo tee /tank/data/snapshot_test.txt

Рисунок 52 – Создание тестового файла

  1. создать снимок командой (рисунок 53):
sudo zfs snapshot tank/data@snap1

Рисунок 53 – Создание снимка

  1. просмотреть список созданных снимков с помощью команды (рисунок 54):
sudo zfs list -t snapshot

Рисунок 54 – Просмотр списка снимков

Удаление снимков

Удаление снимка выполняется командой (рисунок 55):

sudo zfs destroy tank/data@snap1

Рисунок 55 – Удаление снимка

Проверить удаление снимка можно с помощью следующей команды (рисунок 56):

sudo zfs list -t snapshot

Рисунок 56 – Проверка удаления снимка

Восстановление данных из снимка

Для проверки процедуры восстановления файла из снимка необходимо:

  1. создать тестовый файл с помощью команды (рисунок 57):
echo "Важные данные" | sudo tee /tank/data/important.txt

Рисунок 57 – Создание тестового файла для восстановления

  1. создать снимок с помощью команды:
sudo zfs snapshot tank/data@backup
  1. удалить созданный файл с помощью команды:
sudo rm /tank/data/important.txt
  1. проверить удаление файла с помощью команды (рисунок 58):
ls -la /tank/data/

Рисунок 58 – Проверка удаления файла

  1. восстановить файл, скопировав его из каталога снимка:
sudo cp /tank/data/.zfs/snapshot/backup/important.txt /tank/data/important.txt
  1. проверить содержимое восстановленного файла с помощью команды (рисунок 59):
cat /tank/data/important.txt

Рисунок 59 – Проверка восстановления файла

Для возврата всего набора данных к состоянию, сохраненному в снимке, используется команда zfs rollback.

Важно – Команда zfs rollback восстанавливает состояние всего набора данных, а не отдельного файла. Все изменения, внесенные в набор данных после создания снимка, будут утрачены. Перед выполнением команды необходимо создать резервную копию актуальных данных.

sudo zfs rollback tank/data@backup

Включение и настройка квот

ZFS позволяет устанавливать квоты для отдельных наборов данных и ограничивать объем используемого ими дискового пространства.

Для управления квотами выполняются следующие действия:

  1. просмотр текущего использования квот с помощью команды (рисунок 60):
sudo zfs list

Рисунок 60 – Просмотр текущего использования квот

  1. установка квоты (например 500 МБ) для датасета с помощью команды:
sudo zfs set quota=500M tank/DATA
  1. просмотр списка установленных квот командой (рисунок 61):
sudo zfs get quota tank/DATA

Рисунок 61 – Список установленных квот

  1. установка ограничения в 500 МБ для набора данных tank/DATA (без учета пространства, занимаемого дочерними наборами данных и снимками) с помощью свойства refquota:
sudo zfs set refquota=500M tank/DATA
  1. просмотр использования дискового пространства с учетом квот выполняется с помощью команды (рисунок 62):
sudo zfs get all tank/DATA | grep -E "quota|used"

где tank/DATA – набор данных, для которого выполняется проверка.

Рисунок 62 – Просмотр существующих лимитов

  1. снятие установленных квот выполняется командой:
sudo zfs set quota=none tank/DATA

Файловая система GFS2

Файловая система GFS2 (Global File System 2) является кластерной распределённой ФС, которая обеспечивает одновременный доступ к одному и тому же хранилищу с нескольких узлов под управлением ОС на базе Linux. Это решение позволяет организовать совместную работу серверов в кластере с общей файловой структурой при сохранении целостности данных и согласованности доступа.

ОС включает поддержку GFS2 в составе ядра и репозитория пакетов, что позволяет использовать данную ФС без необходимости сборки модулей вручную.

GFS2 использует модель общего доступа к блочному устройству (Shared Block Storage) с распределённым управлением блокировками через DLM (Distributed Lock Manager). Все узлы в кластере обнаруживают один и тот же том, а механизм DLM обеспечивает согласование одновременного чтения и записи.

Основные особенности GFS2:

  • согласованное использование метаданных между узлами;
  • управление журналами транзакций;
  • возможность расширения размера ФС;
  • работа поверх общих хранилищ, подключаемых через SAN, iSCSI или Fibre Channel.

Для координации работы нескольких серверов используется кластерный менеджер (Pacemaker/Corosync), который отвечает за согласование конфигурации кластера и мониторинг доступности узлов.

Для работы с GFS2 требуется установить необходимые утилиты пользовательского пространства с помощью команды:

sudo dnf install gfs2-utils

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

sudo mkfs.gfs2 -p lock_dlm -t cluster1:gfs2data -j 2 /dev/sdb

где:

  • lock_dlm — протокол блокировок;
  • cluster1 — имя кластера;
  • gfs2data — имя ФС в таблице блокировок;
  • -j 2 — создание двух журналов;
  • /dev/sdb — общее блочное устройство.

Для монтирования файловой системы GFS2 на сервере выполняются следующие действия:

sudo mkdir -p /mnt/gfs2
sudo mount -t gfs2 /dev/sdb /mnt/gfs2

На остальных узлах кластера монтирование ФС выполняется аналогично после подключения общего блочного устройства:

sudo mkdir -p /mnt/gfs2
sudo mount -t gfs2 /dev/sdb /mnt/gfs2

Для обеспечения корректной синхронизации узлов в кластере используется связка Pacemaker и Corosync. Необходимо:

  • настроить Corosync для обмена сообщениями между узлами;
  • сконфигурировать Pacemaker для управления ресурсом файловой системы (в том числе fencing, если требуется);
  • зарегистрировать ресурс в Pacemaker, указав имя кластера, совпадающее с параметром -t при создании ФС.

Для мониторинга состояния GFS2 и диагностики возможных ошибок следует использовать следующие команды:

  • journalctl — просмотр системных сообщений и логов ядра;
  • gfs2_tool — проверка и получение состояния ФС;
  • gfs2_quota — управление квотами в GFS2;
  • fsck.gfs2 — проверка целостности ФС (применяется только при отключённом кластере).

Также рекомендуется контролировать загрузку сети и задержки, так как GFS2 критично зависит от стабильности межузловых соединений.

Указатели (ссылки)

Ссылки на файлы в ОС обеспечивают доступ к файлам и каталогам с использованием дополнительных имен или путей без создания копий исходных данных.

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

Символическая ссылка (symbolic link) представляет собой отдельный файл, содержащий путь к целевому файлу или каталогу. Символическая ссылка имеет собственный индексный дескриптор (inode) и может указывать на объект, расположенный в другой ФС.

Если целевой файл или каталог перемещен либо удален, символическая ссылка становится неработоспособной. Удаление символической ссылки не приводит к удалению целевого объекта.

Символическая ссылка может:

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

Жесткая ссылка (hard link) представляет собой дополнительное имя существующего файла. Исходное имя файла и созданная жесткая ссылка указывают на один индексный дескриптор (inode) и, следовательно, на одни и те же данные.

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

Жесткая ссылка:

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

Создание и удаление ссылок

Для создания ссылок в ОС используется команда ln.

Синтаксис команды ln:

ln опции целевой_файл имя_ссылки

Обычно используется только одна опция -s. Полный список опций можно получить, выполнив следующую команду:

man ln

Чтобы создать символическую ссылку, нужно выполнить команду ln с опцией -s:

ln -s целевой_файл имя_символьной_ссылки

Для создания жесткой ссылки необходимо использовать команду ln без опции -s.

ln целевой_файл имя_жесткой_ссылки

Ссылки, как и обычные файлы, можно удалять, используя команду rm:

rm имя_ссылки