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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Btrfs захват памяти (дискового кеша)
When utilizing some of Btrfs' special abilities (like making many  copies or creating a crazy amount of snapshots), lot of memory can be eaten and not freed fast enough by the kernel's inode cache. This issue can go undiscovered since memory dedicated to the disk cache might not be clearly visible in traditional system monitoring utilities. The utility (available as part of the  package) was specifically created to determine how much memory kernel objects are consuming:

If the inode cache is consuming too much memory, the kernel can be manually instructed to drop the cache by echoing an integer value to the file.

To be safe, and to help the kernel determine the maximum amount of freeable memory, be sure to run a before running the  commands below:

Most of the time Btrfs users will probably want to to reclaim just the slab objects (dentries and btrfs_inodes):

To clear the entire disk cache (slab objects and the page cache) use instead:

More information on kernel slabs can be found in this dedoimedo blog entry.

Mounting Btrfs fails, returning mount: unknown filesystem type 'btrfs'
The original solution by Tim on Stack Exchange inspired the following solution: build the kernel manually instead of using genkernel:

Btrfs root doesn't boot
Genkernel's initramfs as created with the command below doesn't load btrfs:

Compile support for btrfs in the kernel rather than as a module, or use genkernel-next or Dracut to generate the initramfs.

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

 * Btrfs snapshots - Script that creates snapshots when files have changed
 * Btrfs/System Root Guide - Use the Btrfs filesystem as a collection of subvolumes including one as a system root.
 * Btrfs native system root guide - An alternative guide on using a subvolume in a Btrfs filesystem as the system's root.
 * ext4 - The default filesystem for most Linux distributions.
 * Samba shadow copies - Using Samba to expose Shadow Copies as 'Previous Versions' to Windows clients.
 * Snapper - A command-line program capable of managing Btrfs filesystem snapshots.
 * ZFS - A filesystem that shares much in common with Btrfs, but has licensing issues.

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

 * https://wiki.debian.org/Btrfs - As described by the Debian wiki.
 * https://wiki.archlinux.org/index.php/Btrfs Btrfs article - As described by the Arch Linux wiki.
 * http://www.funtoo.org/BTRFS_Fun - BTRFS Fun on the Funtoo wiki.
 * http://marc.merlins.org/perso/btrfs/post_2014-05-04_Fixing-Btrfs-Filesystem-Full-Problems.html - Tips and tricks on fixing niche Btrfs filesystem problems in some situations.