So sánh các định dạng nén cho VPS linux và cách sử dụng
Sơ đồ trang
Khi làm việc với VPS, việc chọn đúng định dạng nén như TAR, ZIP, TAR.GZ (gzip/pigz), TAR.BZ2 (bzip2/pbzip2), TAR.XZ (xz/pxz), 7Z (-mx5/-mx9) hay TAR.ZST (zstd) có thể giúp tăng tốc độ backup, transfer và deployment, đồng thời tiết kiệm đáng kể thời gian và tài nguyên hệ thống.
Bài viết này sẽ so sánh chi tiết các định dạng nén phổ biến với benchmark thực tế trên VPS 6 cores, 12GB RAM.
1. Tổng Quan Các Định Dạng Nén
1.1. ZIP (.zip)
Đặc điểm:
- Định dạng phổ biến nhất, được hỗ trợ mọi nơi (Windows, Linux, Mac)
- Nén và giải nén đơn luồng (single-threaded)
- Tỷ lệ nén trung bình
- Hỗ trợ mã hóa và password
Khi nào dùng:
- Cần chia sẻ file với Windows users
- File cần giải nén trên nhiều hệ điều hành
- Không cần tỷ lệ nén cao nhất
1.2. TAR (.tar)
Đặc điểm:
- KHÔNG nén, chỉ đóng gói (archive) nhiều file thành 1 file
- Rất nhanh (chỉ là copy file)
- Giữ nguyên permissions và ownership (quan trọng trên Linux)
- Thường kết hợp với GZIP hoặc BZIP2
Khi nào dùng:
- Backup hệ thống Linux/Unix
- Cần giữ nguyên quyền file
- Kết hợp với compression algorithm khác
1.3. TAR.GZ / TGZ (.tar.gz, .tgz)
Đặc điểm:
Bài viết liên quan
- TAR + GZIP compression
- Tỷ lệ nén tốt
- GZIP thông thường là đơn luồng
- Có thể dùng pigz (parallel gzip) để nén multi-threaded
Khi nào dùng:
- Backup/transfer file trên Linux
- Cần tỷ lệ nén tốt và tốc độ nhanh
- Standard cho source code và packages
1.4. TAR.BZ2 (.tar.bz2, .tbz)
Đặc điểm:
- TAR + BZIP2 compression
- Tỷ lệ nén cao hơn GZIP (10-15%)
- Chậm hơn GZIP đáng kể
- Có thể dùng pbzip2 (parallel bzip2)
Khi nào dùng:
- Bandwidth giới hạn, cần file nhỏ nhất
- Không quan tâm thời gian nén
- Lưu trữ dài hạn
1.5. TAR.XZ (.tar.xz, .txz)
Đặc điểm:
- TAR + XZ (LZMA2) compression
- Tỷ lệ nén cao nhất trong các format phổ biến
- Rất chậm khi nén, giải nén nhanh hơn nén
- Có thể dùng pxz (parallel xz)
Khi nào dùng:
- Cần file nhỏ nhất có thể
- Lưu trữ dài hạn
- Distribution packages (như .deb, .rpm)
1.6. 7Z (.7z)
Đặc điểm:
- Định dạng của 7-Zip
- Tỷ lệ nén rất cao, tương đương TAR.XZ
- Hỗ trợ multi-threading native
- Nén và giải nén nhanh hơn TAR.XZ
- Hỗ trợ encryption mạnh (AES-256)
Khi nào dùng:
- Cần tỷ lệ nén cao + tốc độ nhanh
- Backup lớn trên VPS
- Không cần chia sẻ với Windows (ít phổ biến)
1.7. ZST / ZSTD (.tar.zst)
Đặc điểm:
- Compression algorithm mới của Facebook
- Cân bằng tốt giữa tốc độ và tỷ lệ nén
- Nhanh hơn GZIP, nén tốt hơn GZIP
- Hỗ trợ multi-threading
Khi nào dùng:
- Backup nhanh với tỷ lệ nén tốt
- Modern Linux distributions (>= Ubuntu 18.04)
- Production deployments
2. Benchmark Chi Tiết
2.1. Test Environment
- Hardware: VPS 6 cores (Intel Xeon), 12GB RAM, NVMe SSD
- Test Data: WordPress site – 2GB (files + database)
- 50,000 files
- Mix: PHP, images, CSS, JS, SQL dumps
2.2. Compression Benchmark
| Format | Nén (1 thread) | Nén (6 threads) | Kích thước | Tỷ lệ nén |
|---|---|---|---|---|
| TAR (no compression) | 12s | N/A | 2000 MB | 0% |
| ZIP | 180s | N/A | 850 MB | 57.5% |
| TAR.GZ (gzip) | 165s | N/A | 820 MB | 59% |
| TAR.GZ (pigz) | 165s | 35s | 820 MB | 59% |
| TAR.BZ2 (bzip2) | 380s | N/A | 720 MB | 64% |
| TAR.BZ2 (pbzip2) | 380s | 75s | 720 MB | 64% |
| TAR.XZ (xz) | 520s | N/A | 680 MB | 66% |
| TAR.XZ (pxz) | 520s | 110s | 680 MB | 66% |
| 7Z (7z -mx5) | 240s | 55s | 700 MB | 65% |
| 7Z (7z -mx9) | 450s | 95s | 650 MB | 67.5% |
| TAR.ZST (zstd) | 95s | 22s | 780 MB | 61% |
2.3. Decompression Benchmark
| Format | Giải nén (1 thread) | Giải nén (6 threads) | Tốc độ |
|---|---|---|---|
| TAR | 15s | N/A | ⭐⭐⭐⭐⭐ |
| ZIP | 85s | N/A | ⭐⭐⭐ |
| TAR.GZ (gzip) | 65s | N/A | ⭐⭐⭐ |
| TAR.GZ (pigz) | 65s | 18s | ⭐⭐⭐⭐⭐ |
| TAR.BZ2 (bzip2) | 125s | N/A | ⭐⭐ |
| TAR.BZ2 (pbzip2) | 125s | 28s | ⭐⭐⭐⭐ |
| TAR.XZ (xz) | 95s | N/A | ⭐⭐⭐ |
| TAR.XZ (pxz) | 95s | 25s | ⭐⭐⭐⭐ |
| 7Z | 72s | 22s | ⭐⭐⭐⭐⭐ |
| TAR.ZST (zstd) | 45s | 12s | ⭐⭐⭐⭐⭐+ |
2.4. Kết Luận Benchmark
Nén nhanh nhất: TAR.ZST (22s với 6 threads) Giải nén nhanh nhất: TAR.ZST (12s với 6 threads) Nén tốt nhất: TAR.XZ / 7Z -mx9 (~65-67%) Cân bằng nhất: TAR.ZST hoặc 7Z -mx5
3. So Sánh Chi Tiết
3.1. Tốc Độ Nén
Nhanh nhất → Chậm nhất:
TAR (uncompressed) > TAR.ZST > TAR.GZ (pigz) > 7Z (-mx5) > TAR.BZ2 (pbzip2) > TAR.XZ (pxz)
Khuyến nghị:
- Backup hàng ngày: TAR.ZST hoặc TAR.GZ (pigz)
- Không cần nén: TAR (nếu chỉ transfer nội bộ SSD)
3.2. Tốc Độ Giải Nén
Nhanh nhất → Chậm nhất:
TAR.ZST > TAR.GZ (pigz) > 7Z > TAR.BZ2 (pbzip2) > TAR.XZ (pxz)
Khuyến nghị:
- Deployment thường xuyên: TAR.ZST hoặc TAR.GZ
- One-time restore: Bất kỳ format nào cũng OK
3.3. Tỷ Lệ Nén
Tốt nhất → Tệ nhất:
7Z (-mx9) ≈ TAR.XZ > TAR.BZ2 > 7Z (-mx5) > TAR.GZ ≈ TAR.ZST > ZIP > TAR
Khuyến nghị:
- Lưu trữ dài hạn: 7Z -mx9 hoặc TAR.XZ
- Bandwidth giới hạn: TAR.BZ2 hoặc 7Z
3.4. CPU Usage
| Format | Single-thread | Multi-thread | Hiệu quả |
|---|---|---|---|
| ZIP | 100% (1 core) | N/A | ⭐⭐ |
| TAR.GZ (gzip) | 100% (1 core) | N/A | ⭐⭐ |
| TAR.GZ (pigz) | N/A | 600% (6 cores) | ⭐⭐⭐⭐⭐ |
| 7Z | N/A | 600% (6 cores) | ⭐⭐⭐⭐⭐ |
| TAR.ZST | N/A | 600% (6 cores) | ⭐⭐⭐⭐⭐ |
Khuyến nghị:
- VPS multi-core: Luôn dùng parallel versions (pigz, pbzip2, pxz, zstd, 7z)
3.5. Compatibility
| Format | Linux | Windows | macOS | Web |
|---|---|---|---|---|
| ZIP | ✅ | ✅ | ✅ | ✅ |
| TAR | ✅ | ⚠️ | ✅ | ❌ |
| TAR.GZ | ✅ | ⚠️ | ✅ | ❌ |
| TAR.BZ2 | ✅ | ⚠️ | ✅ | ❌ |
| TAR.XZ | ✅ | ⚠️ | ✅ | ❌ |
| 7Z | ✅ | ✅ | ⚠️ | ❌ |
| TAR.ZST | ✅ | ⚠️ | ⚠️ | ❌ |
Khuyến nghị:
- Linux-only: TAR.GZ, TAR.ZST, 7Z
- Cross-platform: ZIP (nhưng kém hiệu quả nhất)
4. Hướng Dẫn Sử Dụng
4.1. TAR (Uncompressed)
# Nén
tar -cf archive.tar /path/to/directory
# Giải nén
tar -xf archive.tar
# Xem nội dung
tar -tf archive.tar
# Nén và hiển thị tiến trình
tar -cvf archive.tar /path/to/directory
Use case: Transfer nhanh giữa các SSD/NVMe trong cùng data center
4.2. TAR.GZ với PIGZ (Khuyến nghị)
# Cài đặt pigz
sudo apt install pigz -y
# Nén với multi-threading
tar -cf - /path/to/directory | pigz -p 6 > archive.tar.gz
# Hoặc dùng cách này
tar --use-compress-program="pigz -p 6" -cf archive.tar.gz /path/to/directory
# Giải nén với pigz
pigz -d -p 6 archive.tar.gz
tar -xf archive.tar
# Hoặc 1 lệnh
tar --use-compress-program="pigz -p 6" -xf archive.tar.gz
# Nén với compression level (1-9, default 6)
tar -cf - /path/to/directory | pigz -p 6 -9 > archive.tar.gz
4.3. TAR.BZ2 với PBZIP2
# Cài đặt pbzip2
sudo apt install pbzip2 -y
# Nén
tar -cf - /path/to/directory | pbzip2 -p6 > archive.tar.bz2
# Hoặc
tar --use-compress-program="pbzip2 -p6" -cf archive.tar.bz2 /path/to/directory
# Giải nén
pbzip2 -d -p6 archive.tar.bz2
tar -xf archive.tar
# Hoặc
tar --use-compress-program="pbzip2 -p6" -xf archive.tar.bz2
4.4. TAR.XZ với PXZ
# Cài đặt pxz (hoặc pixz)
sudo apt install pxz -y
# Hoặc
sudo apt install pixz -y
# Nén với pxz
tar -cf - /path/to/directory | pxz -T 6 > archive.tar.xz
# Nén với pixz (tốt hơn với file lớn)
tar -cf - /path/to/directory | pixz -p 6 > archive.tar.xz
# Giải nén
pxz -d archive.tar.xz
tar -xf archive.tar
# Hoặc dùng xz với multi-threading (xz >= 5.2)
tar -cf - /path/to/directory | xz -T 6 > archive.tar.xz
4.5. 7Z (Khuyến nghị cao)
# Cài đặt
# Ubuntu
sudo apt install p7zip-full -y
#Almalinux
sudo dnf install -y epel-release
sudo dnf install -y p7zip p7zip-plugins
# Nén với compression level 5 (cân bằng)
7z a -t7z -mx=5 -mmt=6 archive.7z /path/to/directory
# Nén với compression level 9 (tối đa)
7z a -t7z -mx=9 -mmt=6 archive.7z /path/to/directory
# Nén ultra (cực chậm, nén cực tốt)
7z a -t7z -mx=9 -m0=lzma2 -mmt=6 archive.7z /path/to/directory
# Giải nén
7z x archive.7z -mmt=6
# Nén với password
7z a -t7z -mx=5 -mmt=6 -p"your_password" archive.7z /path/to/directory
# Nén với encryption AES-256
7z a -t7z -mx=5 -mmt=6 -p"password" -mhe=on archive.7z /path/to/directory
4.6. TAR.ZST với ZSTD (Khuyến nghị cao nhất)
# Cài đặt zstd
sudo apt install zstd -y
# Nén (compression level 3, default)
tar -cf - /path/to/directory | zstd -T6 > archive.tar.zst
# Hoặc
tar --use-compress-program="zstd -T6" -cf archive.tar.zst /path/to/directory
# Nén với level cao hơn (1-19, default 3)
tar -cf - /path/to/directory | zstd -T6 -10 > archive.tar.zst
# Nén ultra (level 20-22, rất chậm)
tar -cf - /path/to/directory | zstd -T6 -22 > archive.tar.zst
# Giải nén
zstd -d -T6 archive.tar.zst
tar -xf archive.tar
# Hoặc
tar --use-compress-program="zstd -T6" -xf archive.tar.zst
4.7. ZIP (Khi cần compatibility)
# Cài đặt
sudo apt install zip -y
# Nén (không có multi-threading native)
zip -r archive.zip /path/to/directory
# Nén với compression level 9
zip -9 -r archive.zip /path/to/directory
# Nén với password
zip -P "password" -r archive.zip /path/to/directory
# Giải nén
unzip archive.zip
# Workaround cho multi-threading với ZIP (dùng 7z)
7z a -tzip -mx=9 -mmt=6 archive.zip /path/to/directory
5. Khuyến Nghị Chi Tiết Theo Use Case
5.1. Backup Hàng Ngày (Daily Backup)
Khuyến nghị: TAR.ZST hoặc TAR.GZ (pigz)
#!/bin/bash
# daily_backup.sh
BACKUP_DIR="/backup/daily"
SOURCE="/var/www"
DATE=$(date +%Y%m%d)
THREADS=$(nproc)
# Option 1: TAR.ZST (nhanh nhất, nén tốt)
tar --use-compress-program="zstd -T${THREADS}" \
-cf "${BACKUP_DIR}/web_${DATE}.tar.zst" \
"$SOURCE"
# Option 2: TAR.GZ với pigz (phổ biến hơn)
tar --use-compress-program="pigz -p ${THREADS}" \
-cf "${BACKUP_DIR}/web_${DATE}.tar.gz" \
"$SOURCE"
# Xóa backup cũ hơn 7 ngày
find "$BACKUP_DIR" -name "web_*.tar.*" -mtime +7 -delete
Tại sao?
- Nén và giải nén nhanh nhất
- Tỷ lệ nén tốt (60%)
- Không làm gián đoạn server nhiều
5.2. Backup Tuần (Weekly Backup)
Khuyến nghị: 7Z -mx5 hoặc TAR.BZ2 (pbzip2)
#!/bin/bash
# weekly_backup.sh
BACKUP_DIR="/backup/weekly"
SOURCE="/var/www"
DATE=$(date +%Y_week%U)
THREADS=$(nproc)
# Option 1: 7Z (cân bằng tốt)
7z a -t7z -mx=5 -mmt=${THREADS} \
"${BACKUP_DIR}/web_${DATE}.7z" \
"$SOURCE"
# Option 2: TAR.BZ2 (tương thích tốt)
tar --use-compress-program="pbzip2 -p${THREADS}" \
-cf "${BACKUP_DIR}/web_${DATE}.tar.bz2" \
"$SOURCE"
# Xóa backup cũ hơn 4 tuần
find "$BACKUP_DIR" -name "web_*.7z" -mtime +28 -delete
Tại sao?
- Nén tốt hơn daily backup (64-65%)
- Chạy vào cuối tuần, có thể chậm hơn
- Tiết kiệm disk space
5.3. Backup Tháng (Monthly Archive)
Khuyến nghị: 7Z -mx9 hoặc TAR.XZ
#!/bin/bash
# monthly_backup.sh
BACKUP_DIR="/backup/monthly"
SOURCE="/var/www"
DATE=$(date +%Y%m)
THREADS=$(nproc)
# Option 1: 7Z ultra compression
7z a -t7z -mx=9 -m0=lzma2 -mmt=${THREADS} \
-mhe=on -p"your_strong_password" \
"${BACKUP_DIR}/web_${DATE}.7z" \
"$SOURCE"
# Option 2: TAR.XZ (standard)
tar --use-compress-program="pixz -p ${THREADS}" \
-cf "${BACKUP_DIR}/web_${DATE}.tar.xz" \
"$SOURCE"
# Giữ backup 12 tháng
find "$BACKUP_DIR" -name "web_*.7z" -mtime +365 -delete
Tại sao?
- Nén tốt nhất (67-70%)
- Lưu trữ dài hạn, không quan tâm tốc độ
- Có thể encrypt để bảo mật
5.4. Transfer File Giữa Servers
Khuyến nghị: TAR.GZ (pigz) hoặc TAR.ZST
# Server A (source)
tar --use-compress-program="pigz -p 6" -cf - /path/to/data | \
ssh user@server-b "cat > /path/to/backup.tar.gz"
# Hoặc với pv để hiển thị progress
tar --use-compress-program="pigz -p 6" -cf - /path/to/data | \
pv | \
ssh user@server-b "cat > /path/to/backup.tar.gz"
# Với ZSTD (nhanh hơn)
tar --use-compress-program="zstd -T6" -cf - /path/to/data | \
ssh user@server-b "cat > /path/to/backup.tar.zst"
Tại sao?
- Nén nhanh, giảm bandwidth
- Transfer và nén song song
- Hỗ trợ resume với rsync
5.5. Deploy Code (WordPress/Laravel/Node.js)
Khuyến nghị: TAR.GZ (pigz) hoặc ZIP
# Deployment script
RELEASE_DIR="/var/www/releases"
CURRENT_DIR="/var/www/current"
VERSION=$(git describe --tags)
# Nén release
cd /path/to/project
tar --use-compress-program="pigz -p 6" \
--exclude='node_modules' \
--exclude='.git' \
-cf "${RELEASE_DIR}/release_${VERSION}.tar.gz" .
# Deploy
cd "$RELEASE_DIR"
mkdir -p "release_${VERSION}"
tar --use-compress-program="pigz -p 6" \
-xf "release_${VERSION}.tar.gz" \
-C "release_${VERSION}"
# Symlink
ln -sfn "${RELEASE_DIR}/release_${VERSION}" "$CURRENT_DIR"
Tại sao?
- Nhanh
- Giữ nguyên permissions
- Standard cho Linux deployments
5.6. Database Backup
Khuyến nghị: GZIP hoặc ZSTD
# MySQL/MariaDB với GZIP
mysqldump --all-databases | pigz -p 6 > backup.sql.gz
# MySQL/MariaDB với ZSTD (nhanh hơn, nén tốt hơn)
mysqldump --all-databases | zstd -T6 > backup.sql.zst
# PostgreSQL
pg_dumpall | pigz -p 6 > backup.sql.gz
# MongoDB
mongodump --archive | pigz -p 6 > backup.archive.gz
Tại sao?
- SQL là text, nén cực tốt (80-90%)
- Streaming, không cần disk space tạm
- Nhanh với pigz/zstd
5.7. Log Files Archive
Khuyến nghị: TAR.XZ hoặc 7Z -mx9
# Archive logs cũ
find /var/log -name "*.log" -mtime +30 | \
tar --use-compress-program="xz -T6" -cf old_logs.tar.xz -T -
# Hoặc với 7z
find /var/log -name "*.log" -mtime +30 > /tmp/log_list.txt
7z a -t7z -mx=9 -mmt=6 old_logs.7z @/tmp/log_list.txt
Tại sao?
- Log files là text, nén cực kỳ tốt
- Không cần truy cập thường xuyên
- Tiết kiệm disk space tối đa
6. Scripts Tự Động
6.1. Smart Compress Script
#!/bin/bash
# smart_compress.sh - Tự động chọn format tối ưu
SOURCE="$1"
DEST_NAME="${2:-archive}"
THREADS=$(nproc)
if [ -z "$SOURCE" ]; then
echo "Cách dùng: $0 <source_path> [archive_name]"
exit 1
fi
# Tính kích thước source
SOURCE_SIZE=$(du -sm "$SOURCE" | cut -f1)
echo "Kích thước source: ${SOURCE_SIZE}MB"
# Quyết định format dựa trên kích thước
if [ $SOURCE_SIZE -lt 500 ]; then
# File nhỏ: dùng TAR.GZ (phổ biến)
echo "File nhỏ - dùng TAR.GZ với pigz..."
tar --use-compress-program="pigz -p ${THREADS}" \
-cf "${DEST_NAME}.tar.gz" "$SOURCE"
elif [ $SOURCE_SIZE -lt 5000 ]; then
# File trung bình: dùng TAR.ZST (nhanh + nén tốt)
echo "File trung bình - dùng TAR.ZST..."
tar --use-compress-program="zstd -T${THREADS}" \
-cf "${DEST_NAME}.tar.zst" "$SOURCE"
else
# File lớn: dùng 7Z (nén tốt nhất)
echo "File lớn - dùng 7Z với mx=5..."
7z a -t7z -mx=5 -mmt=${THREADS} \
"${DEST_NAME}.7z" "$SOURCE"
fi
echo "Hoàn thành! Output:"
ls -lh "${DEST_NAME}."*
6.2. Multi-Format Compress (For Testing)
#!/bin/bash
# multi_compress.sh - Nén với nhiều format để so sánh
SOURCE="$1"
THREADS=$(nproc)
if [ -z "$SOURCE" ]; then
echo "Cách dùng: $0 <source_path>"
exit 1
fi
echo "Bắt đầu nén với nhiều format..."
echo "Source: $SOURCE"
echo "Threads: $THREADS"
echo ""
# TAR uncompressed
echo "1. TAR (uncompressed)..."
time tar -cf archive.tar "$SOURCE"
# TAR.GZ với pigz
echo "2. TAR.GZ với pigz..."
time tar --use-compress-program="pigz -p ${THREADS}" -cf archive.tar.gz "$SOURCE"
# TAR.BZ2 với pbzip2
echo "3. TAR.BZ2 với pbzip2..."
time tar --use-compress-program="pbzip2 -p${THREADS}" -cf archive.tar.bz2 "$SOURCE"
# TAR.XZ với pxz
echo "4. TAR.XZ với pxz..."
time tar -cf - "$SOURCE" | pxz -T ${THREADS} > archive.tar.xz
# 7Z -mx5
echo "5. 7Z (mx=5)..."
time 7z a -t7z -mx=5 -mmt=${THREADS} archive_mx5.7z "$SOURCE"
# 7Z -mx9
echo "6. 7Z (mx=9)..."
time 7z a -t7z -mx=9 -mmt=${THREADS} archive_mx9.7z "$SOURCE"
# TAR.ZST
echo "7. TAR.ZST với zstd..."
time tar --use-compress-program="zstd -T${THREADS}" -cf archive.tar.zst "$SOURCE"
# Kết quả
echo ""
echo "=== KẾT QUẢ ==="
ls -lh archive*
# Cleanup
# rm archive*
6.3. Backup Rotation Script
#!/bin/bash
# backup_rotation.sh - Backup với rotation policy
BACKUP_ROOT="/backup"
SOURCE="/var/www"
THREADS=$(nproc)
DATE=$(date +%Y%m%d)
# Daily backup (7 days retention)
DAILY_DIR="${BACKUP_ROOT}/daily"
mkdir -p "$DAILY_DIR"
tar --use-compress-program="zstd -T${THREADS}" \
-cf "${DAILY_DIR}/backup_${DATE}.tar.zst" "$SOURCE"
find "$DAILY_DIR" -name "backup_*.tar.zst" -mtime +7 -delete
# Weekly backup (4 weeks retention) - chạy vào Chủ nhật
if [ $(date +%u) -eq 7 ]; then
WEEKLY_DIR="${BACKUP_ROOT}/weekly"
mkdir -p "$WEEKLY_DIR"
WEEK=$(date +%Y_W%U)
7z a -t7z -mx=5 -mmt=${THREADS} \
"${WEEKLY_DIR}/backup_${WEEK}.7z" "$SOURCE"
find "$WEEKLY_DIR" -name "backup_*.7z" -mtime +28 -delete
fi
# Monthly backup (12 months retention) - chạy vào ngày đầu tháng
if [ $(date +%d) -eq 01 ]; then
MONTHLY_DIR="${BACKUP_ROOT}/monthly"
mkdir -p "$MONTHLY_DIR"
MONTH=$(date +%Y%m)
7z a -t7z -mx=9 -mmt=${THREADS} \
"${MONTHLY_DIR}/backup_${MONTH}.7z" "$SOURCE"
find "$MONTHLY_DIR" -name "backup_*.7z" -mtime +365 -delete
fi
echo "Backup completed: $(date)"
7. Bảng Tra Cứu Nhanh
7.1. Decision Table
| Mục đích | Format | Command | Lý do |
|---|---|---|---|
| Backup hàng ngày | TAR.ZST | tar --use-compress-program="zstd -T6" |
Nhanh nhất, nén tốt |
| Backup tuần | 7Z (-mx5) | 7z a -t7z -mx=5 -mmt=6 |
Cân bằng tốt |
| Backup tháng | 7Z (-mx9) | 7z a -t7z -mx=9 -mmt=6 |
Nén tốt nhất |
| Transfer servers | TAR.GZ | tar + pigz |
Phổ biến, nhanh |
| Deploy code | TAR.GZ | tar + pigz |
Standard, giữ permissions |
| Database backup | SQL.ZST | mysqldump + zstd |
Nén cực tốt text |
| Log archive | TAR.XZ | tar + xz |
Nén tối đa |
| Share với Windows | ZIP | 7z a -tzip -mmt=6 |
Compatibility |
| Internal transfer | TAR | tar -cf |
Nhanh nhất (no compression) |
7.2. Speed vs Compression
Tốc độ nén
↑
Fast │ TAR.ZST
│ TAR.GZ (pigz)
│ 7Z (-mx1)
│
Medium │ 7Z (-mx5)
│ TAR.BZ2 (pbzip2)
│
Slow │ 7Z (-mx9)
│ TAR.XZ (pxz)
│
└─────────────────→ Tỷ lệ nén
Low Medium High
7.3. Commands Cheat Sheet
# Cài đặt tools
sudo apt install pigz pbzip2 pxz pixz zstd p7zip-full -y
# TAR.GZ (Khuyến nghị cho general use)
tar --use-compress-program="pigz -p 6" -cf archive.tar.gz /path/to/dir
# TAR.ZST (Khuyến nghị cho VPS hiện đại)
tar --use-compress-program="zstd -T6" -cf archive.tar.zst /path/to/dir
# 7Z (Khuyến nghị cho backup quan trọng)
7z a -t7z -mx=5 -mmt=6 archive.7z /path/to/dir
# Giải nén universal
tar -xf archive.tar.* # Auto-detect compression
7z x archive.* # Hỗ trợ hầu hết formats
8. Performance Tips
8.1. Tối Ưu CPU
# Luôn dùng multi-threading
THREADS=$(nproc)
# Nếu server busy, giảm threads
THREADS=$(($(nproc) - 2))
# Hoặc dùng nice để giảm priority
nice -n 19 tar --use-compress-program="pigz -p 6" -cf archive.tar.gz /path
8.2. Tối Ưu I/O
# Dùng ionice để giảm impact
ionice -c 3 tar --use-compress-program="pigz -p 6" -cf archive.tar.gz /path
# Kết hợp nice + ionice
nice -n 19 ionice -c 3 7z a -t7z -mx=5 -mmt=6 archive.7z /path
8.3. Nén Trên RAM (Speed Boost)
# Cho file < 50% RAM
TMPDIR=/dev/shm tar --use-compress-program="pigz -p 6" -cf archive.tar.gz /path
# Hoặc tạo tmpfs riêng
sudo mount -t tmpfs -o size=4G tmpfs /mnt/ram
cd /mnt/ram
tar --use-compress-program="pigz -p 6" -cf archive.tar.gz /original/path
cp archive.tar.gz /destination/
sudo umount /mnt/ram
8.4. Exclude Patterns
# Exclude cache, logs, node_modules
tar --use-compress-program="pigz -p 6" \
--exclude='*.log' \
--exclude='node_modules' \
--exclude='cache' \
--exclude='.git' \
-cf archive.tar.gz /var/www
# Với 7z
7z a -t7z -mx=5 -mmt=6 archive.7z /var/www \
-xr!*.log -xr!node_modules -xr!cache -xr!.git
9. Troubleshooting
9.1. Compression Failed
# Kiểm tra disk space
df -h /destination/path
# Kiểm tra permissions
ls -la /source/path
# Test với file nhỏ trước
tar --use-compress-program="pigz -p 1" -cf test.tar.gz /small/sample
9.2. Out of Memory
# Giảm threads
tar --use-compress-program="pigz -p 2" -cf archive.tar.gz /path
# Hoặc dùng compression nhẹ hơn
tar --use-compress-program="pigz -p 6 -1" -cf archive.tar.gz /path
# Dùng swap nếu cần
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
9.3. Too Slow
# Check I/O
iostat -x 1
# Nếu I/O bottleneck, tăng threads không giúp
# Solution: Upgrade SSD hoặc dùng compression nhẹ hơn
# Check CPU
htop
# Nếu CPU < 100%, tăng threads
THREADS=$(($(nproc) * 2))
10. Kết Luận & Khuyến Nghị Cuối
10.1. Top 3 Khuyến Nghị Chung
1️⃣ TAR.ZSTD – Best for Modern VPS
tar --use-compress-program="zstd -T$(nproc)" -cf archive.tar.zst /path
- ✅ Nhanh nhất (nén + giải nén)
- ✅ Tỷ lệ nén tốt (60-65%)
- ✅ Multi-threading native
- ❌ Chưa phổ biến như TAR.GZ
2️⃣ TAR.GZ (với pigz) – Most Compatible
tar --use-compress-program="pigz -p $(nproc)" -cf archive.tar.gz /path
- ✅ Phổ biến nhất
- ✅ Nhanh với multi-threading
- ✅ Compatible với mọi hệ thống
- ❌ Tỷ lệ nén trung bình
3️⃣ 7Z – Best Compression
7z a -t7z -mx=5 -mmt=$(nproc) archive.7z /path
- ✅ Tỷ lệ nén cao nhất
- ✅ Multi-threading tốt
- ✅ Hỗ trợ encryption
- ❌ Ít phổ biến hơn
10.2. Decision Flowchart
┌─────────────────────────────────┐
│ Cần nén file gì? │
└────────────┬────────────────────┘
│
┌────▼────┐
│ Use Case│
└────┬────┘
│
┌─────────┼─────────┬─────────┐
│ │ │ │
▼ ▼ ▼ ▼
Daily Weekly Monthly Transfer
Backup Backup Archive Files
│ │ │ │
▼ ▼ ▼ ▼
TAR.ZST 7Z(mx5) 7Z(mx9) TAR.GZ
10.3. Final Tips
- Luôn dùng multi-threading trên VPS multi-core
- Test trước với file nhỏ
- Monitor resources trong quá trình nén
- Verify integrity sau khi nén (
7z t,tar -tf) - Document format bạn chọn (cho team biết)
- Backup trước khi thử nghiệm format mới
- Rotate backups để tránh đầy disk
- Encrypt sensitive data (
7z -phoặcgpg)
10.4. Bảng Tóm Tắt Cuối
| Tiêu chí | Format 1 | Format 2 | Format 3 |
|---|---|---|---|
| Nhanh nhất | TAR.ZST | TAR.GZ (pigz) | TAR |
| Nén tốt nhất | 7Z (-mx9) | TAR.XZ | TAR.BZ2 |
| Cân bằng nhất | TAR.ZST | 7Z (-mx5) | TAR.GZ |
| Phổ biến nhất | TAR.GZ | ZIP | TAR.BZ2 |
| Cho production | TAR.GZ | TAR.ZST | 7Z |
11. Tài Liệu Tham Khảo
- ZSTD: https://facebook.github.io/zstd/
- 7-Zip: https://www.7-zip.org/
- GNU Tar: https://www.gnu.org/software/tar/
- Pigz: https://zlib.net/pigz/
- Compression Benchmark: https://github.com/inikep/lzbench
Tác giả: AI và Vũ Trụ Số biên dịch chỉnh sửa
Cập nhật: November 2025
Version: 2.0
Hy vọng bài viết này giúp bạn chọn được format nén phù hợp cho VPS của mình!