Btrfs/ru

Btrfs — это Article description::copy-on-write (CoW, копирование при записи) для Linux, предназначенная для реализации расширенных возможностей, в то же время уделяя особое внимание отказоустойчивости, самовосстановлению и простоте администрирования. Совместно разработана Oracle, Red Hat, Fujitsu, Intel, SUSE, STRATO и многими другими, btrfs лицензирована под лицензией GPL и открыта для участия всех желающих.

Возможности
Ext4 является безопасной и стабильной и может обрабатывать большие файловые системы с экстентами, но зачем переключаться? Хотя Btrfs все еще считается экспериментальной, стабильность её растет, и время, когда Btrfs станет файловой системой по умолчанию для систем Linux, становится все ближе. Некоторые дистрибутивы Linux уже начали переключаться на нее в своих текущих релизах. Btrfs имеет ряд дополнительных функций, общих с ZFS, которые и сделали файловую систему ZFS популярной для BSD дистрибутивов и устройств NAS.


 * "Копирование при записи" и создание снимков - Делает инкрементные резервные копии безболезненными даже из "активной" файловой системы или виртуальной машины (ВМ).
 * Контрольные суммы на уровне файла - Метаданные для каждого файла включают контрольную сумму, которая используется для обнаружения и исправления ошибок.
 * Сжатие - Файлы могут быть сжаты и распакованы "на лету", что ускоряет работу чтения.
 * Автоматическая дефрагментация - Файловые системы настраиваются в фоновом режиме во время работы.
 * Подтома - Файловые системы могут совместно использовать одно общее пространство (pool) вместо того, чтобы размещаться в собственных разделах.
 * RAID - Btrfs осуществляет свои собственные реализации RAID, поэтому LVM или не требуются для RAID. В настоящее время поддерживаются RAID 0, 1 и 10; RAID 5 и 6 считаются нестабильными.
 * Разделы являются необязательными - Хотя Btrfs может работать с разделами, она также может напрямую использовать неформатированные устройства.
 * Дедупликация данных - Существует ограниченная поддержка дедупликации данных; однако, дедупликация в конечном итоге станет стандартной функцией в Btrfs. Это позволяет Btrfs экономить место, сравнивая файлы через бинарные изменения (binary diff).

В будущем новые кластерные файловые системы будут готовы использовать преимущество Btrfs с её копированием при записи и другими продвинутыми функциями для своих хранилищ объектов. — один из примеров кластерной файловой системы, которая выглядит очень перспективно и может использовать Btrfs.

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

Emerge
Пакет содержит утилиты необходимые для работы с файловой системой Btrfs. Для его установки выполните:

Использование
Ввод длинных команд Btrfs может быстро надоесть. Каждая команда (кроме начальной команды ) может быть сведена к очень короткому набору инструкций. Этот метод полезен при работе в командной строке, чтобы уменьшить количество вводимых символов.

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

Сократите каждую из длинных команд после команды, уменьшив их до их уникального, кратчайшего префикса. В этом контексте уникальный означает, что нет других команд, которые соответствуют команде в самом коротком её варианте. Укороченная версия указанной команды:

Никакие другие команды не начинаются с  ;   - единственная. То же самое относится к подкоманде  команды.

Создание
Чтобы создать файловую систему Btrfs на разделе :

В примере выше замените  на номер раздела, а   на букву диска. Например, чтобы отформатировать в Btrfs третий раздел на первом диске запустите:

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


 * — монтирование вручную.
 * — через определение точки монтирования в файле, что позволит автоматически монтировать файловую систему во время загрузки.
 * — автоматическое монтирование по запросу (полезно для USB-носителей).
 * — автоматическое монтирование при доступе к файловой системе.

Конвертация ext* файловых систем
Можно сконвертировать файловые системы ext2, ext3 и ext4 в Btrfs с помощью утилиты.

Следующие инструкции подходят только для преобразования отмонтированных файловых систем. Чтобы сконвертировать root-раздел, загрузитесь с системного аварийного диска (SystemRescueCD работает отлично) и запустите команду конвертации для root-раздела.

Сперва убедитесь, что отмонтировали раздел:

Проверьте целостность файловой системы с помощью соответствующей утилиты. Далее показан пример для файловой системы ext4:

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

Убедитесь, что после форматирования устройства не забыли отредактировать файл и изменить значение в колонке файловая система с ext4 на Btrfs:

Дефрагментация
Другая полезная функция Btrfs — это онлайн дефрагментация. Чтобы дефрагментировать корневую файловую систему с Btrfs, запустите:

Параметр монтирования  регулирует дефрагментацию во время работы.

Сжатие
Btrfs поддерживает прозрачное сжатие с помощью алгоритмов zlib, lzo и zstd (версии 1.5.0)

Можно сжать конкретный файл с помощью атрибутов файла:

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

В зависимости от производительности процессора и диска использование сжатия lzo может улучшить общую пропускную способность.

