Найти в Дзене

Subvolume в Btrfs

Добрый день дорогой читатель, данное повествование не является истиной в последней инстанции, это некая инструкция по работе с Subvolume на файловой системы Btrfs (в основном для собственного пользования) с пояснениями и все возможными мыслями. Действия будут происходить на виртуальной машине с Arch Linux (KVM/QEMU) для наглядности. Subvolumes - это одна из ключевых функций Btrfs, они работают независимо от того, используете ли вы Btrfs на одном диске или пул состоит из нескольких дисков например всевозможные конфигурации RAID массива 0, 1, 10 и т.д. Преимущества использования Subvolumes Использование subvolumes в (дальнейшем подтома) дает несколько важных преимуществ: 1. Гибкое управление пространством Динамическое распределение: В отличие от традиционных разделов, подтома используют общее пространство пула Btrfs. Нет необходимости заранее решать, сколько места выделить под /, /home или другие каталоги. Имитация разделов: Подтома позволяют логически разделять данные, как если бы это б
Оглавление

Добрый день дорогой читатель, данное повествование не является истиной в последней инстанции, это некая инструкция по работе с Subvolume на файловой системы Btrfs (в основном для собственного пользования) с пояснениями и все возможными мыслями. Действия будут происходить на виртуальной машине с Arch Linux (KVM/QEMU) для наглядности.

Subvolumes - это одна из ключевых функций Btrfs, они работают независимо от того, используете ли вы Btrfs на одном диске или пул состоит из нескольких дисков например всевозможные конфигурации RAID массива 0, 1, 10 и т.д.

Преимущества использования Subvolumes

Использование subvolumes в (дальнейшем подтома) дает несколько важных преимуществ:

1. Гибкое управление пространством

  • Динамическое распределение: В отличие от традиционных разделов, подтома используют общее пространство пула Btrfs. Нет необходимости заранее решать, сколько места выделить под /, /home или другие каталоги.
  • Имитация разделов: Подтома позволяют логически разделять данные, как если бы это были разные разделы, но без жестких ограничений по размеру. Это упрощает установку ОС, устраняя дилемму выбора размеров разделов.

2. Основа для создания снимков (snapshots)

  • Легковесные снимки: Снимки в Btrfs — это, по сути, особый тип подтома, который использует механизм Copy-On-Write (CoW). При создании снимка данные не дублируются, а только помечаются как общие; место начинает занимать только измененные данные.
  • Откат системы (Rollback): Снимки позволяют быстро вернуться к предыдущему состоянию системы после неудачного обновления или изменения конфигурации. Некоторые дистрибутивы (например, openSUSE с Snapper, Mint - TimeShift) автоматизируют этот процесс.

3. Гранулированный контроль и изоляция данных

  • Исключение данных из снимков: Рекомендуется создавать отдельные подтома для данных, которые не должны откатываться вместе с системой, например:/home (пользовательские данные) — чтобы сохранить работу пользователя при откате системных файлов. /var/log (логи) — чтобы иметь возможность отладки даже после отката системы. /var/cache или /var/tmp (кэш, временные файлы) — чтобы избежать снимков больших объемов временных данных.
  • Различные политики резервного копирования: Для разных подтомов можно применять разные стратегии резервного копирования и хранения снимков (например, хранить снимки /home дольше, чем снимки /var/cache).

4. Рекомендации по структуре и использованию

  • "Плоская" структура (Flat Layout):
    Распространенная и рекомендуемая практика — не вкладывать подтома друг в друга (кроме снимков). Вместо этого создайте корневой подтом (например,
    @), подтом /home (например, @home) и другие на верхнем уровне файловой системы, а затем монтируйте их в нужные точки с помощью опций монтирования subvol=.
  • Монтирование по пути: Рекомендуется монтировать подтома с помощью опции subvol=path, а не subvolid=ID, так как ID может измениться при восстановлении из снимка, что потребует обновления настроек монтирования.
  • Управление квотами (Qgroups):
    Btrfs поддерживает группы квот, которые позволяют ограничивать общее
    пространство, используемое группой подтомов и их снимками, что дает еще
    больше контроля над использованием диска.

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

Управление подтомами

Когда форматируете диск или раздел в файловую систему (команда mkfs.btrfs /dev/sdXX) или же создаете RAID-массив (например команда mkfs.btrfs -d raid1 -m raid1 /dev/sdX /dev/sdY), вы создаете корневой subvolume (ID 5) (в дальнейшем корневой подтом). Все остальные действия происходят происходит внутри этого subvolume. Делее пойдет речь о subvolume в рамках файловой системы Btrfs, оно справедливо и к RAID-массивам созданными инструментами файловой системы Btrfs.

