Обслуживание btrfs

Действия по обслуживанию Btrfs.

Содержание

1 Проверка целостности

  • Следующая команда считывает все блоки данных и метаданных со всех устройств и проверяет контрольные суммы:
    btrfs scrub start -Bd <путь>
    
  • Автоматически восстанавливает поврежденные блоки, если есть правильная копия.
  • Не является средством проверки файловой системы (fsck) и не проверяет и не устраняет структурные повреждения в файловой системе.
  • Пользователь должен запускать его вручную или через периодическую системную службу. Рекомендуемый период составляет месяц, но может быть и меньше.

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

  • При первой записи Btrfs записывает данные последовательно.
  • Механизм COW (Copy-On-Write) подразумевает, что любая последующая модификация файла не должна быть написана поверх старых данных, и соответственно, она помещается в свободный блок.
  • Данное обстоятельство вызывает повышенную фрагментацию файловой системы.
  • В Btrfs для борьбы с фрагментацией существует несколько методов:
    • дефрагментация с помощью команды
      btrfs filesystem defragment <путь>
      
    • опция монтирования -o nodatacow, которая отключает COW для данных.
      • Можно применять к отдельному файлу либо к подтому/директории, в том числе рекурсивно.
      • Атрибут nocow можно также выставить новому или пустому файлу.
      • Он отключает механизм copy on write, благодаря чему Btrfs при обновлении содержимого файла будет всегда работать с фиксированной дисковой областью, записывая данные поверх существующих (на физическом уровне).
      • Включение атрибута nocow отключает проверку контрольной суммы файлов.
    • опция монтирования -o autodefrag.
      • Обнаруживает небольшие случайные записи в файлы и ставит их в очередь для автоматического дефрагментации, поэтому файловая система будет дефрагментировать себя, пока она используется.
      • Не подходит для виртуализации или высоконагруженных баз данных, но хорошо работает для небольших файлов.
  • Оценить фрагментированность файлов можно при помощи утилиты filefrag.

3 Trim

  • Btrfs может передавать SSD информацию о том, какие блоки данных больше не используются (удалённые файлы и т.д.).
  • Это позволяет избежать постепенного снижения производительности SSD.
  • Операция fstrim предназначена для таких целей. Для большинства современных SSD она доступна.
  • Btrfs автоматически определяет при монтировании твердотельные накопители.
  • Для работы fstrim необходим ручной запуск или установка опции монтирования -o discard, которая будет запускать fstrim после каждого удаления файла.

4 Балансировка

  • Основной целью функции balance является распределение групп блоков по всем устройствам.
  • Работает только на смонтированной файловой системе.
  • Btrfs использует двуступенчатый распределитель:
    • на первом этапе выделяются большие области пространства, известные как чанки (chunks) для определенных типов данных;
    • на втором этапе выделяются блоки (blocks).
  • Существует три типа чанков:
    • Data chunks хранят обычные данные файла.
    • Metadata Chunks хранят метаданные о файлах, включая, метки времени, контрольные суммы, имена файлов, владельца, разрешения и расширенные атрибуты.
    • System Chunks это особый тип чанков, которые хранят данные о том, где находятся все остальные чанки.
  • Только тот тип данных, для которого выделен блок, может быть сохранен в этом блоке.
  • Ошибка ENOSPC в Btrfs. Файловая система исчерпала пространство для данных или метаданных в существующих чанках и не может выделить новый чанк.
    • Запустите btrfs fi df <путь> в файловой системе, которая вызвала ошибку.
    • Если в строке “Данные” или “Метаданные” отображается значение “Итого”, которое значительно отличается от значения “Используется”, то это, вероятно, является причиной.
  • Команда btrfs balance отправляет данные обратно через распределитель (allocator), что приводит к более компактному использованию чанков.
  • Если запустить btrfs fi df <путь> после запуска баланса, значения Total и Used станут намного ближе друг к другу, так как баланс удаляет фрагменты, которые больше не нужны.

5 Скрипт btrfsmaintenance

5.1 Общая информация

  • Выполняемые действия:
    • периодическая проверка целостности;
    • периодическая балансировка;
    • периодический trim для SSD;
    • периодическая дефрагментация.
  • Репозиторий: https://github.com/kdave/btrfsmaintenance

5.2 Установка

  • Gentoo Linux
    emerge sys-fs/btrfsmaintenance
    

5.3 Запуск

  • Следует выбрать один из вариантов.
  • Обновление таймеров через systemd (при каждой загрузке системы):
    systemctl enable --now btrfsmaintenance-refresh.path
    
  • Ручное обновление таймеров через systemd:
    /usr/share/btrfsmaintenance/btrfsmaintenance-refresh-cron.sh systemd-timer
    
  • Ручное обновление таблиц через crond (без systemd):
    /usr/share/btrfsmaintenance/btrfsmaintenance-refresh-cron.sh
    

5.4 Удаление

  • Данные действия выполняют обычно менеджеры пакетов.
  • Для удаления всех таймеров запустите:
    /usr/share/btrfsmaintenance/btrfsmaintenance-refresh-cron.sh uninstall
    

5.5 Фалы конфигурации

  • В зависимости от дистрибутива конфигурация может находиться в следующих файлах:
    • /etc/sysconfig/btrfsmaintenance: RedHat, SUSE и производные;
    • /etc/default/btrfsmaintenance: Debian и производные, Gentoo.
  • В качестве шаблона для этих файлов используется sysconfig.btrfsmaintenance.

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры прикладной информатики и теории вероятностей

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие