Sử dụng lệnh SCP và RSYNC trên Linux

Tác giả: 14/10/2022

I. Giới thiệu

Trong quá trình sử dụng VPS/Server chắc hẳn có lúc bạn cần di chuyển dữ liệu từ VPS này sang VPS khác hoặc từ Server này sang Server khác.

Bài viết này mình sẽ giới thiệu cho các bạn 2 cách để di chuyển dữ liệu qua lại giữa 2 máy chủ

II. Các bước thực hiện

1. Sử dụng SCP để di chuyển dữ liệu

Bước 1: Cài đặt SCP

SCP (Secure Copy) là một ứng dụng trong Linux sử dụng giao thức SSH để copy dữ liệu qua lại giữa 2 máy chủ Linux. Trước khi thực hiện bạn cần cài SCP

Trên Debian/Ubuntu

apt-get install scp

Trên RHEL/CentOS

yum install scp -y

Bước 2: Sử dụng SCP

Cú pháp thực hiện

scp -option source_file username@IP_host:/destination_folder

Ý nghĩa:

  • scp: Lệnh thực hiện
  • -option: Các tùy chọn phụ
  • source_file: File/Folder cần copy
  • username@IP_host: Tên user và IP của máy chủ nhận file (Ví dụ: root@192.168.1.100)
  • destination_folder: Thư mục đích cần copy đến

Một số option quan trọng cần dùng:

  • -P: Port xác định chính xác cổng vào của server (port mặc định của TCP là 22) (Ví dụ máy đích port ssh mặc định là 999 thì bạn sẽ cần nhập là -P 999)
  • -c: Cipher giúp bạn xác định thuật toán mã hóa bạn muốn dùng. Một số giá trị bạn có thể đưa vào là aes256-ctr, aes256-cbc, blowfish-cbc, arcfour, arcfour128, cast128-cbc, aes128-ctr, aes128-cbc, aes192-ctr, aes192-cbc, 3des-cbc. Lựa chọn mặc định trong cấu hình là AnyStdCipher
  • -q: Vận hành trong chế độ im lặng, chỉ khi có lỗi nghiêm trọng mới hiện lên
  • -r: Recursive copying, có nghĩa là bao gồm các thư mục con nếu muốn copy cả folder
  • -4 hoặc -6 được chọn khi bạn muốn chọn phiên bản IPv4 hoặc IPv6
  • -p là preserve dùng để lưu lại thời gian chỉnh sửa và thuộc tính của file
  • -u sẽ xóa file nguồn sau khi chuyển đổi hoàn tất
  • -c giúp nén dữ liệu khi truyền

Ví dụ: Ở đây mình có 2 VPS là 172.16.3.150 và 172.16.3.151

  • Máy nguồn: 172.16.3.150
  • Máy đích: 172.16.3.151

Tại máy nguồn mình copy file tubt1.txt tại thư mục /mnt đến máy đích với thư mục /home/scp

Cú pháp

scp /mnt/tubt1.txt root@172.16.3.151:/home/scp/

2. Sử dụng Rsync để đồng bộ dữ liệu

Ngoài SCP ra ta có thể sử dụng Rsync để có thể copy và đồng bộ dữ liệu máy chủ nội bộ hoặc máy chủ từ xa. Với máy chủ cài đặt Rsync thì đều có thể di chuyển hoặc đồng bộ dữ liệu giữa các máy chủ với nhau

Bước 1: Cài đặt Rsync trên Linux

Trên Debian/Ubuntu:

apt-get install rsync

Trên RHEL/CentOS:

yum install rsync -y

Bước 2: Sử dụng Rsync

Cú pháp:

rsync -option source_file username@IP_host:/destination_folder

Ý nghĩa:

  • Rsync: Lệnh thực hiện
  • -option: Các tùy chọn phụ
  • source_file: File/Folder cần copy/đồng bộ
  • username@IP_host: Tên user và IP của máy chủ nhận file (Ví dụ: root@192.168.1.100)
  • /destination_folder: Thư mục đích cần copy đến

Một số option quan trọng trong rsync

  • -v: Hiển thị trạng thái kết quả
  • -r: Copy dữ liệu nhưng không đảm bảo thông số của file và thư mục (Ví dụ như quyền)
  • -a: Cho phép copy dữ liệu, đồng thời giữ nguyên được thông số của thư mục và file
  • -z: Nén dữ liệu khi transfer, tiết kiệm băng thông tuy nhiên sẽ tốn thời gian để nén sau đó mới thực hiện transfer
  • -e ‘ssh -p PORT’: Tùy chọn khi sử dụng port ssh riêng ( Ví dụ port đích là 999 thì bạn sẽ cần nhập là -e ‘ssh -p 999’)
  • -delete: Xóa dữ liệu ở destination nếu source không tồn tại dữ liệu đó
  • -exclude: Loại trừ những dữ liệu không muốn truyền đi, nếu bạn cần loại ra nhiều file hoặc folder ở nhiều đường dẫn khác nhau thì mỗi cái bạn phải thêm -exclude tương ứng

Ví dụ:

Tại máy nguồn mình sẽ thực hiện tạo file tubt.txt tại thư mục /mnt và thêm vào nội dung như bên dưới:

[root@tubt mnt]# vi tubt.txt
[root@tubt mnt]# cat tubt.txt
Tu123
Tu456
Tu789

Tại máy đích, mình sẽ thực hiện tạo file tubt.txt tại thư mục /home/rsync và thêm vào nội dung như bên dưới:

[root@tubt-client1 rsync]# vi tubt.txt
[root@tubt-client1 rsync]# cat tubt.txt
Tu123

Thực hiện đồng bộ file dữ liệu của file tubt.txt từ máy nguồn sang máy đích

Cú pháp:

rsync -av /mnt/tubt.txt root@172.16.3.151:/home/rsync

[root@tubt mnt]# rsync -av /mnt/tubt.txt root@172.16.3.151:/home/rsync
sending incremental file list
tubt.txt

sent 111 bytes received 41 bytes 304.00 bytes/sec
total size is 18 speedup is 0.12

Tại máy chủ đích kiểm tra dữ liệu của file tubt.txt đã được đồng bộ giống với file tubt.txt tại máy chủ nguồn hay chưa

[root@tubt-client1 rsync]# vi tubt.txt
[root@tubt-client1 rsync]# cat tubt.txt
Tu123
[root@tubt-client1 rsync]# cat tubt.txt
Tu123
Tu456
Tu789

III. Tổng kết

Hy vọng bài viết này mang lại nhiều điều hữu ích cho các bạn trong quá trình di chuyển, đồng bộ dữ liệu giữa các máy chủ với nhau một cách an toàn và dễ dàng. Giúp bạn tiết kiệm được nhiều thời gian cũng như chủ động trong việc quản trị máy chủ

Chúc các bạn thành công và hẹn gặp lại các bạn trong các bài viết tiếp theo tại wiki.nhanhoa.com

Trả lời