Лучший способ отобразить использование диска btrfs?

Вопрос или проблема

Я знаю про btrfs quota (нет, спасибо) и btrfs filesystem du -s (что, я думаю, довольно бесполезно – см. ниже).

Меня всегда беспокоило в btrfs то, что у меня нет хорошего способа увидеть использование диска btrfs с течением времени.

Пока я не увидел фантастическую визуализацию “Отчет об оценке хранения” Synology сегодня, которая не требует включения квоты.

Как был создан этот график?

Визуализация "Отчета об оценке хранения" Synology

Пользователь сначала выбирает начальную и конечную дату. Затем он начинает с первого снимка (упорядоченного по времени) и для каждого последующего снимка показывает, сколько дополнительного места требуется для его хранения (относительно первого снимка, который находится на уровне y=0).

Объяснение: Этот том является периодическим rsync другой файловой системы, и незадолго до снимка 4 февраля (сегодня – выделенный снимок) я переименовал большую папку в исходной файловой системе и синхронизировал ее с томом btrfs, поэтому исходные файлы были удалены, а новые были воссозданы с нуля. Итак, создание снимка 04.02.2025 использовало примерно 410 ГБ. Исправление: удалите снимок, восстановите предыдущий снимок, также переименуйте папку в томе btrfs, а затем снова синхронизируйте. Результат: практически нет использования диска новым снимком (не показано), потому что файлы на самом деле не изменились, только большая подкаталог был переименован.

Почему я думаю, что btrfs filesystem du -s бесполезен

Я был бы рад, если бы меня здесь опровергли.

Предположим, у меня есть файловая система с некоторыми большими файлами в ней. Я делаю два снимка A1 и A2. Затем я rm эти файлы и снова загружаю их, так что содержимое файлов точно такое же, но теперь они находятся на разных инодах (или чем-то еще), и поэтому btrfs не может сделать для них CoW. Я делаю два снимка B1 и B2. Так что теперь A1 и A2 идентичны, и B1 и B2 идентичны. И все 4 снимка содержат точно такие же файлы.

То, что я хочу знать, это то, что разница между A2 и B1 огромна, потому что все файлы были переписаны.

Но в этом сценарии btrfs filesystem du -s A1 A2 B1 B2 покажет точно такой же общий и ноль эксклюзивный, верно?

По-видимому можно сделать кое-что с btrfs send --no-data -p A2 B1, но я не понял, как использовать вывод, чтобы получить совокупный размер измененных файлов.

Резюме

Имея массив моментальных снимков на основе времени, как мне создать график, подобный приведенному выше?

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

Дополнительные баллы, если я также как-то могу увидеть различия между A2 и B1, чтобы увидеть, что изменилось, но я мог бы даже сделать это с помощью rsync как одноразовое мероприятие. Фактические различия вторичны.

btrfs send и btrfs recieve --dump являются ключевыми.

Это вычисляет разницу между двумя снимками:

$ sudo btrfs send -p \
    /btrfs/snapshots/@store.20250105T0000 \
    /btrfs/snapshots/@store.20250202T0000 --no-data -q | \
    btrfs receive --dump | grep len= | \
    sed 's/.*len=//' | perl -p -e '$sum += $_; $_="" ; END { print $sum }'

121126236218

Я написал https://github.com/pmorch/btrfs-snapshot-growth как (маленький) проект, который просто автоматизирует это на Python и форматирует вывод “красиво”.

Ответ или решение

Теория

Btrfs (B-tree File System) является одной из наиболее продвинутых файловых систем, поддерживающих такие функции, как снимки (snapshots), сжатие, и контроль избыточности. Для визуализации использования дискового пространства в таких сложных системах, как Btrfs, необходимо иметь инструменты, которые могли бы чётко и аккуратно представить динамику изменения данных на протяжении времени. Зачем это нужно? Многим компаниям и системным администраторам критически важно отслеживать, где и когда происходят значительные изменения данных, особенно в системах, где хранится жизненно важная информация.

Одна из возможностей Btrfs — функция создания снимков, которые обеспечивают точку восстановления для данных на определённый момент времени. Однако простого подсчёта объёма данных на диске недостаточно для понимания, как именно изменения во времени влияют на размер занимаемого пространства.

Пример

В вопросе был приведён интересный пример с именованием и удалением каталогов, который объясняет, как тактические операции на файловой системе, такие как переименование папок, могут влиять на потребление дискового пространства. В этом отношении создание визуализации, подобной "Storage Estimation Report" от Synology, демонстрирует временные зависимости изменения данных.

Особенно интересен подход к измерению изменений между двумя снимками с помощью btrfs send и btrfs receive --dump, которые позволяют подсчитать объём изменённых данных без выставления копирования самих данных. Это даёт понимание об объёмах и условиях изменения, стрессирующего вашу файловую систему.

Применение

Для создания информативной визуализации вам потребуется следующее:

  1. Создание и поддержание снимков: Регулярно создавайте снимки с помощью функций Btrfs. Это создаст временную шкалу, по которой можно будет отслеживать изменения.

  2. Использование btrfs send и btrfs receive --dump: Эти команды помогут вычислить объём изменений между двумя снимками. Использование следующего кода:

    sudo btrfs send -p /btrfs/snapshots/@store.20250105T0000 /btrfs/snapshots/@store.20250202T0000 --no-data -q | \
    btrfs receive --dump | grep len= | \
    sed 's/.*len=//' | perl -p -e '$sum += $_; $_="" ; END { print $sum }'

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

  3. Автоматизация с использованием инструментов на Python: Проект btrfs-snapshot-growth на GitHub автоматизирует этот процесс и помогает в форматировании вывода. С его помощью можно создавать удобные таблицы и графики, документирующие изменение данных.

  4. Интеграция данных: Собранную информацию можно интегрировать в системы мониторинга, где вас интересует не только текущее состояние, но и история перерасхода дискового пространства.

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

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

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

Капча загружается...