Меню Рубрики

Файловая система btrfs linux

Файловая система btrfs linux

В начале XXI века современной файловой системе уже недостаточно всего лишь быстро работать с файлами и защищать их от повреждений. ZFS показала нам всю мощь технологии Copy-on-Write (CoW, копирование-при-записи) в задачах сохранения данных. Для Linux была создана Btrfs — новая стандартная ФС, построенная на технологии CoW.

Судя по тому, что Apple активно доделывает свою APFS, которая также использует CoW, набор возможностей ZFS/Btrfs действительно даёт новый уровень комфорта для пользователя. Чтобы ощутить его, достаточно попробовать Btrfs самим.

Немного теории для понимания.

Вы создаёте файл, внутри которого — строчка «Девочка Таня у клетки ходила». Сохраняете его на обычную ФС, например, на Ext4 или NTFS. Теперь, если вы откроете файл и добавите в него вторую строчку «Снова не надо кормить крокодила», файловая система при сохранении полностью перезапишет прежнюю версию файла. То есть, той версии файла, где в нём только одна строка, больше не существует.

Теперь проделаем то же самое на Btrfs. Создание файла с одной строкой проходит так же, но когда вы добавляете в файл вторую строку и сохраняете, проявляется то самое копирование-при-записи. Прежняя версия файла не перезаписывается, он остаётся нетронутой, а строка «Снова не надо кормить крокодила» дописывается в свободное место ФС.

Когда вы хотите прочитать этот файл, вы видите только последнюю версию, но с помощью утилиты btrfs можно вернуть его к прежним состояниям. Таким образом Btrfs может сохранять историю изменений каждого файла — надобность в журналировании отпадает, Btrfs просто периодически запоминает состояние ФС, и при малейшей ошибке откатывается к прежней версии.

Использование Btrfs в Ubuntu.

Установщик Ubuntu давно поддерживает Btrfs, так что никаких проблем с этим нет:

Btrfs оперирует томами или subvolumes — это как бы разделы внутри файловой системы. «Как бы» — потому что тома больше похожи на каталоги, чем на разделы. Но такой особый каталог можно монтировать как раздел. Установщик Ubuntu создаёт отдельные тома для системы и для домашнего каталога:

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

Что можно делать с томами Btrfs.

Экономия места на накопителе.

Для любого тома можно включить прозрачное сжатие по одному из двух алгоритмов: zlib и lzo. Первый лучше сжимает, зато второй на порядок быстрее работает. Для системы обычно используют lzo, а zlib имеет смысл на больших объёмах, которые редко читаются. Включается сжатие опцией монтирования compress=lzo в файле /etc/fstab:

После перезагрузки сжатие будет активировано. Обратите внимание, как монтируется том в указанный каталог — через опцию subvol=нужный_том.

Страховка от неудачных обновлений.

Перед каждым апдейтом системы я делаю снапшот системного тома. Вот так это может выглядеть в Ubuntu:

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

Представьте, что после обновления ваша система работает с ошибками или вообще не загружается. Тогда вам нужно будет просто указать в /etc/fstab последний снапшот в качестве системного тома через опцию subvol=нужный_том. Это можно сделать с помощью LiveCD.

Одна ФС на сколько угодно накопителей.

Для виртуальной машины с Ubuntu я создал 1 виртуальный накопитель. Представим, что на нём закончилось место. В таком случае я могу добавить ещё один виртуальный накопитель в настройках Virtualbox, а потом добавить его и к Btrfs:

Как видите, Btrfs автоматически применила модель RAID1 — отзеркалировала данные на добавленный накопитель, но уровни RAID можно менять. То же самое можно делать и на реальной машине — добавлять и удалять накопители без необходимости переразбивать их и форматировать заново.

Использование Btrfs на SSD.

Как было сказано в прошлой статье, технология CoW приводит к высокой фрагментации файлов — все изменения в них записываются кусочками в разные места ФС. Именно поэтому Btrfs (а также ZFS) рекомендуется использовать на SSD, на которых фрагментация совершенно не ощущается.

Btrfs — достаточно современная и продвинутая файловая система, она поддерживает SSD, что называется, «из коробки». В журнале ядра можно увидеть такие строки:

По последней строчке видно, что Btrfs сама определила, что находится на SSD, и автоматически включила режим поддержки твердотельных накопителей. Этот режим также можно включить одноимённой опцией монтирования. Благодаря этому режиму Btrfs показывает высокую скорость на многопоточных операциях.

Но следует иметь в виду, что SSD-режим не включает в себя поддержку TRIM! Поэтому его нужно либо включать опцией монтирования discard, либо же регулярно запускать программу fstrim. В Ubuntu есть отдельный юнит systemd для периодической отработки этой программы, активировать его можно такой командой:

Предотвращение деградации скорости.

У Btrfs есть одна неприятная архитектурная особенность: она упаковывает мелкие файлы прямо в дерево метаданных. Дерево метаданных это что-то вроде содержания в книге или поисковой системы в Интернете — в общем, очень важная вещь.

