Вопрос или проблема
Я включил сжатие (монтировав с помощью 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
, вам может быть интересно, сколько места вы смогли сэкономить благодаря этой функции.
Определение размера данных до и после сжатия
Чтобы оценить, сколько места сэкономлено с помощью сжатия, нам потребуется сформировать две основные величины:
- Суммарный размер всех файлов (размеры до сжатия).
- Фактическое использование дискового пространства (размеры после сжатия).
Обычно для этого можно воспользоваться различными инструментами и командами.
Использование инструмента compsize
Одним из наиболее простых и эффективных подходов является использование утилиты compsize
. Это нужно сделать следующим образом:
-
Установите
compsize
:- Для Debian/Ubuntu:
sudo apt install btrfs-compsize
- Для Fedora:
sudo dnf install compsize
- Для Debian/Ubuntu:
-
Запустите
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
вам не подходит, есть другие подходы:
- Использование
btrfs fi df
: Этот инструмент предоставит информацию о размере дискового пространства, однако он не отображает нежатый размер. - Команды
rsync
: При выполненииrsync --stats
с опцией "сухого запуска" можно получить информацию о собранных данных, что может помочь в сопоставлении.
Заключение
Сжатие в Btrfs может значительно уменьшить объем используемого пространства на диске, что особенно полезно для хранения больших объемов данных. Используя инструменты вроде compsize
, вы можете легко и быстро оценить, сколько места вы сэкономили. Если вы хотите поддерживать свой Btrfs-раздел в оптимальном состоянии, регулярная проверка экономии места — это хорошая практика.