Начало работы с 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 Logical Volume Manager (LVM).
Установка
Чтобы попробовать Btrfs, я скачал ISO-файл рабочей станции Fedora 33 и установил его на новую виртуальную машину (VM). Процесс установки не изменился по сравнению с предыдущими версиями. Я не настраивал никаких настроек, включая секционирование и форматирование дисков, чтобы поддерживать точную настройку "из коробки" для этого учебника. Как только виртуальная машина заработала, я установил и запустил редактор разделов GNOME Partition Editor (GParted), чтобы получить хороший, свежий заводской вид макета диска.
С этого момента он не сильно отличается от того, к чему вы привыкли; на самом деле вы можете использовать систему нормально, и вы даже не заметите, что файловая система-это 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
. Это неточно, потому что теперь это установленная система, а некомпакт-диск. Поэтому я изменил его с помощью btrfs filesystem label
команды.
Изменить метку файловой системы Btrfs очень просто:
# btrfs filesystem label /
fedora_localhost-live
# btrfs filesystem label / fedora33workstation
# btrfs filesystem label /
fedora33workstation
Управление Btrfs subvolumes
Subvolume по-видимому, является стандартным каталогом, которым можно управлять с помощью Btrfs. На моей новой рабочей станции Fedora 33 есть несколько 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
Создать новый подраздел использование файловой системы Btrfs подраздел создать команду, или удалить подраздел подраздел с файловой системой Btrfs удалить:
# 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. Собственность и привилегии адаптированы к владельцу, но нет никаких специальных функций для управления ими. Среда enterprise server - это другой сценарий. Часто каталог зарезервирован для использования конкретным приложением и его пользователем. Вы можете воспользоваться преимуществами Btrfs для управления и применения ограничений к этим каталогам.
Чтобы приспособить ее подразделов в коталогах пользователей, появилась возможность с помощью команды useradd: ---btrfs-subvolume-home. Хотя справочные страницы не были обновлены (на момент написания этой статьи), вы можете увидеть эту опцию, запустив useradd --help. При передаче этой опции при добавлении нового пользователя будет создан новый подкаталог Btrfs. Он функционирует точно так же, как параметр -d для создания обычного каталога:
# useradd --btrfs-subvolume-home student2
Create subvolume '/home/student2'
Проверьте пользователя с помощью getent passwd student2, и он будет выглядеть нормально. Однако выполните команду btrfs subvolume, чтобы вывести список subvolumes, и вы увидите кое-что интересное: домашний каталог нового пользователя!
# 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 в качестве базового каталога:
Create subvolume '/opt/wildfly'
Теперь пользователь wildfly может войти в систему и завершить установку в /opt/wildfly.
Удаление пользователя
Когда вы удаляете пользователя, иногда вы хотите удалить файлы этого пользователя и домашний каталог одновременно. Команда userdel имеет для этого параметр -r, а также удаляет подкаталоги Btrfs:
# userdel -r student2
Delete subvolume (commit): '/home/student2'
Установите квоты использования диска
На одном из моих занятий по информатике студент запустил программу на языке Си, которая вышла из-под контроля и записывала на диск до тех пор, пока весь /home не был заполнен в системе Unix кафедры! Сервер стал недоступен до тех пор, пока администратор не убил запущенный процесс и не очистил некоторое пространство. То же самое верно и для описанного выше сценария: корпоративное приложение Wildfly будет иметь все большее число файлов журналов и хранилищ контента для своих пользователей. Как вы можете предотвратить остановку сервера из-за того, что диск заполнен? Установка ограничений на использование диска-это хорошая идея. К счастью, Btrfs поддерживает…
# btrfs quota enable /
Убедитесь, что вы знаете ID номер группы квот (qgroup) каждого подраздел, который отображается командой btrfs subvolume list. Каждый подраздел должен связанный на основе его ID. Это можно сделать на индивидуальной основе с помощью btrfs qgroup create, но, что удобно, Btrfs wiki предоставляет следующую команду для ускорения создания qgroups для вложенных файлов в файловой системе:
>btrfs subvolume list \<path> | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup destroy 0/{} \<path>
В недавно установленной системе Fedora 33 workstation вы работаете с корневым путем файловой системы,/. замените \<path> корневым путем:
# btrfs subvolume list / | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} /
Затем запустите btrfs quota rescan и посмотреть на новый 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
Теперь вы можете назначить квоту одной из групп, которая, в свою очередь, применяется к связанному с ней каталогу. Итак, если вы хотите ограничить использование домашнего каталога 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.