Как использовать подтома Btrfs: полное и практическое руководство

Последнее обновление: 17/12/2025
Автор: Исаак
  • Btrfs объединяет файловую систему, RAID и менеджер томов с механизмом COW (Copyright, Word, Word), моментальными снимками, сжатием и собственными контрольными суммами.
  • Подтома — это логические системы внутри Btrfs, которые позволяют разделять каталоги /, /home, /var и управлять снимками по зонам.
  • Поддержка нескольких устройств позволяет добавлять/удалять диски, изменять профили RAID и балансировать данные в режиме онлайн.
  • Такие инструменты, как snapper или btrbk, используют снимки Btrfs, но для создания полноценных резервных копий по-прежнему необходимы внешние копии.

Как проверить состояние жесткого диска с помощью CrystalDiskInfo

Если вы приехали из ext4 или XFS, и вы рассматриваете Btrfs Озадаченный вид совершенно нормален: это не «просто еще одна файловая система», а скорее комбинация файловой системы, RAID и менеджера томов. Когда вы начинаете видеть такие вещи, как подтома, снимки, балансировка нагрузки или проверка целостности, все это кажется сложным, но на самом деле это компоненты, которые идеально подходят друг к другу.

В этой статье мы увидим Как использовать подтома Btrfs и для чего они нужны. В типичных установках (например, Arch, Debian, openSUSE или NAS с Synology/QNAP) вы увидите, как это связано со снимками, RAID, сжатием и что это означает для дискового пространства. Вы также увидите примеры команды Реальные задачи, связанные с созданием файловых систем, подтомов, моментальных снимков и обработкой нескольких дисков, а также некоторые типичные проблемы (известная ENOSPC с «свободным» пространством).

Что такое Btrfs и чем она отличается?

Btrfs — это файловая система нового поколения. для GNU/Linux, разработанный для масштабирования от простого решения. SSD Она поддерживает многодисковые пулы с избыточностью, моментальными снимками и сжатием. Она интегрирована в ядро ​​начиная с версии 2.6.29, и хотя её разработка всё ещё ведётся, формат дисков стабилизирован, поэтому система Btrfs, созданная сегодня, будет по-прежнему читаема будущими версиями ядра.

В отличие от более традиционных систем, таких как ext4 или XFS, Btrfs интегрирует функции Ранее эти функции были разделены между файловой системой, программным RAID (mdadm) и менеджером логических томов (LVM). С помощью единого стека вы получаете управление несколькими устройствами, профилями RAID, моментальными снимками, подтомами, проверками целостности и многим другим.

Основные принципы Btrfs: COW (Copy-on-Wire), снимки состояния, RAID и контрольные суммы.

Центральным элементом Btrfs является Модель «копирование при записи» (COW)При изменении данных система не перезаписывает их в том же месте; вместо этого она записывает новые блоки в другом месте и обновляет ссылки. Это позволяет практически мгновенно клонировать файлы и подтома, а также создавать снимки, которые очень экономичны как по времени, так и по занимаемому пространству.

Данная конструкция основана на том, что каждый блок данных и метаданных содержит свои собственные данные. контрольная сумма (обычно CRC32C)При чтении блока Btrfs проверяет контрольную сумму; если она не совпадает и существует другая копия (например, в RAID 1 или RAID 10), она считывает работоспособную реплику и исправляет ошибку на лету. Это защищает от скрытого повреждения данных, которое ext4 сама по себе обнаружить не может.

Кроме того, в стандартную комплектацию Btrfs входит следующее оборудование. поддержка нескольких устройств с профилями RAID0, RAID1, RAID10, RAID5 и RAID6, настраиваемыми отдельно для данных (-d) и метаданных (-m). Внутри это не классический блочный RAID, как mdadm, а репликация и чередование на уровне «блоков», управляемые самой файловой системой.

Наконец, можно применить Btrfs. прозрачное сжатие на лету (zlib, lzo, zstd): Данные сжимаются перед записью и распаковываются при чтении, что совершенно незаметно для приложений. Это уменьшает занимаемое пространство и во многих случаях даже ускоряет чтение на медленных или механических дисках.

Создание файловой системы Btrfs

Чтобы начать работать с подтомами, вам сначала нужно... файловая система Btrfs на устройствеОсновной процесс создания очень похож на создание любого файла MKFS:

mkfs.btrfs /dev/sdb

Эта команда выполняет инициализацию. /dev/sdb с BtrfsRAID или что-то подобное не требуется. Можно использовать весь диск или раздел. Затем его нужно смонтировать в точку монтирования, например:

mount /dev/sdb /mnt/btrfs

Если вы хотите с самого начала многоустройственная системаВы просто добавляете несколько устройств к команде создания:

mkfs.btrfs /dev/sdc /dev/sdd

