Начало работы с btrfs для Linux
Файловая система B-tree — это файловая система и менеджер томов в одном лице. Он предлагает многообещающие возможности для предоставления расширенного набора функций файловой системы в Linux.
Btrfs доступен для Linux уже несколько лет, поэтому, возможно, вы уже знакомы с ним. Если нет, у вас могут возникнуть вопросы по этому поводу, особенно если вы используете Fedora Workstation (теперь Btrfs является ее файловой системой по умолчанию). Цель этой статьи — помочь вам ознакомиться с ним и его расширенными функциями, такими как копирование при записи и контрольные суммы.
Btrfs, сокращение от B-Tree Filesystem, на самом деле представляет собой файловую систему и менеджер томов в одном лице. Его часто рассматривают как ответ на ZFS, представленную в ОС Solaris от Sun Microsystem еще в 2005 году, которая теперь в значительной степени заменена реализацией с открытым исходным кодом под названием OpenZFS. Ubuntu Linux и FreeBSD часто используют OpenZFS. Другими примерами подобных функций являются Stratis от Red Hat и диспетчер логических томов Linux (LVM).
Настраивать
Чтобы попробовать Btrfs, я скачал ISO-файл Fedora 33 Workstation и установил его на новую виртуальную машину (ВМ). Процесс установки не изменился по сравнению с предыдущими версиями. Я не настраивал никаких параметров, включая разметку и форматирование диска, чтобы обеспечить точную «готовую» настройку для этого руководства. Как только виртуальная машина была запущена и заработала, я установил и запустил редактор разделов GNOME (GParted), чтобы получить красивое, свежее с завода представление о расположении дисков.
(Алан Форми-Дюваль, CC BY-SA 4.0)
С этого момента это мало чем отличается от того, к чему вы привыкли; на самом деле вы можете использовать систему в обычном режиме, даже не заметив, что файловая система — Btrfs. Однако наличие этого нового значения по умолчанию позволяет вам использовать несколько интересных функций.
Проверьте файловую систему Btrfs.
Мне неизвестны какие-либо графические инструменты, специфичные для Btrfs, хотя некоторые из их функций были включены в существующие инструменты управления дисками.
Из командной строки вы можете поближе познакомиться с форматом Btrfs:
# btrfs filesystem show
Label: 'fedora_localhost-live' uuid: f2bb02f9-5c41-4c91-8eae-827a801ee58a
Total devices 1 FS bytes used 6.36GiB
devid 1 size 10.41GiB used 8.02GiB path /dev/vda3
Изменить метки Btrfs
Первое, что я заметил, — это метка файловой системы, установленная установщиком: fedora_localhost-live
. Это неточно, поскольку теперь это установленная система, а не Live CD. Поэтому я изменил его с помощью команды btrfs label system
.
Изменить метку файловой системы Btrfs просто:
# btrfs filesystem label /
fedora_localhost-live
# btrfs filesystem label / fedora33workstation
# btrfs filesystem label /
fedora33workstation
Управление подтомами Btrfs
Подтом представляет собой стандартный каталог, которым может управлять Btrfs. На моей новой рабочей станции Fedora 33 есть несколько томов:
# btrfs subvolume list /
ID 256 gen 2458 top level 5 path home
ID 258 gen 2461 top level 5 path root
ID 265 gen 1593 top level 258 path var/lib/machines
Создайте новый субтом с помощью команды btrfs subvolume create
или удалите субтом с помощью btrfs subvolume delete
:
# btrfs subvolume create /opt/foo
Create subvolume '/opt/foo'
# btrfs subvolume list /
ID 256 gen 2884 top level 5 path home
ID 258 gen 2888 top level 5 path root
ID 265 gen 1593 top level 258 path var/lib/machines
ID 276 gen 2888 top level 258 path opt/foo
# btrfs subvolume delete /opt/foo
Delete subvolume (no-commit): '/opt/foo'
Подтома позволяют выполнять такие действия, как установка квоты, создание моментального снимка и репликация в другие местоположения и хосты. Как системные администраторы могут воспользоваться этими возможностями? А как насчет домашних каталогов пользователей?
Добавить пользователя
Как это было в старые времена, добавление новой учетной записи пользователя создает домашний каталог для использования этой учетной записью:
# useradd student1
# getent passwd student1
student1:x:1006:1006::/home/student1:/bin/bash
# ls -l /home
drwx------. 1 student1 student1 80 Oct 29 00:21 student1
Традиционно домашний каталог пользователя является подкаталогом /home
. Владение и привилегии подстраиваются под владельца, но специальных функций для управления ими нет. Среда корпоративных серверов — это еще один сценарий. Часто каталог зарезервирован для использования конкретным приложением и его пользователем. Вы можете использовать Btrfs для управления этими каталогами и применения ограничений к ним.
Чтобы разместить подтома Btrfs в качестве домашних пользовательских страниц, в команде useradd
появилась новая опция: --btrfs-subvolume-home
. Хотя страницы руководства не были обновлены (на момент написания этой статьи), вы можете увидеть эту опцию, запустив useradd --help
. Если передать эту опцию при добавлении нового пользователя, будет создан новый субтом Btrfs. Он работает так же, как опция -d
для создания обычного каталога:
# useradd --btrfs-subvolume-home student2
Create subvolume '/home/student2'
Подтвердите пользователя с помощью getent passwd Student2
, и все будет выглядеть нормально. Однако запустите команду btrfs subvolume
, чтобы просмотреть подтома, и вы увидите кое-что интересное: домашний каталог нового пользователя!
# btrfs subvolume list /
ID 256 gen 2458 top level 5 path home
ID 258 gen 2461 top level 5 path root
ID 265 gen 1593 top level 258 path var/lib/machines
ID 272 gen 2459 top level 256 path home/student2
Изучите второй сценарий серверной среды предприятия. Предположим, вам нужно установить сервер WildFly в /opt
и развернуть веб-приложение Java. Часто первым шагом является создание пользователя wildfly
. Сделайте это, используя новую опцию --btrfs-subvolume-home
вместе с опцией -b
, чтобы указать /opt
в качестве базового каталога:
# useradd -b /opt --btrfs-subvolume-home wildfly
Create subvolume '/opt/wildfly'
Теперь пользователь wildfly
может войти в систему и завершить установку в /opt/wildfly
.
Удаление пользователя
Когда вы удаляете пользователя, иногда вам нужно одновременно удалить файлы этого пользователя и домашний каталог. Команда userdel
имеет для этого опцию -r
, а также удаляет подтома Btrfs:
# userdel -r student2
Delete subvolume (commit): '/home/student2'
Установите квоты использования диска
На одном из моих занятий по информатике студент запустил программу на языке C, которая вышла из-под контроля и записывала данные на диск до тех пор, пока весь /home
не был заполнен в Unix-системе факультета! Сервер стал недоступен до тех пор, пока администратор не остановил вышедший из-под контроля процесс и не очистил место. То же самое верно и для приведенного выше сценария; это корпоративное приложение Wildfly будет иметь растущее количество файлов журналов и хранилищ контента для своих пользователей. Как предотвратить остановку сервера из-за переполнения диска? Установка ограничений на использование диска — хорошая идея. К счастью, Btrfs поддерживает это посредством квот.
Для настройки квот необходимо выполнить несколько шагов. Первым шагом является включение quota
в файловой системе Btrfs:
# btrfs quota enable /
Убедитесь, что вы знаете идентификационный номер группы квот (qgroup) каждого подтома, который отображается командой btrfs subvolume list
. Каждому подтому требуется связанная qgroup на основе его идентификационного номера. Это можно сделать индивидуально с помощью btrfs qgroup create
, но для удобства вики Btrfs предоставляет следующую команду для ускорения создания qgroups для подтомов в файловой системе:
>btrfs subvolume list \<path> | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup destroy 0/{} \<path>
В только что установленной системе рабочей станции Fedora 33 вы работаете с корневым путем файловой системы /
. Замените \
на корневой путь:
# btrfs subvolume list / | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} /
Затем запустите повторное сканирование квоты btrfs
и посмотрите на новые qgroups:
# btrfs quota rescan /
quota rescan started
# btrfs qgroup show /
qgroupid rfer excl
-------- ---- ----
0/5 16.00KiB 16.00KiB
0/256 272.04MiB 272.04MiB
0/258 6.08GiB 6.08GiB
0/265 16.00KiB 16.00KiB
0/271 16.00KiB 16.00KiB
0/273 16.00KiB 16.00KiB
Теперь вы можете назначить квоту одной из qgroups, которая, в свою очередь, применяется к связанному с ней подтому. Итак, если вы хотите ограничить использование домашнего каталога Student3 1 ГБ, используйте команду btrfs qgroup limit
:
# btrfs qgroup limit 1G /home/student3
Подтвердите квоту для конкретного подтома:
# btrfs qgroup show -reF /home/student3
qgroupid rfer excl max_rfer max_excl
-------- ---- ---- -------- --------
0/271 16.00KiB 16.00KiB 1.00GiB none
Немного другие параметры отображают все qgroups и все установленные квоты:
# btrfs qgroup show -re /
qgroupid rfer excl max_rfer max_excl
-------- ---- ---- -------- --------
0/5 16.00KiB 16.00KiB none none
0/256 272.04MiB 272.04MiB none none
0/258 6.08GiB 6.08GiB none none
0/265 16.00KiB 16.00KiB none none
0/271 16.00KiB 16.00KiB 1.00GiB none
0/273 16.00KiB 16.00KiB none none
Другие особенности
Эти примеры дают некоторое представление о возможностях Btrfs. Запустите btrfs --help
, чтобы просмотреть полный список команд. Существует множество других примечательных возможностей; например, снимки и отправка/получение — это две вещи, которые стоит изучить.
Последние мысли
Btrfs обещает многообещающее предоставление расширенного набора функций файловой системы для Linux. Это был не первый; Я благодарю ZFS за мое знакомство с файловой системой этого типа около 15 лет назад, но Btrfs имеет полностью открытый исходный код и не обременен патентами.
Я советую начать с виртуальной машины или запасной системы, если вы хотите изучить эту файловую систему.
Мне бы хотелось, чтобы некоторые утилиты графического управления были созданы для системных администраторов, которым нравится работать в мире графического пользовательского интерфейса. К счастью, Btrfs активно развивается, о чем свидетельствует решение проекта Fedora сделать его по умолчанию на рабочей станции 33.