SCP vs RSYNC: chọn lệnh nào để copy dữ liệu qua SSH?
Bài này giúp bạn chọn nhanh giữa scp và rsync khi cần sao chép dữ liệu giữa local ↔ server hoặc server ↔ server.
Nếu bạn đang ở trong 1 server (ssh), thì server bạn đang làm việc đó xem như local. Và dùng hướng dẫn local ↔ server.
Nếu bạn đang ở 1 máy local, và copy dữ liệu giữa 2 server khác thì sử dụng hướng dẫn local ↔ server
Có ví dụ sẵn dùng với cú pháp root@ip_server.

1. Tóm tắt khác biệt
| Tiêu chí | scp | rsync |
|---|---|---|
| Nhanh-gọn, có sẵn | ✅ Rất đơn giản, hầu như máy nào cũng có | ✅ Phổ biến, nhưng nhiều tuỳ chọn hơn |
| Tiếp tục lại (resume) | ❌ Không | ✅ Có (chỉ gửi phần khác biệt) |
| Đồng bộ 1 chiều (chỉ copy thay đổi) | ❌ | ✅ |
| Giữ quyền/timestamp/symlink | ⚠️ Cần -p/-r | ✅ Dùng -a (archive) |
| Theo dõi tiến trình | ⚠️ Hạn chế (-v) | ✅ --progress, --info=progress2 |
| Nén khi truyền | ✅ -C | ✅ -z |
| Loại trừ file/thư mục | ❌ | ✅ --exclude, --exclude-from |
| Xoá ở đích các file không còn ở nguồn | ❌ | ✅ --delete |
| Giới hạn băng thông | ✅ -l (kbit/s) | ✅ --bwlimit |
| Copy server → server trực tiếp | ⚠️ Có thể dùng scp -3 | ✅ Rất tiện (chạy từ local) |
Khi nào dùng nhanh:
Việc nhỏ, one-shot, ít cần tuỳ chọn: dùng
scp.Đồng bộ hoá, dữ liệu lớn, cần tiếp tục/gỡ lỗi/chính sách loại trừ: dùng
rsync.
2. Quy tắc “đường gạch chéo” quan trọng
Với
rsync:rsync SRC DEST→ copy cả thư mục SRC vào DEST.rsync SRC/ DEST→ copy nội dung bên trong SRC vào DEST (không tạo thêm lớp thư mục).
Với
scp: thường chỉ cần nhớ-rkhi copy thư mục.
3. Ví dụ thực tế
Giả sử local của bạn là máy CRAWL (WSL/Ubuntu), thư mục đích local:
/mnt/e/Folder1/Subfolder1/
Server làroot@ip_server.
SSH mặc định port 22 (nếu khác, xem phần “Cổng SSH khác 22”).
3.1. Local → Server (đẩy lên server)
SCP (nhanh-gọn, one-shot):
RSYNC (khuyên dùng cho đồng bộ):
Một số tuỳ chọn hay dùng với rsync khi đẩy lên:
3.2. Local ← Server (tải về local)
SCP:
RSYNC (an toàn & có resume):
3.3. Server → Server (truyền giữa 2 server, chạy lệnh từ local)
Giả sử có server A và server B:
root@ip_server_Aroot@ip_server_B
SCP (qua máy local làm trung gian):
RSYNC (tiện và linh hoạt):
Mẹo nâng cao: Nếu hai server thấy nhau trực tiếp (A SSH được sang B), có thể SSH vào A rồi chạy rsync A→B ngay trên A để đường truyền không đi qua local.
4. Dùng cổng SSH khác 22
SCP:
RSYNC:
5. Mẹo & tình huống thường gặp
Tiếp tục truyền/Resume: dùng rsync (scp không resume tốt).
Giảm tải mạng:
-C(scp),-z(rsync) để nén; giới hạn băng thông:scp -l 5000(kbit/s) hoặcrsync --bwlimit=5m.Giữ nguyên quyền & thời gian:
scp -p, hoặc tốt hơnrsync -a.Loại trừ file/thư mục: chỉ rsync:
--exclude "node_modules"hoặc--exclude-from list.txt.Xoá ở đích cho khớp nguồn:
rsync --delete(cẩn trọng, test trước bằng--dry-run).Xem thử trước khi chạy thật:
rsync --dry-run -avz SRC/ DEST/.Đường dẫn có khoảng trắng: đặt trong dấu nháy
"..."hoặc escape\.Fingerprint/Host key lần đầu: kiểm tra kỹ để tránh MITM; gõ
yeskhi đúng server.Lỗi quyền ghi: kiểm tra quyền thư mục đích (ví dụ
/mnt/e/...trên WSL phải có quyền ghi).Tiến trình rõ ràng:
rsync --info=progress2hiển thị tổng quan, dễ theo dõi file lớn.
6. Quyết định nhanh
Copy nhanh 1 lần, ít file, không cần đồng bộ: dùng
scp.Dự án crawl/backup, dữ liệu lớn, lặp lại nhiều lần, cần loại trừ & resume: dùng
rsync.Truyền server ↔ server: ưu tiên
rsync(hoặcscp -3khi cần thật đơn giản).
7. Mẫu lệnh “copy-paste” theo tình huống
Local → Server
Local ← Server
Server → Server (chạy từ local)
- Đăng nhập để gửi ý kiến