В этом случае Btrfs создает логический пул с агрегированной емкостью устройства (по умолчанию данные хранятся в "одном" массиве, а метаданные дублируются как RAID1, если не указано иное). При монтировании вам потребуется указать только одно из устройств, например, /dev/sdc.

Встроенные профили RAID и динамическое управление пулами

При создании файловой системы вы уже можете указать... профиль избыточности для данных и метаданных с помощью опций -dy -m: значения, такие как raid0, raid1, raid10, raid5, raid6 или single. Типичный пример RAID1 в Btrfs:

mkfs.btrfs -d raid1 -m raid1 /dev/sdc /dev/sdd

В отличие от классического RAID1, в Btrfs В каждом блоке нет одинаковых зеркал.Гарантируется, что каждый блок данных или метаданных будет иметь как минимум две копии на разных устройствах, но как таковых «двойников» дисков не существует, и допускаются диски разных размеров.

  Исправить ошибку iPhone не заряжается

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

btrfs device add /dev/sdb /mnt/btrfs
btrfs device delete /dev/sdc /mnt/btrfs

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

btrfs filesystem balance /mnt/btrfs

Эта балансировка перемещает блоки в соответствии с выбранным профилем RAID, так что Все диски взаимодействуют друг с другом, и пространство используется более равномерно.Это онлайн-операция: файловая система остается доступной во время ее работы.

Как переключиться с одиночного RAID-массива на RAID1 без переустановки

Одно из главных преимуществ Btrfs заключается в том, что вы можете преобразовать уже используемую систему в другой RAID-профиль без отмонтирования или переустановки. Представьте, что у вас корневая файловая система находится в Btrfs на одном диске /dev/sda1, и вы хотите переключиться на RAID1, добавив /dev/sdb1.

Последовательность действий будет следующей: добавить новое устройство и запустить балансировку нагрузки с преобразованием профиля:

btrfs device add /dev/sdb1 /
btrfs balance start -dconvert=raid1 -mconvert=raid1 /

В ходе этого процесса Btrfs будет перемещаться перемещение фрагментов таким образом, чтобы все данные и метаданные были продублированы. на обоих дисках. После завершения команда «btrfs filesystem show /» отобразит два устройства с аналогичным использованием, а команда «btrfs filesystem df /» покажет профили RAID1 для данных, метаданных и системы.

Деградация и восстановление RAID с помощью Btrfs

Если в конфигурации с В режиме RAID1 один из дисков выходит из строя.Система переходит в деградационный режим. Для настройки такой системы в Btrfs необходима следующая опция:

mount -o degraded /dev/sdb /mnt/btrfs

Пока система находится в таком состоянии, Btrfs продолжит предоставлять данные с исправных копий, но Она не будет обладать полной избыточностью.Правильная процедура заключается в добавлении нового диска, удалении «отсутствующего» устройства из пула и выполнении балансировки нагрузки для повторной репликации блоков.

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

btrfs scrub start /mnt/btrfs
btrfs scrub status /mnt/btrfs

Эта проверка выполняется в фоновом режиме во время монтирования системы, поэтому рекомендуется ее выполнить. Назначьте его на непиковые часы.особенно на серверах или сетевых хранилищах (NAS).

Прозрачное сжатие: zlib, lzo, zstd

Сборка системы с опцией сжимать или сжимать = Вы активируете автоматическое сжатие данных, записываемых с этого момента. Например:

mount -o compress=zstd /dev/sdb /mnt/btrfs

Система сохранит сжатые блоки на диске, но при выполнении команд ls или stat вы всё равно увидите... несжатый логический размерЗаметный выигрыш виден при использовании таких инструментов, как df (меньше занимаемого места) или «btrfs filesystem df», а также утилит, таких как compsize.

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

  • Zlib: обеспечивает сильное сжатие, но работает медленнее; полезен для очень статичных данных.
  • изоОчень быстрый, но сжимает меньше данных; хороший вариант для систем с большим объемом записи.
  • зстд: очень интересный баланс с несколькими настраиваемыми уровнями.

Вы также можете настроить уровень сжатия Например, в настройках монтирования параметр `zstd:1` отдает приоритет скорости, а `zstd:15` — максимальной производительности за счет использования ЦП. Эти параметры отображаются в файлах `/proc/mounts` и в сообщениях `dmesg` при монтировании системы.

Функция копирования при записи в файлы: мгновенное клонирование с использованием реферлинков.

Механизм COW на уровне файлов доступен, например, через –reflink=always cp optionПри копировании большого файла в Btrfs с помощью команды reflink данные не дублируются на диске; создаются только дополнительные ссылки на те же блоки.

cp --reflink=always imagen.iso copia1.iso

