Btrfs/ru

Btrfs — это файловая система для 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; на подходе RAID 5 и 6.
 * Разделы являются необязательными - Хотя Btrfs может работать с разделами, она может напрямую использовать неформатированные устройства.
 * Дедупликация данных - Существует ограниченная поддержка дедупликации данных; однако, дедупликация в конечном итоге станет стандартной функцией в Btrfs. Это позволяет Btrfs экономить место, сравнивая файлы через бинарные изменения (binary diff).

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Уровень сжатия должен быть виден в или путем проверки последних выходных данных.

Коэффициент сжатия и использование диска
The usual userspace tools for determining used and free space like  and   may provide inaccurate results on a Btrfs partition due to inherent design differences in the way files are written compared to, for example, ext2/3/4.

It is therefore advised to use the du/df alternatives provided by the btrfs userspace tool. In Addition to that, The  tool found from the sys-fs/compsize package can be helpful in providing additional information regarding compression ratios and the disk usage of compressed files. The following are example uses of these tools for a btrfs partition mounted under.

RAID
Создать RAID в Btrfs гораздо проще, чем создать RAID с помощью.

Самый простой способ создать RAID, это использовать все устройства:

Converting between RAID modes is possible with the balance sub-command. For example, say a multiple device RAID 1 is mounted at. It is possible to convert this RAID1 to RAID0 with using the following command:

RAID mode conversion can be performed while the filesystem is online and in use. Possible RAID modes in btrfs include RAID0, RAID1, RAID5, RAID6, and RAID10. See the upstream BTRFS wiki for more information.

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

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

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

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

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

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

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

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

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

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

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

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

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

Using with VM disk images
When using Btrfs with virtual machine disk images, it is best to disable copy-on-write on the disk images in order to speed up IO performance. This can only be performed on files that are newly created. It also possible to disable CoW on all files created within a certain directory. For example, using the command:

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

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

OBJS ACTIVE USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME 1034532 1032386 99%    1.04K 344844        3   1379376K btrfs_inode }}

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

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

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

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

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

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

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

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

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

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

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

 * 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 в некоторых ситуациях.