btrfs: как рассчитать экономию пространства при сжатии btrfs?

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

Я включил сжатие (монтировав с помощью compress=lzo) для моего раздела btrfs и использовал его некоторое время.

Мне интересно, сколько выгоды принесло сжатие, и меня интересует значение сэкономленного пространства (сумма всех размеров файлов) - (фактически используемое пространство).

Есть ли какой-либо простой способ получить это значение, или мне придется написать скрипт, который суммирует, например, вывод df и сопоставляет его с выводом btrfs filesystem df?

Сначала установите compsize
В Debian/Ubuntu:

apt install btrfs-compsize

В Fedora:

dnf install compsize

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

compsize /mnt/btrfs-partition

Пример вывода:

Обработано 123574 файлов, 1399139 обычных расширений (1399139 ссылок), 69614 встроенных.
Тип       Процент     Использование диска   Нерасжатый размер  
ВСЕГО       73%      211G         289G         289G       
none       100%      174G         174G         174G       
lzo         32%       37G         115G         115G

Требуется root (sudo) для работы
(в противном случае SEARCH_V2: Операция не разрешена).

Можно использовать в любом каталоге (суммируя поддерево),
а не только для всей файловой системы от точки монтирования.

На системе с zstd, но некоторые старые файлы все еще сжаты с помощью lzo,
будут строки для каждого из них. 
(Столбец Perc — это размер_диска / не сжатый_размер для этой строки,
а не то, сколько из общего объема сжато подобным образом. Чем меньше, тем лучше.)

Согласно вики btrfs, встроенной поддержки для этого нет, но инструмент compsize может измерять сжатие на btrfs.

Вывод df будет похож на btrfs fi df тем, что он будет сообщать, сколько дискового пространства используется, а не не сжатый размер. В вики говорится, что вы можете “в некотором роде угадать”, сравнив вывод df до и после сжатия файла. Другой вариант — использовать какую-либо программу, которая суммирует фактические данные, например rsync --stats в режиме “сухой прогона”, который сообщает, сколько данных было прочитано.

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

Как рассчитать экономию места сжатия в Btrfs

Btrfs (B-tree file system) — это современная файловая система, которая предлагает множество возможностей, среди которых сжатие данных. Если вы включили сжатие для вашего раздела Btrfs с помощью параметра compress=lzo, вам может быть интересно, сколько места вы смогли сэкономить благодаря этой функции.

Определение размера данных до и после сжатия

Чтобы оценить, сколько места сэкономлено с помощью сжатия, нам потребуется сформировать две основные величины:

  1. Суммарный размер всех файлов (размеры до сжатия).
  2. Фактическое использование дискового пространства (размеры после сжатия).

Обычно для этого можно воспользоваться различными инструментами и командами.

Использование инструмента compsize

Одним из наиболее простых и эффективных подходов является использование утилиты compsize. Это нужно сделать следующим образом:

  1. Установите compsize:

    • Для Debian/Ubuntu:
      sudo apt install btrfs-compsize
    • Для Fedora:
      sudo dnf install compsize
  2. Запустите compsize для вашей файловой системы:

    sudo compsize /mnt/btrfs-partition

    Не забудьте добавить флаг -x, если хотите избежать анализа других подтомов или файловых систем, чтобы избежать некорректных результатов.

Пример результатов работы compsize

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

Processed 123574 files, 1399139 regular extents (1399139 refs), 69614 inline.
Type       Perc     Disk Usage   Uncompressed Referenced  
TOTAL       73%      211G         289G         289G       
none       100%      174G         174G         174G       
lzo         32%       37G         115G         115G

В данном выводе:

  • TOTAL: Общая статистика по всем файлам.
  • lzo: Статистики по данным, сжимаемым с помощью LZO.

Вычисление экономии места

Используя данные из примера, вы можете легко рассчитать экономию следующей формулой:

[ \text{Экономия места} = \text{Суммарный размер файлов} – \text{Фактическое использование дискового пространства} ]

В нашем примере:

  • Суммарный размер файлов (Uncompressed) = 289G
  • Фактическое использование дискового пространства (Disk Usage) = 211G

Поэтому:
[ \text{Экономия места} = 289G – 211G = 78G ]

Альтернативные методы

Если по каким-либо причинам compsize вам не подходит, есть другие подходы:

  1. Использование btrfs fi df: Этот инструмент предоставит информацию о размере дискового пространства, однако он не отображает нежатый размер.
  2. Команды rsync: При выполнении rsync --stats с опцией "сухого запуска" можно получить информацию о собранных данных, что может помочь в сопоставлении.

Заключение

Сжатие в Btrfs может значительно уменьшить объем используемого пространства на диске, что особенно полезно для хранения больших объемов данных. Используя инструменты вроде compsize, вы можете легко и быстро оценить, сколько места вы сэкономили. Если вы хотите поддерживать свой Btrfs-раздел в оптимальном состоянии, регулярная проверка экономии места — это хорошая практика.

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

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