Текст появляется немедленно и занимает в начале нет дополнительного местаФизическое копирование затронутых блоков происходит только при изменении одного из файлов (истинное копирование при записи). Это чрезвычайно полезно для шаблонов. виртуальные машиныбазовые изображения и т. д.

  Полное введение в Rust: практическое руководство для начинающих с примерами

Они следуют одной и той же логике. снимки подтомовЭто просто клоны COW целого подтома. При создании они практически не содержат метаданных; фактическое использование произойдет позже, в зависимости от того, насколько сильно отличается содержимое оригинала и снимка.

Подтома Btrfs: что это такое и для чего они используются.

В Btrfs подтом — это, на практике, «мини-файловая система» внутри основной системыПолная файловая система Btrfs всегда имеет как минимум один подтом (верхний уровень), и поверх него можно создавать другие, которые внешне выглядят как простые каталоги.

Прелесть в том, что каждый подтом может быть собирать независимоиметь собственные снимки состояния, квоты (при включенной системе квот) и политики. резервная копияИ всё это благодаря использованию одного и того же пула ресурсов. хранение и та же конфигурация RAID, что и у родительского тома.

Чтобы создать несколько подтомов поверх уже смонтированной файловой системы Btrfs в /mnt/btrfs, нужно сделать примерно следующее:

btrfs subvolume create /mnt/btrfs/subvolumen1
btrfs subvolume create /mnt/btrfs/subvolumen2
btrfs subvolume create /mnt/btrfs/subvolumen3

Эти подтома будут отображаться как каталоги в /mnt/btrfs, но если вы выведете их список с помощью btrfs, вы увидите их содержимое. Идентификаторы и внутренние маршруты:

btrfs subvolume list /mnt/btrfs

Получив идентификатор (например, 256 для subvolume1), вы можете собирайте только этот подтом по другому маршруту:

mount -o subvolid=256 /dev/sdb /mnt/subvol1

Таким образом, доступ к данным в этом подтоме можно получить следующим образом: /mnt/btrfs/subvolume1 и /mnt/subvol1 Одновременно, но содержимое остается тем же. Это очень полезно для разделения каталогов /, /home, /var или определенных наборов данных без использования традиционных разделов.

Проектирование подтомов: практические примеры (Arch, Debian, NAS)

Una очень типичная структура На настольном компьютере это может выглядеть так:

  • @ для корневого каталога (/) без /home или /var/lib/docker.
  • @домой Перейти по адресу /home с вашими личными данными.
  • @вар или конкретные подтома, такие как @var-log, @var-cache и т. д.
  • @снимки для хранения снимков, отсортированных по дате.

Это позволяет использовать такой инструмент, как snapper для создания снимков системыTimeshift или btrbk могут создавать снимки только системы (подтома @) для отката обновлений, в то время как пользовательские документы (в @home) защищаются или синхронизируются по другой логике.

На сетевых хранилищах (NAS) от Synology или QNAP фактически выполняется следующее: общие папки на подтомах BtrfsТаким образом, функция репликации снимков может создавать снимки этих папок, клонировать их или реплицировать на другое сетевое хранилище (NAS). Принцип тот же, но реализован в графическом интерфейсе.

Снимки подтомов: откат и копирование за считанные секунды.

Снимки состояния в Btrfs — это просто подтома, созданные как снимок другогоДля создания снимка /mnt/btrfs/subvolume1 в другом подтоме используйте команду snapshot_sub1:

btrfs subvolume snapshot \
  /mnt/btrfs/subvolumen1 \
  /mnt/btrfs/subvolumen1_snapshot

Если затем выполнить команду `btrfs subvolume list`, вы увидите новый идентификатор и путь для этого снимка. С этого момента... Они оба логически независимы.Изменения в одном не влияют на другой, хотя они внутренне используют общие блоки до тех пор, пока не будут изменены.

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

Использование файловой системы Btrfs на нескольких дисках в режиме RAID

В Btrfs управление несколькими дисками осуществляется непосредственно из файловой системы. При создании тома можно, например, определить отдельные профили для данных и метаданных. Данные в RAID5 и метаданные в RAID1. Если у вас три или более устройств:

mkfs.btrfs -d raid5 -m raid1 /dev/sdb /dev/sdc /dev/sdd

Этот тип профиля предлагает удаление данных и проверка четности (более высокая скорость чтения и отказоустойчивость) и высокая избыточность метаданных, но за счет некоторого дополнительного места. Однако RAID 5/6 в Btrfs исторически имел существенные ошибки; если среда критическая, многие администраторы по-прежнему предпочитают RAID 1/10.

Если вы изначально создали пул RAID1, а позже захотите более эффективно использовать пространство, вы всегда можете это сделать. конвертируйте профили на лету сбалансированно:

btrfs balance start -dconvert=raid5 -mconvert=raid1 /srv

