Обслуживание btrfs
Действия по обслуживанию Btrfs.
Содержание
1 Проверка целостности
- Следующая команда считывает все блоки данных и метаданных со всех устройств и проверяет контрольные суммы:
1btrfs scrub start -Bd <путь>
- Автоматически восстанавливает поврежденные блоки, если есть правильная копия.
- Не является средством проверки файловой системы (fsck) и не проверяет и не устраняет структурные повреждения в файловой системе.
- Пользователь должен запускать его вручную или через периодическую системную службу. Рекомендуемый период составляет месяц, но может быть и меньше.
2 Дефрагментация
- При первой записи Btrfs записывает данные последовательно.
- Механизм COW (Copy-On-Write) подразумевает, что любая последующая модификация файла не должна быть написана поверх старых данных, и соответственно, она помещается в свободный блок.
- Данное обстоятельство вызывает повышенную фрагментацию файловой системы.
- В Btrfs для борьбы с фрагментацией существует несколько методов:
- дефрагментация с помощью команды
1btrfs 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
1emerge sys-fs/btrfsmaintenance
5.3 Запуск
- Следует выбрать один из вариантов.
- Обновление таймеров через systemd (при каждой загрузке системы):
1systemctl enable --now btrfsmaintenance-refresh.path
- Ручное обновление таймеров через systemd:
1/usr/share/btrfsmaintenance/btrfsmaintenance-refresh-cron.sh systemd-timer
- Ручное обновление таблиц через crond (без systemd):
1/usr/share/btrfsmaintenance/btrfsmaintenance-refresh-cron.sh
5.4 Удаление
- Данные действия выполняют обычно менеджеры пакетов.
- Для удаления всех таймеров запустите:
1/usr/share/btrfsmaintenance/btrfsmaintenance-refresh-cron.sh uninstall
5.5 Фалы конфигурации
- В зависимости от дистрибутива конфигурация может находиться в следующих файлах:
/etc/sysconfig/btrfsmaintenance
: RedHat, SUSE и производные;/etc/default/btrfsmaintenance
: Debian и производные, Gentoo.
- В качестве шаблона для этих файлов используется
sysconfig.btrfsmaintenance
.