Nén file: Không chỉ là tiết kiệm dung lượng
Nếu từng quản trị server, chắc hẳn bạn đã gặp cảnh ổ cứng báo đỏ (99%) vì log file phình to hoặc cần chuyển hàng chục GB dữ liệu giữa các máy chủ. Lúc này, nén file là cứu cánh duy nhất để giải phóng không gian và tiết kiệm băng thông khi truyền tải.
Hồi mới làm sysadmin, mình từng nén một folder backup 100GB bằng xz ngay trên server production. Kết quả là CPU nhảy vọt lên 100%, server lag đến mức không SSH vào được. Mình mất cả buổi chiều xử lý chỉ vì không hiểu đặc tính của từng công cụ. Mỗi định dạng (gzip, bzip2, xz, zstd) đều có sự đánh đổi giữa tốc độ và tỷ lệ nén.
Trước khi bắt đầu, bạn cần phân biệt rõ hai khái niệm:
- Archiving (Đóng gói): Gom nhiều file thành một file duy nhất bằng
tar. - Compression (Nén): Sử dụng thuật toán để thu nhỏ kích thước file đó.
Cài đặt các công cụ cần thiết
Hầu hết các bản phân phối như Ubuntu hay CentOS đều có sẵn tar, gzip. Tuy nhiên, các công cụ mạnh mẽ như xz hay zstd (từ Facebook) thường phải cài thêm.
# Cho Ubuntu/Debian
sudo apt update && sudo apt install tar gzip bzip2 xz-utils zstd -y
# Cho RHEL/CentOS/AlmaLinux
sudo dnf install tar gzip bzip2 xz zstd -y
Chi tiết các định dạng nén phổ biến
1. Lệnh tar – “Xương sống” của việc đóng gói
tar (Tape Archive) là công cụ cơ bản nhất. Bản chất nó chỉ gom file thành một khối chứ không làm giảm dung lượng. Tuy nhiên, nó có thể kết hợp với các trình nén khác qua các flag.
# Đóng gói không nén (tạo file .tar)
tar -cvf backup.tar /path/to/folder
# Giải nén
tar -xvf backup.tar
Các flag cần nhớ: -c (Create), -x (Extract), -v (Verbose – xem tiến trình), và -f (File).
2. Gzip (.tar.gz) – Cân bằng và phổ biến
Đây là tiêu chuẩn “quốc dân”. Nếu bạn cần nén nhanh để gửi file cho đồng nghiệp hoặc backup định kỳ, hãy dùng flag -z.
# Nén nhanh với gzip
tar -czvf data.tar.gz /data
Thực tế: Một file log 1GB có thể nén xuống còn khoảng 200MB chỉ trong vòng 30 giây. Gzip tốn rất ít tài nguyên CPU.
3. XZ (.tar.xz) – Vô địch về tỷ lệ nén
Khi dung lượng lưu trữ là ưu tiên hàng đầu, xz (flag -J) là lựa chọn số một. Nó thường được dùng để đóng gói mã nguồn hoặc bản backup lâu dài.
tar -cJvf data.tar.xz /data
Cảnh báo: Đừng dùng xz trên các server yếu. Để nén cùng một file 1GB ở trên, xz có thể nén xuống còn 100MB nhưng mất tới 5 phút và ngốn sạch RAM.
4. Zstd (.tar.zstd) – Ngôi sao hiện đại
Zstandard là công cụ mình ưu tiên nhất hiện nay. Nó cực kỳ linh hoạt, cho phép tùy chỉnh mức độ nén và hỗ trợ đa nhân CPU.
# Nén với zstd
tar --zstd -cvf data.tar.zst /data
Điểm ăn tiền của zstd là tốc độ giải nén cực nhanh, gần như tương đương với việc đọc file không nén.
So sánh hiệu suất thực tế
Dưới đây là bảng so sánh dựa trên kinh nghiệm quản trị hệ thống thực tế của mình:
| Định dạng | Tốc độ | Tỷ lệ nén | Tình huống sử dụng |
|---|---|---|---|
| Gzip | Nhanh | Khá (5:1) | Backup hàng ngày, web server. |
| XZ | Rất chậm | Tốt nhất (10:1) | Lưu trữ lâu dài (Archiving). |
| Zstd | Rất nhanh | Tốt (7:1) | Dữ liệu lớn, Database, Real-time. |
Mẹo theo dõi tiến độ với file lớn
Lệnh tar mặc định không hiển thị thanh tiến trình. Khi nén file hàng trăm GB, bạn sẽ không biết khi nào nó xong. Hãy dùng pv (Pipe Viewer) để giải quyết vấn đề này:
# Cài pv và nén kèm thanh tiến độ
tar -cf - /path/to/data | pv -s $(du -sb /path/to/data | awk '{print $1}') | gzip > data.tar.gz
Lúc này, màn hình sẽ hiển thị rõ tốc độ (MB/s) và thời gian dự kiến hoàn thành. Rất chuyên nghiệp!
Lời kết: Nên chọn cái nào?
Mỗi công cụ đều có thế mạnh riêng tùy vào tài nguyên server của bạn:
- Cần nhanh, máy chủ yếu: Hãy chọn
gzip. - Muốn tiết kiệm dung lượng tối đa:
xzlà vô địch. - Máy chủ hiện đại, nhiều nhân CPU: Tuyệt đối nên dùng
zstd.
Hy vọng bài viết này giúp bạn không còn lúng túng khi đứng trước các lựa chọn nén file. Đừng quên test thử trên môi trường staging trước khi thực hiện các tác vụ nặng trên production nhé!