Также можно использоваться алгоритмы сжатия zlib или zstd вместо lzo. Zlib более медленный, но имеет более высокую степень сжатия, в то время, как zstd находится где–то посередине.

To force zlib compression across the whole filesystem:

Substitute zstd for zlib in the example above to activate zstd compression.

Уровень сжатия
Начиная с версии ядра 4.15.0, сжатие zlib можно установить с помощью уровней 1-9. Начиная с версии ядра 5.1.0, сжатие zstd можно установить с помощью уровней 1-15. Например, чтобы задать для zlib максимальное сжатие во время монтирования:

Или установить минимальное сжатие:

Или отрегулируйте сжатие путем перемонтирования:

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

Adjust fstab for compression
Once a drive has been remounted or adjusted to compress data, be sure to add the appropriate modifications to the file. In this example, zstd compression is set with a level of 9 at mount time:

Коэффициент сжатия и использование диска
Обычные инструменты пользовательского пространства для определения используемого и свободного места, такие как  и   могут давать неточные результаты для раздела  Btrfs  из-за внутренних конструктивных различий в способе записи файлов по сравнению с, например, ext2/3/4.

Поэтому рекомендуется использовать альтернативы du/df, предоставляемые инструментом пользовательского пространства. В дополнение к этому, инструмент, взятый из пакета sys-fs/compsize, может быть полезным при предоставлении дополнительной информации о коэффициентах сжатия и использовании сжатых файлов на диске. Ниже приведены примеры использования этих инструментов для раздела btrfs, смонтированного в.

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

Btrfs handles data and metadata separately. This is important to keep in mind when using a multi-device filesystem. It is possible to use separate profiles for data and metadata block groups. For example, metadata could be configured across multiple devices in RAID1, while data could be configured to RAID5. This profile is possible when using three or more block devices, since RAID5 requires a minimum of 3 block devices.

This type of profile offers the benefit of redundancy for metadata on each device and striping for data across devices, which increases read speeds. The drawback of this profile is more space than necessary is used for metadata, and write speeds are reduced for data blocks, since RAID5 uses a parity bit.

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

Conversion
Преобразование между режимами RAID возможно с помощью подкоманды balance. Например, предположим, что RAID1 с несколькими устройствами смонтирован в. Можно преобразовать RAID1 в RAID5 с помощью следующей команды:

Преобразование режима RAID может быть выполнено, когда файловая система находится в работе и используется. Возможные режимы RAID в btrfs — RAID0, RAID1, RAID5, RAID6, и RAID10. Для получения дополнительной информации см. вики-страницу BTRFS.

Addition
Additional devices can be added to existing multi device file systems. Follow the removal section below.

A riskier, but faster, alternative to safely removing a device is to shut the system down (or if the system supports hot swappable drives, at least unmount the filesystem), physically disconnect and remove the device that is to be replaced, substituted and connect the new device in it's place, power up the system (if necessary).

Note: Systems that will be power cycled will have the multi device filesystem fail to mount, since a device has been physically removed from the pool.

Once the system is booted, mount the multi-device filesystem with, then perform the following steps on adding a new device.

After the device has been re-added it is then necessary to re-balance the filesystem to be sure data is spanned across the newly added device:

By device path
Block devices (disks) can be removed from multi-device filesystems using the subcommand:

By device ID
Use the usage subcommand to determine the device IDs:

Next use the device ID to remove the device. In this case will be removed:

Resizing
btrfs partitions can be resized while online using the built-in resize subcommand. For example, to add 50 gigabytes of space to the rootfs:

The command can also fill all available space:

Подтома
Как уже упоминалось выше в списке функций, Btrfs может создавать подтома. Подтома могут быть использованы, чтобы лучше организовать и управлять данными. Они становятся особенно мощными в сочетании с моментальными снимками. Важное различие должно быть сделано между подтомами Btrfs и подтомами созданными менеджером логических томов (LVM). Подтома Btrfs не являются устройствами уровня блока, они представляют собой пространства имен файлов POSIX. Они могут быть созданы в любом месте файловой системы и будут действовать как любой другой каталог в системе с одной оговоркой: подтома могут быть смонтированы и размонтированы. Подтома вкладываемы (подтома могут быть созданы внутри других подтомов), и легко создаются или удаляются.

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

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

Список
Чтобы увидеть созданный(е) подтом(а), используйте команду  в соответствующем месте файловой системы Btrfs. Если текущий каталог находится где-то внутри файловой системы Btrfs, следующая команда отобразит подтом(а), которые существуют в файловой системе:

Если в точке монтирования файловой системы Btrfs, существуют подтома, созданные командой из примера выше, вывод команды списка будет выглядеть примерно так:

Удаление
All available subvolume paths in a Btrfs filesystem can be seen using the list command above.

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

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

Снимки
Снимки - это подтома, которые обмениваются данными и метаданными с другими подтомами. Это стало возможным благодаря способности Btrfs копирование при записи (CoW). Снимки можно использовать для нескольких целей, одной из которых является создание резервных копий структур файловой системы в определенные моменты времени.