синтаксис основных команд:

  • sudo btrfs subvolume create [путь к подтому] # создать подтом
  • sudo btrfs subvolume list [путь к корневому подтому] # список подтомов
  • sudo btrfs subvolume show [путь к подтому] # информация о подтоме
  • sudo btrfs subvolume delete [путь к подтому] # удаление подтома
  • sudo btrfs subvolume sync [путь к точке монтирования подтома] # синхронизация подтомов

Для того что бы выполнять манипуляции с Btrfs надо подмонтировать корневой подтом (ID 5) файловой системы. Например если btrfs занимает полностью диск /dev/sdb то корневой подтом (ID 5) будет /dev/sdb аналогично и с разделом, например если занимает /dev/sdb3 то соответственно /dev/sdb3.

И так в повествовании для примера будем используем диск /dev/sdb отформатированный в Btrfs, напомню команду

sudo mkfs.btrfs -f /dev/vdb

примонтируем в директорию /mnt/date/ предварительно создав директорию /mnt/date/

sudo mkdir /mnt/date/
sudo mount /dev/vdb /mnt/date/

проверим монтирование с помощью команды

sudo mount | grep /dev/vdb

обратите внимание смонтирован как корневой подтом это видно по subvolid=5 и по subvol=/

далее возможно производить различные манипуляции с подразделами, создадим несколько подразделов и для того что бы их различать добавим в начало имени @ так будет более нагляднее:

sudo btrfs subvolume create /mnt/date/@audio
sudo btrfs subvolume create /mnt/date/@soft
sudo btrfs subvolume create /mnt/date/@video
sudo btrfs subvolume create /mnt/date/@photo

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

sudo btrfs su cr /mnt/date/@audio
sudo btrfs su cr /mnt/date/@soft
sudo btrfs su cr /mnt/date/@video
sudo btrfs su cr /mnt/date/@photo

список всех подтомов в корневом подтоме можно посмотреть с помощью команды

sudo btrfs subvolume list /mnt/date

так как корневой подтом смонтирован подтома можно посмотреть с помощью команды, будут отображены как директории.

ls /mnt/date
-2

Далее, можно посмотреть параметры подтома детально, довольно таки содержательная и полезная информация, выполнив команду

sudo btrfs subvolume show /mnt/date/@audio
-3

что бы удалить подтом, для этого достаточно выполнить следующую команду

sudo btrfs subvolume delete /mnt/date/@video

так же можно удалять по subvolid. Остальное произойдет в фоне автоматически под управлением файловой системы.

Внимание!!! при удалении подтома заполненого данными, все что находится внутри удаляемого подтома потоком направляется в вальхалу!!!

-4

Опционально. Забегая вперед, команда будет выполнена если подтом (в данном примере @video) смонтирован (например в /mnt/video) и очень нужно синхронизировать удаление что бы файловая система окончательно удалила данные, следует выполнить команду синхронизации. Команда будет выглядеть так

sudo btrfs subvolume sync /mnt/video # процесс долгий

после удаления примонтированного подтома следует размонтировать точку монтирования (иначе будет в списке примонтированой) исходя из данного примера точка монтирования /mnt/video, выполнив команду

sudo umount /mnt/video

Монтирование подтомов

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

Повторюсь, например команда стандартного монтирования блочного устройства(помните монтировали тестовый диск с btrfs) выглядит так:

синтаксис:

  • sudo mount [диск или раздел] [куда монтировать]

при монтировани подтомов btrfs ситуация подобно только добовляется обязательная опция subvol=[имя подтома]

  • sudo mount -o [всевозможные опции монтирования],subvol=[имя подтома] [диск btrfs на котором находится подтом] [куда монтировать]

по сути можно монтировать в любую пустую директорию, для удобства в директории /mnt создадим одноименные директории для монтирование подтомов, выполнив пот такую команду:

sudo mkdir /mnt/{audio,video,soft,photo}

теперь приступим непосредственно к монтированию подтомов диска /dev/vdb

sudo mount -o subvol=@video /dev/vdb /mnt/video
sudo mount -o subvol=@audio /dev/vdb /mnt/audio
sudo mount -o subvol=@soft /dev/vdb /mnt/soft
sudo mount -o subvol=@photo /dev/vdb /mnt/photo
-5

у btrfs достаточно широкий спектр опций монтирования подтомов, так скажем на все случаи жизни. Например опция сжатия

sudo mount -o compress=zstd:6,subvol=@photo /dev/sdb /mnt/photo

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

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