Недавно я создал том ZFS, чтобы проверить его возможности сжатия. Сравниваю бок о бок с томом ext4. После создания нового тома и включения сжатия с sudo zfs set compression=gzip postgres-zfs
Я скопировал файл размером ~ 3 ГБ с тома ext4 в файл ZFS, но файл такого же точного размера на диске ZFS (я использовал ls -alh
чтобы увидеть это). Я сжал файл вручную, чтобы увидеть, каким должно быть сжатие (я понимаю, что есть разные уровни, но просто чтобы получить приблизительную оценку), и просто использовал gzip file
размер файла уменьшился вдвое. Мои настройки ZFS также показывают, что сжатие включено:
# zfs get all
NAME PROPERTY VALUE SOURCE
postgres-zfs type filesystem -
postgres-zfs creation Thu Apr 5 17:17 2018 -
postgres-zfs used 1.54G -
postgres-zfs available 143G -
postgres-zfs referenced 1.54G -
postgres-zfs compressratio 1.34x -
postgres-zfs mounted yes -
postgres-zfs quota none default
postgres-zfs reservation none default
postgres-zfs recordsize 128K default
postgres-zfs mountpoint /postgres-zfs default
postgres-zfs sharenfs off default
postgres-zfs checksum on default
postgres-zfs compression gzip local
postgres-zfs atime on default
postgres-zfs devices on default
postgres-zfs exec on default
postgres-zfs setuid on default
postgres-zfs readonly off default
postgres-zfs zoned off default
postgres-zfs snapdir hidden default
postgres-zfs aclinherit restricted default
postgres-zfs canmount on default
postgres-zfs xattr on default
postgres-zfs copies 1 default
postgres-zfs version 5 -
postgres-zfs utf8only off -
postgres-zfs normalization none -
postgres-zfs casesensitivity sensitive -
postgres-zfs vscan off default
postgres-zfs nbmand off default
postgres-zfs sharesmb off default
postgres-zfs refquota none default
postgres-zfs refreservation none default
postgres-zfs primarycache all default
postgres-zfs secondarycache all default
postgres-zfs usedbysnapshots 0 -
postgres-zfs usedbydataset 1.54G -
postgres-zfs usedbychildren 132K -
postgres-zfs usedbyrefreservation 0 -
postgres-zfs logbias latency default
postgres-zfs dedup off default
postgres-zfs mlslabel none default
postgres-zfs sync standard default
postgres-zfs refcompressratio 1.34x -
postgres-zfs written 1.54G -
postgres-zfs logicalused 2.07G -
postgres-zfs logicalreferenced 2.07G -
postgres-zfs filesystem_limit none default
postgres-zfs snapshot_limit none default
postgres-zfs filesystem_count none default
postgres-zfs snapshot_count none default
postgres-zfs snapdev hidden default
postgres-zfs acltype off default
postgres-zfs context none default
postgres-zfs fscontext none default
postgres-zfs defcontext none default
postgres-zfs rootcontext none default
postgres-zfs relatime on temporary
postgres-zfs redundant_metadata all default
postgres-zfs overlay off default
Есть идеи, почему эти данные не хранятся в сжатом виде?
Данные сжимаются, только сама ОС не может распознать сжатие с помощью обычных команд, так как файлы прозрачно распаковываются при доступе к ним.
В этом списке настроек ZFS вы видите запись под названием compressratio
, который в вашем случае читается как x1.34. Это показывает, насколько эффективно были сжаты файлы (в среднем):
сжатый размер * сжатие знак равно несжатый размер
Вы также можете увидеть используемый и логично, которые отображают абсолютный сжатый размер и абсолютный несжатый размер всего пула (хотя логическое использование, похоже, не совпадает с указанным размером файла тестового файла).
Вы можете найти дополнительную информацию об этих ценностях Вот
Я также составил короткий список, содержащий все команды и то, что они выводят:
ls
: Показывает несжатый размер файлов, но сжатый размер папок.zfs get used <pool>
: Показывает сжатое пространство всех файлов в пуле.zfs get logicalused <pool>
: Показывает несжатое пространство, которое будут использовать все файлы в пуле.zfs get compressratio <pool>
: Показывает среднюю степень сжатия пула.du -h --apparent-size
: Показывает несжатый размер указанных файлов / папок.du -h
: Показывает сжатый размер данных файлов / папок.