Thành thạo tar: Từ tạo, nén, giải nén đến sao lưu tự động trên Linux

Đây là hướng dẫn thực hành về lệnh tar với các tình huống phổ biến trong quản trị hệ thống Linux — từ khai thác nội dung lưu trữ đến xây dựng quy trình sao lưu định kỳ.

Giải nén toàn bộ nội dung từ file lưu trữ

Dùng tùy chọn -x để trích xuất dữ liệu. Lệnh sau sẽ giải nén toàn bộ cấu trúc thư mục trong archive.tar vào vị trí hiện tại:

[user@server ~]$ tar -xvf archive.tar

Chỉ định thư mục đích khi giải nén

Thêm tùy chọn -C kèm đường dẫn để định hướng nơi giải nén. Ví dụ sau đưa mọi tệp vào /var/backups/restore/:

[user@server ~]$ tar -xvf archive.tar -C /var/backups/restore/

Trích xuất một hoặc vài tệp cụ thể

Bạn có thể chỉ định tên tệp (kèm đường dẫn tương đối bên trong lưu trữ) để giải nén riêng lẻ. Câu lệnh dưới đây chỉ lấy config.yaml từ thư mục etc/ trong lưu trữ và đặt vào /tmp/configs/:

[user@server ~]$ tar -xvf backup.tgz etc/config.yaml -C /tmp/configs/

Tạo lưu trữ nén bằng gzip (.tar.gz / .tgz)

Sử dụng -z để tích hợp nén gzip. Dưới đây đóng gói /srv/app/usr/local/bin, đồng thời bỏ qua các tệp nhật ký:

[user@server ~]$ tar -zcpvf app-backup-$(date +%F).tgz /srv/app /usr/local/bin --exclude='*.log'

Tạo lưu trữ nén bằng bzip2 (.tar.bz2 / .tbz2)

Tùy chọn -j kích hoạt nén bzip2 — thường đạt tỷ lệ nén cao hơn gzip nhưng chậm hơn. Ví dụ:

[user@server ~]$ tar -jcpvf full-system.tbz2 /etc /opt --exclude='/etc/udev/rules.d'

Xem danh sách nội dung mà không giải nén

Tùy chọn -t hiển thị bảng nội dung chi tiết. Kết hợp với grep để lọc nhanh:

[user@server ~]$ tar -tvf app-backup-2024-10-05.tgz | grep -E '\.(conf|json)$'

Giải nén tự động nhận diện định dạng

Hầu hết phiên bản tar hiện đại (từ GNU tar 1.26+) tự phát hiện thuật toán nén. Vì vậy, bạn có thể dùng chung cú pháp cho mọi loại:

[user@server ~]$ tar -xpvf data-archive.tbz2 -C /mnt/recovery/
[user@server ~]$ tar -xpvf site-backup.tgz -C /var/www/

Tự động hóa sao lưu hàng ngày bằng cron

Tạo tác vụ định kỳ để sao lưu thư mục /data/shared. Thêm dòng sau vào crontab (crontab -e):

0 2 * * * /usr/bin/tar -zcpvf /backup/daily/shared-$(/bin/date +\%Y-\%m-\%d).tgz /data/shared > /dev/null 2>&1

Sử dụng danh sách tệp đầu vào và loại trừ

Tạo hai tệp văn bản: /opt/backup-includes.txt chứa đường dẫn cần đóng gói, và /opt/backup-excludes.txt liệt kê các mục cần bỏ qua:

[user@server ~]$ cat /opt/backup-includes.txt
/home/webapp
/etc/nginx
/usr/share/fonts

[user@server ~]$ cat /opt/backup-excludes.txt
/home/webapp/cache
/etc/nginx/conf.d/default.conf

Chạy lệnh sau để sinh lưu trữ dựa trên danh sách:

[user@server ~]$ tar -zcpvf full-deploy-$(date -I).tgz -T /opt/backup-includes.txt -X /opt/backup-excludes.txt

Đo dung lượng lưu trữ trước khi nén

Để kiểm tra kích thước của luồng nén (không lưu thành tệp), dùng -f - kết hợp với wc -c:

[user@server ~]$ tar -cf - /var/log | gzip | wc -c
12489320

Chia nhỏ lưu trữ lớn thành nhiều phần

Dùng lệnh split để phân chia file lưu trữ thành các mảnh có kích thước cố định — hữu ích khi truyền qua kênh giới hạn (email, FTP, USB FAT32):

[user@server ~]$ split -b 4M -d -a 3 full-backup.tgz backup-part-

Lệnh trên tạo các tệp backup-part-000, backup-part-001, … mỗi tệp 4 MB. Để ghép lại:

[user@server ~]$ cat backup-part-* > full-backup.tgz

Thẻ: tar linux shell backup compression

Đăng vào ngày 31 tháng 5 lúc 19:23