Btrfs/Настройка: различия между версиями

Материал из DZWIKI
Перейти к навигации Перейти к поиску
 
Строка 139: Строка 139:
=== Просмотр типов и коэффициентов сжатия ===
=== Просмотр типов и коэффициентов сжатия ===
'''[https://archlinux.org/packages/?name=compsize compsize]''' берёт список файлов (или всю файловую систему Btrfs) и смотрит используемые типы сжатия и эффективные коэффициенты сжатия. Размер без сжатия может не совпадать с числом, выдаваемым другими программами, такими как [https://man.archlinux.org/man/du.1 du(1)], потому что каждый экстент считается один раз, даже если на него есть несколько ссылок и даже если часть его больше нигде не используется, но ещё не была убрана при сборке мусора. Опция <code>-x</code> ограничивает анализ одной файловой системой, что полезно в ситуациях типа <code>compsize -x /</code>, чтобы предотвратить попытки программы просканировать не-Btrfs подкаталоги.
'''[https://archlinux.org/packages/?name=compsize compsize]''' берёт список файлов (или всю файловую систему Btrfs) и смотрит используемые типы сжатия и эффективные коэффициенты сжатия. Размер без сжатия может не совпадать с числом, выдаваемым другими программами, такими как [https://man.archlinux.org/man/du.1 du(1)], потому что каждый экстент считается один раз, даже если на него есть несколько ссылок и даже если часть его больше нигде не используется, но ещё не была убрана при сборке мусора. Опция <code>-x</code> ограничивает анализ одной файловой системой, что полезно в ситуациях типа <code>compsize -x /</code>, чтобы предотвратить попытки программы просканировать не-Btrfs подкаталоги.
== Подтома ==
{{main|Btrfs/Подтома}}


== Примечания ==
== Примечания ==

Текущая версия от 23:42, 6 января 2024

На этой странице мы рассмотрим настройку файловой системы.

Копирование при записи (CoW)

По умолчанию Btrfs постоянно использует копирование при записи (copy-on-write) для всех файлов. Когда выполняется операция записи, новые данные не записываются поверх старых; вместо этого изменённая копия блока записывается в новое место и в метаданные записывается адрес нового блока. Подробности реализации, а также преимущества и недостатки описаны в Btrfs Sysadmin Guide.

Отключение CoW

Чтобы отключить копирование при записи для создаваемых файлов в примонтированном подтоме, используйте опцию монтирования nodatacow. Это повлияет только на новые файлы. Для существующих файлов копирование при записи всё равно будет происходить. Опция nodatacow также отключает сжатие.[1]

Чтобы отключить копирование при записи для отдельных файлов/каталогов, выполните:

chattr +C /каталог/файл

Это отключит копирование при записи для операций над файлами, на которые есть только одна ссылка. Если ссылок на файл больше одной, например, из-за клонирования файлов или облегчённых клонов или снимков файловой системы, копирование при записи всё равно будет происходить. Начиная с coreutils 9.0, cp пытается создавать облегчённые копии по умолчанию — смотрите cp(1) для более подробной информации.

Влияние на снимки

Если для файла отключено копирование при записи (NOCOW) и сделан снимок, то первая запись в блок файла после создания снимка будет COW-операцией, поскольку снимок блокирует старые блоки файла на своих местах. Однако файл сохранит атрибут NOCOW, и все последующие записи будут выполняться в одни и те же блоки файла до момента создания следующего снимка.

Частые снимки могут снизить эффективность NOCOW, так как при первой записи всё равно требуется COW. Чтобы полностью избежать COW-операций для таких файлов, поместите их в отдельный подтом и не создавайте снимки этого подтома.

Сжатие

Btrfs поддерживает прозрачное и автоматическое сжатие. Это уменьшает размер файлов, а также значительно увеличивает срок службы флеш-носителей благодаря уменьшению вызываемого записью износа.[2][3][4] Это также может улучшить производительность[5] в одних случаях (например, однопоточные задачи с интенсивным файловым вводом-выводом), но в то же время ухудшить производительность в других случаях (например, многопоточные задачи и/или задачи с нагрузкой на процессор и большим файловым вводом-выводом). Более высокая производительность обычно достигается при использовании самых быстрых алгоритмов сжатия, zstd и lzo, и некоторые бенчмарки[6] предоставляют подробные сравнения.

LZO имеет фиксированный уровень сжатия, в то время как zlib и zstd имеют диапазон уровней сжатия от 1 (слабое сжатие) до 9 (zlib) или 15 (zstd); смотрите btrfs(5) § COMPRESSION. Изменение уровней по-разному влияет нагрузку процессора и пропускную способность ввода-вывода, поэтому стоит проверять производительность до и после изменения.

Опция монтирования compress=алгоритм[:уровень] позволяет включить сжатие, где алгоритм — это либо zlib, lzo, zstd, либо no (без сжатия). При использовании этой опции Btrfs будет проверять, помогает ли сжатие первой порции данных в файле сэкономить место. Если да, то весь файл будет сжат; если нет, то сжатие использоваться не будет. Таким образом, если размер первой порции записи не уменьшится при сжатии, то весь файл не будет сжат, даже если остальные порции сжимаются хорошо[7]. Это сделано для того, чтобы не заставлять диск ждать начала записи, пока все записываемые данные не будут полностью переданы Btrfs и сжаты.

Также можно использовать другую опцию монтирования compress-force=алгоритм[:уровень], которая заставляет Btrfs пропустить проверку сжимаемости первой порции данных и включает автоматическую попытку сжатия для каждого файла. В худшем случае это может привести к (незначительному) бесполезному увеличению загрузки процессора. Однако эмпирическое тестирование на нескольких системах смешанного использования показало значительное улучшение примерно на 10% сжатия диска при использовании compress-force=zstd по сравнению с просто compress=zstd, который также имел 10% сжатие диска. Однако имейте в виду, что принудительное сжатие не рекомендуется официальной документацией Btrfs[7].

Будут сжиматься только файлы, созданные или изменённые после добавления опции монтирования.

Чтобы применить сжатие к существующим файлам, используйте команду btrfs filesystem defragment -cалгоритм, где алгоритм — это zlib, lzo или zstd. Например, чтобы сжать всю файловую систему с помощью zstd, выполните следующую команду:

btrfs filesystem defragment -r -v -czstd /

Просмотр типов и коэффициентов сжатия

compsize берёт список файлов (или всю файловую систему Btrfs) и смотрит используемые типы сжатия и эффективные коэффициенты сжатия. Размер без сжатия может не совпадать с числом, выдаваемым другими программами, такими как du(1), потому что каждый экстент считается один раз, даже если на него есть несколько ссылок и даже если часть его больше нигде не используется, но ещё не была убрана при сборке мусора. Опция -x ограничивает анализ одной файловой системой, что полезно в ситуациях типа compsize -x /, чтобы предотвратить попытки программы просканировать не-Btrfs подкаталоги.

Подтома

Примечания

  1. btrfs(5) — Arch manual pages (англ.). Arch manual pages (14 декабря 2023). Дата обращения: 6 января 2024. Архивировано 28 декабря 2023 года.
  2. Fedora:Changes/BtrfsByDefault#Compression (англ.) (3 февраля 2021). Дата обращения: 7 января 2024. Архивировано 22 декабря 2023 года.
  3. Btrfs by default, the compression option - devel - Fedora Mailing-Lists (англ.) (8 июля 2020). Дата обращения: 7 января 2024. Архивировано 24 марта 2023 года.
  4. Issue #36: Write amplification [meta] - project - Pagure.io (англ.) (13 ноября 2020). Дата обращения: 7 января 2024. Архивировано 26 декабря 2023 года.
  5. Using Disk Compression With Btrfs To Enhance Performance - Phoronix (англ.) (28 августа 2010). Дата обращения: 7 января 2024. Архивировано 28 января 2023 года.
  6. Btrfs Zstd Compression Benchmarks On Linux 4.14 - Phoronix (англ.) (13 ноября 2017). Дата обращения: 7 января 2024. Архивировано 8 июля 2023 года.
  7. 7,0 7,1 Compression: Incompressible data (англ.). Дата обращения: 7 января 2024. Архивировано 1 января 2024 года.

Ссылки и источники