По умолчанию в дерево сохраняются файлы размером до 4 Кб, и вот здесь таится опасность. Из-за того, что размер файла заранее неизвестен, а диапазон размеров широк, дерево метаданных Btrfs сильно разрастается, что негативно отражается на скорости работы ФС.

Чтобы избежать этого, можно сильно ограничить максимальный размер файла, который будет упакован в дерево. Делается это опцией монтирования max_inline с указанием размера файла в байтах — конечно, в файле /etc/fstab:

Теперь в дерево будут сохраняться только файлы размером до 256 байтов. Можно вообще отключить упаковку, указав 0 после знака «равно».

Кстати, нелишним будет отключить обновление временных меток при каждом обращении к файлу. Это делается опцией noatime. Это немного прибавляет скорости работы ФС, а на SSD ещё имеет смысл и потому, что сокращает количество записей на него.

Отключение CoW для томов и файлов.

Одно из выгодных отличий Btrfs от ZFS — возможность полностью отключить Copy-on-Write. Это может быть нелишним на HDD, чтобы снизить фрагментацию и повысить скорость. Но даже на SSD большие файлы, которые часто перезаписываются, могут из-за CoW замедлять работу всей файловой системы. К таким файлам можно отнести образы виртуальных машин и базы данных.

Отключить CoW можно на уровне тома, с помощью опции монтирования nodatacow:

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

Казалось бы, ключ «+C» должен, по логике, включать CoW, но нет, всё наоборот. Чтобы включить CoW, нужно применить ту же команду, но уже с ключом «-C».

Анализ состояния Btrfs.

Часто люди не понимают, как правильно узнавать количество свободного и занятого места на Btrfs. Дело в том, что из-за снапшотов и сжатия обычные утилиты «сходят с ума» и показывают неправильные данные. Поэтому нужно использовать утилиту btrfs:

Её вывод тоже не очень понятен, так что разберём по строкам.

В первой строке пишутся совокупные объёмы выделенного и занятого места. Слово «single» означает, что Btrfs используется на одиночном накопителе. «Total» показывает, сколько места доступно, причём оно может быть намного меньше общего количества места на накопителе. Паниковать не стоит, просто Btrfs выделяет место порциями. Закончится одна порция — будет выделена ещё одна. Ну, а «used» показывает, сколько места на файловой системе реально занято.

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

Третья строка интереснее — в ней можно увидеть, сколько занимает то самое дерево метаданных. На скриншоте видно, что под дерево выделено 2 Гб, из которых заняты около 600 Мб. Эти показатели учитываются в первой строке.

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

Таким образом, чтобы узнать, сколько места реально занято на Btrfs, нужно смотреть на показатель «used» в первой строчке вывода команды:

Источник

Файловая система Btrfs

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

Одной из таких файловых систем является Btrfs. Это относительно новая файловая система, которая появилась в 2007 году и была разработана компанией Oracle. Она предлагает очень широкий набор новых возможностей и поэтому сильно интересует пользователей, но до сих пор в сети ходят слухи, что эта файловая система еще не пригодна для постоянного использования. В этой статье мы попытаемся разобраться какие возможности нам дает Btrfs, а также действительно ли ее уже можно использовать.

Что такое Btrfs?

Как я уже сказал, Btrfs была разработана компанией Oracle в 2007 году. Одной расшифровки названия нет, одни говорят, что это значит B-tree FS, другие Better Fs. Также как и в других файловых системах, все данные хранятся на диске по определенным адресам. Эти адреса сохранены в метаданных. И тут уже начинаются различия. Все метаданные организованны в виде b-деревьев. Это дает большую производительность при работе с файловой системой, а также позволяет добавлять неограниченное количество файлов.

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

Из-за своей структуры Btrfs имеет огромные возможности, например, она может работать с современными очень большими носителями данных. Максимальный размер файловой системы составляет 16 Экзабайт. Это все возможно благодаря правильному использованию пространства на диске. Другие файловые системы используют жесткий диск целиком, от начала до конца для записи своей структуры.

Btrfs поступает по-другому. Каждый диск, независимо от его размера делится на блоки по 1 Гб для данных и 256 Мб для метаданных. Затем эти блоки собираются в группы, каждая из которых может храниться на разных устройствах, количество таких блоков в группе может зависеть от уровня RAID для группы. Менеджер томов уже интегрирован в файловую систему, поэтому больше никакое дополнительное ПО использовать не нужно.

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

  • Поддержка снимков файловой системы, только для чтения или для записи;
  • Контрольные суммы для данных и метаданных с помощью алгоритма crc32. Таким образом, можно очень быстро определить любые повреждения блока;
  • Сжатие с помощью Zlib и Lzo;
  • Оптимизация для работы с SSD, файловая система автоматически определяет ssd и начинает вести себя по-другому;
  • Фоновый процесс для обнаружения и исправления ошибок, а также дефрагментации и дедупликации в реальном времени;
  • Поддерживается преобразование из ext4 и ext3 и обратно.

Все это очень хорошо, но можно ли уже использовать эту файловую систему? Попробуем разобраться и с этим.

