Khi ổ cứng đầy, giải pháp tốt nhất là bạn nên kết hợp tar và ssh để tạo một pipepline truyền dữ liệu trực tiếp qua mạng mà không cần lưu trữ trung gian. Bài viết này sẽ hướng dẫn chi tiết từng bước thực hiện backup bằng tar SSH trong điều kiện tài nguyên hạn chế và những lưu ý trong quá trình thực hiện.
Những điểm chính
- Khái niệm lệnh tar: Là công cụ dòng lệnh trong Linux để gom nhiều file và thư mục thành một file lưu trữ duy nhất.
- Khái niệm tar SSH: Là kỹ thuật kết hợp lệnh tar và ssh để truyền dữ liệu nén trực tiếp qua mạng mà không cần tạo file tạm.
- Tại sao nên kết hợp tar và SSH: Giúp tiết kiệm dung lượng ổ đĩa, tăng tốc độ truyền file và đảm bảo an toàn dữ liệu qua kết nối mã hóa.
- Khi nào nên sử dụng: Rất hữu ích trong các tình huống khẩn cấp như máy chủ bị đầy dung lượng, không thể tạo file backup tạm thời.
- Hướng dẫn backup tệp từ xa: Quy trình bao gồm việc thiết lập xác thực bằng SSH key và sử dụng lệnh tar czf – [thư mục] | ssh [user@host] “cat > [file.tar.gz]”.
- Cách khôi phục dữ liệu: Thực hiện quy trình ngược lại bằng cách đọc file backup từ máy chủ đích và giải nén trực tiếp trên máy chủ nguồn.
- Lưu ý quan trọng: Cần đảm bảo cả hai máy chủ đều có tar và ssh, tài khoản người dùng có đủ quyền hạn và kết nối mạng ổn định.
- Giải đáp một số thắc mắc thường gặp khi sử dụng tar SSH.
Lệnh tar là gì?
Lệnh tar là công cụ dòng lệnh trong Linux dùng để gom nhiều file và thư mục thành một file lưu trữ duy nhất, phục vụ mục đích nén, backup hoặc truyền tải dữ liệu. Lệnh tar hỗ trợ tạo, giải nén, liệt kê, cập nhật, và loại trừ các file trong archive, đồng thời kết hợp với gzip hoặc bzip2 để giảm kích thước file.

tar SSH là gì?
Tar SSH là kỹ thuật kết hợp cho phép bạn truyền các tệp và thư mục trực tiếp qua mạng mà không cần tạo các tệp nén tạm thời trên máy chủ, bằng cách sử dụng ống dẫn (pipe). Phương pháp này đặc biệt hiệu quả và tiết kiệm dung lượng lưu trữ.

Cơ chế hoạt động chính
Cơ chế chính là sử dụng dấu gạch ngang (-) trong lệnh tar để chỉ định đầu vào hoặc đầu ra là stdout (đầu ra chuẩn) hoặc stdin (đầu vào chuẩn), cho phép dữ liệu được truyền trực tiếp qua kết nối SSH:
- Bên gửi: Lệnh
tar -c…– nén dữ liệu và xuất trực tiếp ra stdout. - Ống dẫn (|): Dữ liệu nén được truyền qua kết nối SSH.
- Bên nhận: Lệnh
tar -x…– nhận dữ liệu nén từ stdin và giải nén trực tiếp.
Tại sao nên kết hợp tar và SSH?
So với các phương pháp khác như scp -r (sao chép đệ quy), cách này có nhiều ưu điểm vượt trội:
- Hiệu quả về không gian: Không cần tạo file .tar.gz tạm thời trên máy nguồn, tiết kiệm dung lượng đĩa.
- Hiệu quả về tốc độ: Đối với các thư mục có hàng ngàn file nhỏ, việc tạo một luồng dữ liệu duy nhất thường nhanh hơn đáng kể so với việc scp phải khởi tạo kết nối cho từng file.
- Linh hoạt: Bạn có toàn quyền kiểm soát các tùy chọn của tar, chẳng hạn như loại trừ các file/thư mục không cần thiết.
- Bảo mật: Toàn bộ quá trình truyền dữ liệu đều được mã hóa bởi SSH.

Khi nào nên kết hợp tar và SSH?
Trong quá trình vận hành hệ thống, việc nhận cảnh báo “Disk space 99% full” trên một server ứng dụng quan trọng là điều hoàn toàn có thể xảy ra. Khi không gian lưu trữ không còn, các quy trình backup thông thường như nén thư mục thành file .tar.gz rồi chuyển đi bằng scp sẽ không thể thực hiện, do không đủ dung lượng để tạo file backup tạm thời.
Để xử lý, giải pháp khả thi nhất là bạn hãy kết hợp công cụ tar cùng giao thức SSH. Phương pháp này cho phép truyền dữ liệu nén trực tiếp sang máy chủ backup qua mạng, loại bỏ hoàn toàn nhu cầu lưu trữ file trung gian trên server nguồn. Thủ thuật mạnh mẽ này rất tối ưu, phù hợp cho các quản trị viên hệ thống khi cần đảm bảo an toàn dữ liệu trong điều kiện giới hạn tài nguyên nghiêm trọng.

