TAR + Zstandard (zstd) — Compression
If you like this project, consider supporting me on Buy Me a Coffee ☕️
tags:
- files
- archives
- linux
-
sysadmin
Description
Zstandard (zstd) is a modern, high-performance compression algorithm developed by Facebook (Meta). When combined with tar, it provides an excellent balance of compression speed and ratio, significantly outperforming traditional tools like gzip and bzip2. Zstd supports adjustable compression levels (1–19), multi-threaded compression, and streaming operations.
Что это: Zstandard (zstd) — современный высокопроизводительный алгоритм сжатия, разработанный Facebook (Meta). В сочетании с tar обеспечивает отличный баланс скорости и степени сжатия, значительно превосходя традиционные инструменты вроде gzip и bzip2. Поддерживает настраиваемые уровни сжатия (1–19), многопоточность и потоковые операции.
Common use cases / Типичные случаи использования:
- High-speed backups of large datasets / Высокоскоростное резервное копирование больших данных
- Container and VM image compression / Сжатие образов контейнеров и ВМ
- Log archival with minimal CPU overhead / Архивирование логов с минимальной нагрузкой на CPU
- CI/CD artifact compression / Сжатие артефактов CI/CD
- Real-time streaming compression / Потоковое сжатие в реальном времени
Status / Статус: ✅ Actively maintained, rapidly gaining adoption. Becoming the de facto modern replacement for gzip in many Linux distributions (e.g., Fedora uses zstd for RPM packages, Arch Linux uses it for package compression). Supported in GNU tar 1.31+ (2019), Linux kernel (since 4.14), and most modern tools.
See also: TAR cheatsheet for general tar usage, ZIP/7z/ZSTD cheatsheet for standalone zstd usage.
Installation
Install zstd
# Debian/Ubuntu
sudo apt install zstd # Install zstd / Установить zstd
# RHEL/Fedora
sudo dnf install zstd # Install zstd / Установить zstd
# Arch Linux
sudo pacman -S zstd # Install zstd / Установить zstd
# Verify installation
zstd --version # Show zstd version / Версия zstd
tar --version # Ensure GNU tar 1.31+ / Убедиться в GNU tar 1.31+
[!NOTE] The
--zstdflag requires GNU tar 1.31+ (2019). For older versions, use-I zstdinstead. Флаг--zstdтребует GNU tar 1.31+ (2019). Для старых версий используйте-I zstd.
Basic Commands
Method 1: Explicit Compressor
tar -I zstd -cvf <ARCHIVE>.tar.zst <DIR>/ # Pack dir → .tar.zst / Упаковать dir → .tar.zst
tar -I unzstd -xvf <ARCHIVE>.tar.zst # Extract .tar.zst / Распаковать .tar.zst
Method 2: GNU tar Flags
tar --zstd -cvf <ARCHIVE>.tar.zst <DIR>/ # Pack with --zstd / Упаковать с --zstd
tar --zstd -xvf <ARCHIVE>.tar.zst # Extract / Распаковать
Method Comparison
| Method | Compatibility (EN / RU) | Advantage / Преимущество |
|---|---|---|
-I zstd |
All GNU tar versions / Все версии GNU tar | Works on older systems / Работает на старых системах |
--zstd |
GNU tar 1.31+ | Cleaner syntax / Более чистый синтаксис |
tar -a |
GNU tar 1.31+ | Auto-detect by extension / Автоопределение по расширению |
List Contents
tar -I zstd -tvf <ARCHIVE>.tar.zst | less # List contents / Показать содержимое
tar --zstd -tvf <ARCHIVE>.tar.zst # Alternative / Альтернатива
Compression Levels
Available Levels
# Zstandard levels: 1-19 (default: 3)
# Higher = better compression, slower
# Lower = faster, larger files
Fast Compression
tar -I 'zstd -1' -cvf <ARCHIVE>.tar.zst <DIR>/ # Fast compression / Быстрое сжатие
tar -I 'zstd -3' -cvf <ARCHIVE>.tar.zst <DIR>/ # Balanced (default) / Сбалансированное (по умолчанию)
Maximum Compression
tar -I 'zstd -19' -cvf <ARCHIVE>.tar.zst <DIR>/ # Max compression / Максимальное сжатие
Default Level
tar -I zstd -cvf <ARCHIVE>.tar.zst <DIR>/ # Default (level 3) / По умолчанию (уровень 3)
Compression Level Comparison
The key insight is that zstd at level 1 is already comparable to gzip in ratio but 3-5x faster. Level 3 (default) matches bzip2 ratio at much higher speed. Only use level 19 for archival storage where speed doesn't matter.
Ключевой момент: zstd на уровне 1 уже сопоставим с gzip по степени сжатия, но в 3-5 раз быстрее. Уровень 3 (по умолчанию) соответствует степени сжатия bzip2 при намного большей скорости. Уровень 19 для архивного хранения, где скорость не важна.
| Level | Speed | Ratio | Use Case (EN / RU) |
|---|---|---|---|
| 1 | Fastest / Быстрейший | Low / Низкое | Real-time / streaming / Потоковая передача |
| 3 | Fast / Быстрый | Good / Хорошее | Default, daily backups / По умолчанию, ежедневные бэкапы |
| 9 | Moderate / Средний | Better / Лучшее | Balanced storage / Сбалансированное хранение |
| 19 | Slow / Медленный | Best / Лучшее | Archival storage / Архивное хранение |
Advanced Usage
Multi-threaded Compression
tar -cv <DIR>/ | zstd -T0 -19 -o <ARCHIVE>.tar.zst # Use all cores / Использовать все ядра
tar -cv <DIR>/ | zstd -T4 -o <ARCHIVE>.tar.zst # Use 4 threads / Использовать 4 потока
[!TIP]
-T0automatically uses all available CPU cores, dramatically speeding up compression of large datasets. This is one of zstd's biggest advantages over gzip.-T0автоматически использует все доступные ядра CPU, значительно ускоряя сжатие больших данных. Это одно из главных преимуществ zstd над gzip.
Streaming Operations
# Create archive from stream
tar -cv <DIR>/ | zstd -T0 -19 -o <ARCHIVE>.tar.zst
# Extract from stream
zstdcat <ARCHIVE>.tar.zst | tar -xv
zstd -dc <ARCHIVE>.tar.zst | tar -xv # Alternative / Альтернатива
Pipe to Remote Server
tar -cv <DIR>/ | zstd | ssh <USER>@<HOST> 'cat > archive.tar.zst' # Send to remote / Отправить на удалённый
ssh <USER>@<HOST> 'zstdcat archive.tar.zst' | tar -xv # Extract from remote / Распаковать с удалённого
Exclude Patterns
tar -cv --exclude='*.log' --exclude='node_modules' <DIR>/ | zstd -o <ARCHIVE>.tar.zst # Exclude patterns / Исключить паттерны
Compression with Progress
tar -cv <DIR>/ | pv | zstd -T0 -o <ARCHIVE>.tar.zst # Show progress (requires pv) / Показать прогресс (требуется pv)
Dictionary-Based Compression
# Train a dictionary on sample files
zstd --train samples/* -o dict.zstd
# Compress with dictionary
tar -cv <DIR>/ | zstd -D dict.zstd -o <ARCHIVE>.tar.zst
# Decompress with dictionary
zstd -D dict.zstd -dc <ARCHIVE>.tar.zst | tar -xv
[!TIP] Dictionary compression is highly effective for many small similar files (logs, JSON records). It can improve ratio by 2-5x for small files. Сжатие со словарём высокоэффективно для множества маленьких похожих файлов (логи, JSON-записи). Может улучшить степень сжатия в 2-5 раз.
Backup Operations
Daily Backup with Rotation
# Fast backup
tar --zstd -cvf backup-$(date +%F).tar.zst /home/<USER>
# Maximum compression backup
tar -I "zstd -19 -T0" -cvf backup-$(date +%F).tar.zst /data
# Extract
tar --zstd -xvf backup-$(date +%F).tar.zst
# Rotate old backups
find /backup/ -name "backup-*.tar.zst" -mtime +7 -delete
[!CAUTION] The
find -deletecommand permanently removes old backups. Always verify your retention policy before enabling rotation. Командаfind -deleteбезвозвратно удаляет старые бэкапы. Всегда проверяйте политику хранения перед включением ротации.
Verify Archive Integrity
tar --zstd -tvf <ARCHIVE>.tar.zst > /dev/null # Test integrity / Проверить целостность
zstd -t <ARCHIVE>.tar.zst # Test zstd layer / Проверить слой zstd
Best Practices
General Recommendations
- Use
--zstdfor GNU tar 1.31+ / Используйте--zstdдля GNU tar 1.31+ - Use
-T0for multi-core compression / Используйте-T0для многоядерного сжатия - Level 3 is a good balance for daily use / Уровень 3 — хороший баланс для повседневного использования
- Level 19 for long-term archival storage / Уровень 19 для долгосрочного архивного хранения
- Zstd is faster than gzip/bzip2 at comparable ratios / Zstd быстрее чем gzip/bzip2 при сопоставимых коэффициентах
- Always verify archives after creation / Всегда проверяйте архивы после создания
Quick Comparison
| Format | Speed | Ratio | Description (EN / RU) |
|---|---|---|---|
.tar.gz |
Moderate / Средняя | ~2.5x | gzip (slower, widely compatible) / gzip (медленнее, широко совместим) |
.tar.bz2 |
Slow / Медленная | ~3x | bzip2 (slow, good compression) / bzip2 (медленный, хорошее сжатие) |
.tar.xz |
Very slow / Очень медленная | ~4x | xz (very slow, best compression) / xz (очень медленный, лучшее сжатие) |
.tar.zst |
Very fast / Очень быстрая | ~3x | zstd (FAST, great compression) / zstd (БЫСТРЫЙ, отличное сжатие) |
Documentation Links
- Zstandard Official Site: https://facebook.github.io/zstd/
- Zstandard GitHub: https://github.com/facebook/zstd
- Zstandard RFC (RFC 8478): https://tools.ietf.org/html/rfc8478
- zstd man page:
man zstdor https://man7.org/linux/man-pages/man1/zstd.1.html - GNU tar Manual (zstd support): https://www.gnu.org/software/tar/manual/
- Zstandard Benchmarks: https://facebook.github.io/zstd/#benchmarks
- See also: TAR cheatsheet, ZIP/7z/ZSTD cheatsheet