Аналогичным образом, добавление или удаление устройств осуществляется с помощью btrfs устройство добавить/удалить и последующее балансирование для перемещения фрагментов. Команда «btrfs filesystem show» предоставляет обзор состояния, размера и использования каждого диска в пуле.

  Автоматизируйте управление Windows с помощью Desired State Configuration (DSC)

Управление пространством: почему du и df «лгут» в Btrfs

Один из самых запутанных аспектов Btrfs заключается в том, что Классические инструменты df и du неточно отражают реальность.Сочетание RAID на уровне блоков, механизма "кто напишет, тот и получит", моментальных снимков и сжатия означает, что предположение "1 МиБ записано = 1 МиБ занято" не выполняется.

В Btrfs место зарезервировано в больших помещениях. «кусочки» (кусочки)Как правило, 1 ГиБ используется для данных, а 256 МиБ — для метаданных. Каждому блоку присваивается соответствующий профиль: одиночный, RAID1, RAID10 и т. д. В рамках одного блока, да, 1 МиБ записанного пространства соответствует 1 МиБ использованного пространства, но способ объединения нескольких блоков и копий блоков затрудняет этот простой расчет.

Кроме того, при использовании COW и снимков удаление файла может быть затруднено. Это не гарантирует, что его блоки будут выпущены.Если эти блоки используются совместно с другим снимком или клоном, они будут продолжать занимать место до тех пор, пока не останется никаких ссылок на них. Отсюда и ощущение: «Я удаляю что-то, а место не восстанавливается».

По этой причине Btrfs предоставляет специальные команды, такие как “btrfs filesystem df «которые показывают разбивку данных, метаданных и использования системы по профилям, а также команду «btrfs filesystem show». », что показывает, какая часть каждого диска зарезервирована и используется в исходном виде.

Рекомендации по работе с подтомами и моментальными снимками в повседневной практике

Например, если вы едете верхом, Арка Linux с файловой системой Btrfs на одном SSD-накопителеНаиболее рекомендуемая стратегия:

  • Создайте уникальную файловую систему Btrfs на корневом разделе.
  • Определите отдельные подтома для / (системный каталог), /home, /var/log, возможно, /var/lib/libvirt или /var/lib/docker.
  • Смонтируйте каждый подтом с соответствующими параметрами сжатия (zstd или lzo) и, при необходимости, выполните автоматическую дефрагментацию для загрузки большого количества небольших файлов.
  • Используйте Snapper, Timeshift или btrbk для автоматизировать создание снимков системного подтома до и после обновлений.

На физическом устройстве с несколькими SSD-накопителями вы можете выбрать один из вариантов. единая файловая система Btrfs на нескольких устройствах с RAID1/10 и логическими подтомами или с несколькими отдельными Btrfs. Для подтомов мало что меняется: они остаются логическими сущностями внутри тома Btrfs, в котором находятся; важно с самого начала определить, какие данные вы хотите иметь возможность создавать снимки и восстанавливать независимо друг от друга.

Что касается полных резервных копий, имейте в виду, что Снимки не являются внешними резервными копиями.Snapper или Timeshift обычно используются для локальных снимков (в основном системы), а для реального резервного копирования всего (включая /home) рекомендуется полагаться на такие инструменты, как borg, restic, rsync, remote btrbk или собственные решения NAS для создания снимков/репликации.

Основные принципы администрирования и полезные команды Btrfs

Интерфейс командной строки Btrfs может показаться несколько многословным, но он позволяет сокращать подкоманды, используя уникальные префиксы.Например, вместо “btrfs filesystem defragment /” можно использовать “btrfs fi de /”, если нет неоднозначности.

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

  • mkfs.btrfs: создание файловых систем с параметрами RAID и метками.
  • btrfs filesystem show/dfПросмотр устройств, использования и профилей.
  • btrfs устройство добавить/удалить: добавить или удалить диски из пула.
  • btrfs balance start: перебалансировка данных и преобразование профилей RAID.
  • btrfs scrub start/status: проверка и исправление блоков с помощью контрольных сумм.
  • btrfs subvolume create/list/delete/snapshot: управление подтомами и моментальными снимками.
  • проверка btrfsПроверьте файловую систему в автономном режиме (с осторожностью).

Также важно помнить, что Использовать традиционную программу fsck не следует. к Btrfs в каждом ЗагрузкаВ файле fstab последнее поле записей Btrfs должно быть равно 0, чтобы избежать некорректных автоматических проверок.

Благодаря этому набору концепций и команд, Btrfs перестаёт быть тем «странным чёрным ящиком» и становится очень гибкий инструмент С его помощью вы можете логически организовать свою систему с помощью подтомов, воспользоваться действительно полезными моментальными снимками и объединить все это с избыточностью и сжатием, как на простом ноутбуке, так и на пуле из нескольких дисков.

Btrfs
Теме статьи:
Снимки Btrfs с помощью Snapper: восстановление системы и данных в Linux