Hướng dẫn backup tệp từ xa bằng tar qua SSH
Thiết lập xác thực bằng SSH key
Để lệnh này hoạt động một cách tự động (đặc biệt là trong các script), bạn bắt buộc phải thiết lập xác thực bằng SSH key giữa server-app và server-backup. Điều này cho phép server-app kết nối đến server-backup mà không cần nhập mật khẩu.
Nếu chưa thiết lập, bạn có thể thực hiện nhanh bằng lệnh sau trên server-app:
# Lệnh này sẽ sao chép public key của bạn sang server-backup
ssh-copy-id user@server-backupBackup tệp từ máy chủ nguồn sang máy chủ đích
Trên server-app (server bị đầy dung lượng), bạn tiến hành chạy lệnh sau:
tar czf - /home/app-dir/ | ssh user@server-backup "cat > /backup/app_backup.tar.gz"Hãy cùng phân tích ý nghĩa của dòng lệnh này:
1. tar czf – /home/app-dir/
c: Create – tạo một file nén mới.z: Gzip – sử dụng thuật toán nén gzip.f-: File – Thay vì cung cấp một tên file (ví dụ: backup.tar.gz), chúng ta dùng dấu gạch ngang (-). Dấu này ra lệnh cho tar không ghi ra file trên đĩa, mà hãy đẩy toàn bộ dữ liệu nén ra luồng đầu ra tiêu chuẩn (stdout).
2. | (pipeline)
| (pipeline) là toán tử “pipe” của Linux, hoạt động như một ống dẫn, lấy toàn bộ dữ liệu từ stdout của lệnh bên trái và chuyển chúng thành luồng đầu vào tiêu chuẩn (stdin) cho lệnh bên phải.
3. ssh user@server-backup “cat > /backup/app_backup.tar.gz”
ssh user@server-backup: Lệnh ssh kết nối đến server-backup."cat > ...": Sau khi kết nối thành công, cat sẽ thực thi lệnh nằm trong dấu ngoặc kép trên server-backup. Lệnh cat có một nhiệm vụ đơn giản là đọc bất cứ dữ liệu gì được đưa vào từ stdin (chính là luồng dữ liệu nén được tar đẩy qua đường ống) và ghi (>) vào file/backup/app_backup.tar.gz.

Tóm lại
Theo dõi tiến trình với pv (Pipe Viewer)
Lệnh trên hoạt động rất tốt, nhưng có một nhược điểm là bạn sẽ tiến trình diễn ra như thế nào, có tốc độ bao nhiêu và bao giờ thì xong. Để khắc phục, hãy cài đặt pv (Pipe Viewer) và chèn vào giữa đường ống:
# Cài đặt pv (nếu chưa có)
# sudo yum install pv (trên CentOS/RHEL)
# sudo apt-get install pv (trên Debian/Ubuntu)
# Lệnh backup có thanh tiến trình
tar czf - /home/app-dir/ | pv | ssh user@server-backup "cat > /backup/app_backup.tar.gz"Bây giờ, pv sẽ hiển thị một thanh tiến trình cho bạn biết tốc độ truyền dữ liệu, tổng dung lượng đã truyền và thời gian đã trôi qua.
Khôi phục dữ liệu từ file backup
Bản backup chỉ phát huy giá trị khi có thể được phục hồi một cách dễ dàng và hiệu quả. Quy trình khôi phục dữ liệu sẽ tuân theo nguyên tắc hoạt động của quá trình backup, nhưng thực hiện theo chiều ngược lại.
# Trên server-app (nơi cần khôi phục dữ liệu)
ssh user@server-backup "cat /backup/app_backup.tar.gz" | tar xzf - -C /home/restore-dir/ssh ... "cat ...": Đọc file backup trên server-backup và đẩy nội dung của nó ra stdout.|: Dữ liệu lại được đưa qua pipeline.tar xzf - -C /home/restore-dir/: Lần này, tar nhận dữ liệu từ stdin (-), giải nén (x), và bung nó ra tại thư mục /home/restore-dir/ (-C).
Lưu ý quan trọng khi sử dụng tar SSH
- Yêu cầu hệ thống: Cả máy chủ cục bộ và máy chủ từ xa đều phải được cài đặt ssh (máy chủ từ xa cần chạy dịch vụ sshd) và lệnh tar.
- Quyền hạn: Tài khoản người dùng phải có quyền đọc/ghi tại các thư mục nguồn và thư mục đích tương ứng.
- Tính toàn vẹn: Phương pháp này hiệu quả nhưng nếu kết nối SSH bị ngắt giữa chừng, quá trình truyền dữ liệu sẽ bị dừng và tệp đích có thể không hoàn chỉnh.
Câu hỏi thường gặp
Sao lưu tar qua SSH có giúp tiết kiệm tài nguyên không?
Có, sao lưu qua tar và SSH có giúp tiết kiệm tài nguyên bằng cách nén dữ liệu trước khi truyền, giảm băng thông và thời gian truyền tải, đồng thời việc tạo tệp .tar cũng giúp gom nhiều tệp thành một, dễ quản lý và sao lưu. SSH còn có thể tự động nén dữ liệu trong quá trình truyền để tối ưu hóa hiệu suất.
Làm sao phục hồi dữ liệu từ server remote?
Bạn sử dụng lệnh sau:ssh user@remote_host "cat backup.tar.gz" | tar xz -C /restore_folderSau đó bạn giải nén trả về đúng thư mục mong muốn.
Backup có bị mất kết nối khi truyền file lớn không?
Có thể bị bị mất kết nối nếu mạng yếu, vì vậy bạn nên kiểm tra hoặc tăng thời gian chờ (timeout) trong cấu hình SSH.
Muốn tự động hóa backup thì cần làm gì?
Bạn có thể thiết lập cron job để lệnh backup chạy định kỳ, tránh phải thao tác thủ công mỗi lần cần sao lưu.
Giải pháp sao lưu trực tiếp qua mạng bằng tar SSH là lựa chọn tối ưu cho môi trường server Linux khi dung lượng ổ cứng cạn kiệt hoặc cần tự động hóa backup. Phương pháp này không chỉ giúp truyền dữ liệu an toàn, nhanh chóng mà còn loại bỏ nhu cầu lưu file backup trung gian, tiết kiệm tài nguyên và giảm rủi ro sự cố lưu trữ.




