So sánh các định dạng nén cho VPS linux và cách sử dụng

Sơ đồ trang

  1. 1. Tổng Quan Các Định Dạng Nén
  2. 2. Benchmark Chi Tiết
  3. 3. So Sánh Chi Tiết
  4. 4. Hướng Dẫn Sử Dụng
  5. 5. Khuyến Nghị Chi Tiết Theo Use Case
  6. 6. Scripts Tự Động
  7. 7. Bảng Tra Cứu Nhanh
  8. 8. Performance Tips
  9. 9. Troubleshooting
  10. 10. Kết Luận & Khuyến Nghị Cuối
  11. 11. Tài Liệu Tham Khảo

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:

  • 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

  1. Luôn dùng multi-threading trên VPS multi-core
  2. Test trước với file nhỏ
  3. Monitor resources trong quá trình nén
  4. Verify integrity sau khi nén (7z t, tar -tf)
  5. Document format bạn chọn (cho team biết)
  6. Backup trước khi thử nghiệm format mới
  7. Rotate backups để tránh đầy disk
  8. Encrypt sensitive data (7z -p hoặc gpg)

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!

4.9/5 - (101 votes)

Nếu bạn thấy bài viết có ích bạn có thể chia sẻ bài viết này. Yêu cầu thêm bài viết tại đây
Đã copy
vutruso

Vũ Trụ Số chuyên cung cấp hosting cho WordPress, dịch vụ thiết kế website, quản trị website cho doanh nghiệp, các dịch vụ bảo mật website WordPress, tăng tốc website WordPress

Bài viết liên quan