Если корневая файловая система - это Btrfs, то можно создать снимок с помощью команды :

Следующий небольшой сценарий оболочки можно добавить в cron задание, срабатывающее в определенное время, для создания снимка/резервной копии корневой файловой системы, отформатированной в Btrfs. Временные метки могут быть скорректированы с учетом предпочтений пользователя.

Монтирование
Подтом может быть смонтирован в месте, отличном от того, где он был создан, или пользователи могут не монтировать их вообще. Например, пользователь может создать файловую систему Btrfs в и создать подтома  и. Затем подтома могут быть смонтированы в и, при этом исходный верхний уровень подтома оставлен не примонтированным. Это приводит к конфигурации, в которой относительные пути подтомов от верхнего уровня подтома отличаются от их фактического пути.

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

Аналогично, можно обновить колонку filesystem, чтобы смонтировать подтома Btrfs следующим образом:

Проверка файловой системы
With a failing disk or corrupted data, it may be necessary to run the a filesystem check. Typically filesystem check commands are handled through the prefix, but for btrfs filesystems, checks are handled via the  subcommand:

Multi device filesystem mount fails
After ungracefully removing one or more devices from a multi device filesystem, attempting to mount the filesystem will fail:

This type of mount failure could be caused by missing one or more devices from the multi device filesystem. Missing devices can be detected by using the subcommand. In the following example is one of the devices still connected to the multi device filesystem:

Missing device can be ungracefully dropped from the filesystem by using the following command:

Использование c образами ВМ
При использовании Btrfs с образами дисков виртуальных машин, лучше всего отключить копирование при записи на образы дисков, чтобы повысить производительность ввода-вывода. Это можно сделать только для вновь созданных файлов. Также можно отключить CoW для всех файлов, созданных в определенном каталоге. Например, с помощью команды :

Очистка кэша свободного места
Можно очистить кэш свободного места Btrfs путем монтирования файловой системы с помощью параметра монтирования. Например:

Btrfs захват памяти (дискового кеша)
При использовании некоторых специальных способностей Btrfs (таких как создание множества  копий или создание безумного количества снимков) много памяти можно съесть и не освободить достаточно быстро от кеша индексного дескриптора ядра. Эта проблема может быть не обнаружена, поскольку память, предназначенная для кеша диска, может быть не видна в традиционных утилитах мониторинга системы. Утилита (доступная как часть пакета ) была специально создана для определения того, сколько памяти потребляют объекты ядра:

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

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

В большинстве случаев, пользователям Btrfs, вероятно, потребуется, чтобы просто восстановить объекты slab (dentries и btrfs_inodes):

Чтобы очистить весь дисковый кэш (объекты slab и кэш страниц), используйте :

Более подробную информацию о slab ядра можно найти в этой записи блога dedoimedo.

Не удается смонтировать btrfs, при монтировании возвращается: неизвестный тип файловой системы 'btrfs'
Оригинальное решение Тима на Stack Exchange вдохновило на следующий способ - сборка ядра вручную, вместо использования genkernel:

Корневая файловая система Btrfs не загружается
Genkernel's initramfs, созданная с помощью приведенной ниже команды, не загружает btrfs:

Компилируйте поддержку btrfs в ядре, а не как модуль, или используйте Dracut для генерации initramfs.

Смотрите также

 * Btrfs snapshots - Скрипт, который создает моментальные снимки при изменении файлов.
 * Btrfs/System Root Guide - Использование файловой системы btrfs, как коллекции подтомов, в том числе, в качестве корневой файловой системы.
 * Btrfs native system root guide - Альтернативное руководство по использованию подтома в файловой системе btrfs в качестве корневой файловой системы.
 * ext4 - Файловая система по умолчанию для большинства дистрибутивов Linux.
 * Btrbk — инструмент для создания инкрементных снимков и удаленных резервных копий подтомов Btrfs.
 * Samba shadow copies - Использование Samba для предоставления теневых копий как 'предыдущих версий' клиентам Windows.
 * Snapper - Программа командной строки, способная создавать и управлять снимками файловой системы Btrfs, а также просматривать и отменять изменения.
 * ZFS - Файловая система следующего поколения, создана Matthew Ahrens и Jeff Bonwick.

Внешние ресурсы

 * https://wiki.debian.org/ru/Btrfs - Как описано в Debian вики.
 * https://wiki.archlinux.org/index.php/Btrfs_(Русский) Статья Btrfs - как описано в Arch Linux вики.
 * http://www.funtoo.org/BTRFS_Fun - BTRFS Fun на вики Funtoo.
 * http://marc.merlins.org/perso/btrfs/post_2014-05-04_Fixing-Btrfs-Filesystem-Full-Problems.html - Советы и рекомендации по устранению проблем файловой системы Btrfs в некоторых ситуациях.