Готова ли Btrfs к использованию?

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

Самая важная часть файловой системы — это ее формат хранения на диске. Но формат файловой системы Btrfs уже зафиксирован, это случилось еще в 2012 году и он больше не изменяется без крайней необходимости. Это само по себе достаточно, чтобы признать стабильность btrfs.

Но почему же Btrfs считается многими нестабильной? Этому есть несколько причин. Во-первых, это боязнь пользователей к новым технологиям. Это было не только в Linux, но и в Microsoft, при их переходе на NTFS, и в Apple. Но здесь есть некоторый парадокс, файловая система XFS прошла 20 лет стабильного развития, но самой стабильной файловой системой считается ext4, которая была разработана из форка ext3 в 2006 году. Фактически она на год старше Btrfs.

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

Но уже есть много подтверждений, что файловая система готова. Эта файловая система используется на серверах Facebook, где компания хранит свои важные данные. А это уже само по себе важный фактор. Над улучшением файловой системы работают такие компании как Facebook, SuSE, RedHat, Oracle, Intel и другие. Эта файловая система используется в SUSE Linux Enterprise по умолчанию, начиная с выпуска 12. Все эти факторы вместе доказывают, что файловая система вполне готова к использованию. А учитывая функциональность и особенности btrfs ее уже можно использовать.

Использования Btrfs

Почему стоит использовать Btrfs и стоит ли вообще, разобрались. Теперь хотелось бы показать немного практики, чтобы вы могли оценить эту файловую систему в действии. Я буду приводить примеры на основе Ubuntu. Сначала установим инструменты для управления файловой системой:

sudo apt install btrfs-tools

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

Сначала нужно создать файловую систему. Допустим, у нас есть два жестких диска /dev/sdb и /dev/sdc, мы хотим создать на них единую файловую систему с зеркалированием данных. Для этого достаточно выполнить:

sudo mkfs.btrfs /dev/sdb /dev/sdc

По умолчанию будет использоваться RAID0 для данных (без дублирования, и RAID1 для метаданных (дублирование на один диск). При использовании одного диска метаданные тоже дублируются, если вы хотите отключить это поведение можно использовать опцию -m single:

sudo mkfs.btrfs -m single /dev/sdb

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

Посмотреть информацию о только что созданной файловой системе вы можете командой:

sudo btrfs filesystem show /dev/sdb

Или обо всех подключенных файловых систем:

sudo btrfs filesystem show

Монтирование btrfs

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

sudo mount /dev/sdb /mnt

Вы можете монтировать любой из дисков, это приведет к одинаковому эффекту. Строчка в /etc/fstab будет выглядеть так:

/dev/sdb /mnt btrfs defaults 0 1

Теперь смотрим информацию о занимаемом месте на дисках:

sudo btrfs filesystem df /mnt

Сжатие в btrfs

Для включения сжатия достаточно добавить опцию compress при монтировании. Ей можно передать алгоритм lzo или zlib:

sudo mount -o compress=lzo /dev/sdb /mnt
$ sudo mount -o compress=zlib /dev/sdb /mnt

Восстановление Btrfs

Для восстановления поврежденной Btrfs используйте опцию монтирования recovery:

sudo mount -o recovery /dev/sdb /mnt

Изменение размера

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

sudo btrfs filesystem resize -2g /mnt

Уменьшит размер на 2 гигабайта. Затем увеличим на 1 Гигабайт:

sudo btrfs filesystem resize +1g /mnt

Создание подтомов

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

sudo btrfs subvolume create /mnt/sv1
$ sudo btrfs subvolume create /mnt/sv2
$ sudo btrfs subvolume list /mnt

Монтирование подтомов

Вы можете примонтировать подтом по id, полученному с помощью последней команды:

sudo umount /dev/sdb

sudo mount -o subvolid=258 /dev/sdb /mnt

Или вы можете использовать имя:

sudo mount -o subvol=sv1 /dev/sdb /mnt

Удаление подтомов

Сначала подключите корень btrfs вместо подтома:

sudo mount /dev/sdb /mnt/

Чтобы удалить подтом можно использовать путь монтирования, например:

sudo btrfs subvolume delete /mnt/sv1/

Создание мгновенных снимков

Файловая система Btrfs позволяет создавать мгновенные снимки изменений. Для этого используется команда snapshot. Например, создадим файл, затем сделаем снимок:

touch /mnt/sv1/test1 /mnt/sv1/test2

sudo btrfs subvolume snapshot /mnt/sv1 /mnt/sv1_snapshot

Дефрагментация btrfs

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

sudo btrfs filesystem defrag /mnt

Выводы

Как видите, файловая система btrfs очень интересная и перспективная. К тому же она уже полностью готова к использованию и достаточно стабильна. А вы уже пользуетесь Btrfs? Собираетесь пользоваться после прочтения статьи? Напишите в комментариях внизу!

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Файл сервер linux с контролем доступа
  • Файл с пользователями linux
  • Файл менеджер для linux
  • Файл hosts в linux
  • Уязвимости операционной системы linux