Overview
Skills for tar/gzip/xz archive compression and split-volume backup.
tar basics
Create an archive
# 创建 tar 归档
tar -cvf archive.tar /path/to/dir
# 创建并 gzip 压缩
tar -czvf archive.tar.gz /path/to/dir
# 创建并 bzip2 压缩
tar -cjvf archive.tar.bz2 /path/to/dir
Create and compress with xz
tar -cJvf archive.tar.xz /path/to/dir
Multiple directories/filestar -czvf archive.tar.gz dir1 dir2 file1.txt
### 解压归档
```bash
# 解压 tar
tar -xvf archive.tar
# 解压 gzip
tar -xzvf archive.tar.gz
# 解压 bzip2
tar -xjvf archive.tar.bz2
# 解压 xz
tar -xJvf archive.tar.xz
# 解压到指定目录
tar -xzvf archive.tar.gz -C /target/dir
View contents
# 列出内容
tar -tvf archive.tar
tar -tzvf archive.tar.gz
# 搜索文件
tar -tzvf archive.tar.gz | grep "filename"
Common options
# 排除文件/目录
tar -czvf archive.tar.gz --exclude='*.log' --exclude='cache' /path
# 从文件读取排除列表
tar -czvf archive.tar.gz --exclude-from=exclude.txt /path
# 保留权限
tar -czvf archive.tar.gz --preserve-permissions /path
# 增量备份
tar -czvf archive.tar.gz --newer='2024-01-01' /path
Compression tools
gzip
# 压缩
gzip file.txt # 生成 file.txt.gz,删除原文件
gzip -k file.txt # 保留原文件
gzip -9 file.txt # 最高压缩率
# 解压
gunzip file.txt.gz
gzip -d file.txt.gz
# 查看压缩文件
zcat file.txt.gz
zless file.txt.gz
zgrep "pattern" file.txt.gz
bzip2
# 压缩
bzip2 file.txt
bzip2 -k file.txt # 保留原文件
bzip2 -9 file.txt # 最高压缩率
# 解压
bunzip2 file.txt.bz2
bzip2 -d file.txt.bz2
# 查看
bzcat file.txt.bz2
xz
# 压缩
xz file.txt
xz -k file.txt # 保留原文件
xz -9 file.txt # 最高压缩率
xz -T 4 file.txt # 多线程
# 解压
unxz file.txt.xz
xz -d file.txt.xz
# 查看
xzcat file.txt.xz
zstd
# 压缩
zstd file.txt
zstd -19 file.txt # 最高压缩率
zstd -T0 file.txt # 自动多线程
# 解压
unzstd file.txt.zst
zstd -d file.txt.zst
Split-volume backup
split splitting
# 按大小分割
split -b 100M archive.tar.gz archive.tar.gz.part_
# 按行分割
split -l 10000 largefile.txt part_
# 合并
cat archive.tar.gz.part_* > archive.tar.gz
tar split volumes
# 创建分卷
tar -czvf - /path/to/dir | split -b 100M - backup.tar.gz.part_
# 解压分卷
cat backup.tar.gz.part_* | tar -xzvf -
Common scenarios
Scenario 1: Website backup
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup"
WEB_DIR="/var/www/html"
# 创建备份
tar -czvf ${BACKUP_DIR}/web_${DATE}.tar.gz \
--exclude='*.log' \
--exclude='cache/*' \
${WEB_DIR}
# 保留最近 7 天
find ${BACKUP_DIR} -name "web_*.tar.gz" -mtime +7 -delete
Scenario 2: Database backup compression
# MySQL
mysqldump -u root -p database | gzip > db_backup.sql.gz
# 解压恢复
gunzip < db_backup.sql.gz | mysql -u root -p database
# PostgreSQL
pg_dump database | xz > db_backup.sql.xz
Scenario 3: Incremental backup
#!/bin/bash
SNAPSHOT="/backup/snapshot.snar"
BACKUP_DIR="/backup"
SOURCE="/data"
# 完整备份(首次)
tar -czvf ${BACKUP_DIR}/full.tar.gz -g ${SNAPSHOT} ${SOURCE}
# 增量备份
tar -czvf ${BACKUP_DIR}/incr_$(date +%Y%m%d).tar.gz -g ${SNAPSHOT} ${SOURCE}
Scenario 4: Remote backup
# 本地压缩后传输
tar -czvf - /path/to/dir | ssh user@remote "cat > /backup/archive.tar.gz"
# 远程压缩
ssh user@remote "tar -czvf - /path/to/dir" > local_backup.tar.gz
Compression comparison
| Format | Compression ratio | Speed | Memory | Use case |
|---|---|---|---|---|
| gzip | Medium | Fast | Low | Daily backup |
| bzip2 | High | Slow | Medium | Archival storage |
| xz | Highest | Slowest | High | Long-term storage |
| zstd | High | Fast | Medium | Modern backup |
Troubleshooting
| Issue | Troubleshooting method |
|---|---|
| Decompression fails | Check file integrity and format |
| Insufficient space | Use pipes or split volumes |
| Lost permissions | Use --preserve-permissions |
| Corrupted file | Use gzip -t to test |
# 测试压缩文件
gzip -t file.gz
bzip2 -t file.bz2
xz -t file.xz
# 修复损坏的 gzip
gzrecover file.gz
# 查看压缩信息
gzip -l file.gz