Fast-copy: Cách tôi xây dựng công cụ sao chép tệp tin vượt trội hơn cp và rsync
Với nỗi thất vọng về tốc độ của các lệnh truyền thống như `cp` và `rsync`, một kỹ sư hệ thống đã phát triển **fast-copy** – công cụ dòng lệnh (CLI) bằng Python giúp sao chép dữ liệu ở tốc độ tối đa. Công cụ này hoạt động bằng cách sắp xếp tệp tin theo vị trí vật lý trên đĩa để đọc tuần tự, hỗ trợ khử trùng lặp và streaming qua SSH, mang lại hiệu suất cao hơn gấp 3 lần so với SFTP.

Là một kỹ sư hệ thống, tôi dành rất nhiều thời gian để sao chép tệp tin — từ sao lưu ra ổ USB, truyền dữ liệu tới NAS, đến di chuyển dữ liệu giữa các máy chủ qua SSH. Và tôi liên tục gặp phải những trở ngại giống nhau:
- Lệnh
cp -rhoạt động cực kỳ chậm trên ổ cứng HDD khi phải xử lý hàng chục nghìn tệp tin nhỏ. rsyncrất mạnh mẽ nhưng phức tạp, và vẫn chậm khi sao chép hàng loạt.scpvà SFTP thường bị giới hạn tốc độ ở mức 1-2 MB/s trong khi quá trình truyền có thể nhanh hơn nhiều.- Không công cụ nào báo trước cho bạn biết đích đến có đủ dung lượng trống hay không.
Vì vậy, tôi đã xây dựng fast-copy — một công cụ dòng lệnh (CLI) bằng Python có khả năng sao chép tệp tin ở tốc độ tuần tự tối đa của đĩa.
Ý tưởng cốt lõi
Khi bạn chạy lệnh cp -r, các tệp tin sẽ được đọc theo thứ tự thư mục — về cơ bản là ngẫu nhiên trên đĩa. Mỗi lần tìm kiếm tệp (seek) trên ổ HDD tốn mất 5-10ms. Nhân con số đó với 60.000 tệp tin và bạn sẽ mất hàng giờ chỉ để đầu đọc di chuyển.
fast-copy làm việc khác đi: nó phân giải độ dời vật lý (physical disk offset) của mọi tệp tin trước khi sao chép. Trên Linux, nó sử dụng FIEMAP, trên macOS là fcntl, và trên Windows là FSCTL. Sau đó, nó sắp xếp các tệp tin theo vị trí khối (block position) và đọc chúng một cách tuần tự.
Chỉ riêng việc đó đã tạo ra sự khác biệt lớn. Nhưng còn nhiều điều hơn thế nữa.
Khử trùng lặp (Deduplication)
Nhiều thư mục chứa các tệp tin trùng lặp — chẳng hạn như các thư mục node_modules giữa các dự án, tệp tải xuống đã lưu trong bộ nhớ đệm, hoặc các bản sao lưu. fast-copy sử dụng thuật toán băm (hash) mỗi tệp tin với xxHash-128 (hoặc SHA-256 làm phương án dự phòng), sao chép mỗi tệp duy nhất một lần, và tạo các liên kết cứng (hard links) cho các bản sao.
Trong bài kiểm tra của tôi với 92K tệp tin, hơn một nửa là trùng lặp — giúp tiết kiệm 379 MB và rất nhiều thời gian nhập/xuất (I/O).
Công cụ này cũng duy trì một cơ sở dữ liệu SQLite của các giá trị băm, do đó các lần sao chép lặp lại đến cùng một đích sẽ bỏ qua các tệp đã được sao chép trong các lần chạy trước.
Streaming qua SSH
Đây là phần tôi tự hào nhất. Thay vì sử dụng SFTP (vốn có chi phí giao thức đáng kể), fast-copy truyền các tệp tin dưới dạng các lô tar khoảng 100 MB qua các kênh SSH thô.
Bên phía máy chủ từ xa sẽ chạy lệnh tar xf - và các tệp sẽ được ghi trực tiếp lên đĩa — không có tệp tạm, không có chi phí phụ của SFTP. Điều này thậm chí còn hoạt động trên các máy chủ đã tắt SFTP, như một số cấu hình NAS Synology.
Ba chế độ được hỗ trợ:
- Local → Remote (Từ cục bộ đến máy chủ)
- Remote → Local (Từ máy chủ về cục bộ)
- Remote → Remote (Từ máy chủ này sang máy chủ khác, relay qua máy của bạn)
Kết quả thực tế
Sao chép cục bộ — 92K tệp tin ra USB:
- 44.718 tệp tin duy nhất đã được sao chép + 47.146 liên kết cứng được tạo.
- 509,8 MB dữ liệu được ghi, 378,9 MB được tiết kiệm nhờ khử trùng lặp.
- Hoàn thành trong 17,9 giây với tốc độ 28,5 MB/s.
- Tất cả tệp tin được xác minh sau khi sao chép.
Từ xa về cục bộ — 92K tệp tin qua LAN:
- 509,8 MB được tải xuống trong 14 phút.
- 46.951 bản trùng lặp được phát hiện, tiết kiệm 378,5 MB dung lượng truyền tải.
- Nhanh hơn SFTP 3 lần.
Bắt đầu nhanh
Cách đơn giản nhất — chỉ cần chạy script Python:
python fast_copy.py /nguon /dich
Hoặc tải xuống tệp nhị phân độc lập (standalone binary) (không cần cài Python) từ trang Releases — có sẵn cho Linux, macOS và Windows.
Để truyền tải qua SSH, hãy cài đặt paramiko:
pip install paramiko
Để băm dữ liệu nhanh hơn:
pip install xxhash
Liên kết
- GitHub: https://github.com/gekap/fast-copy
- Giấy phép: Apache 2.0
Tôi rất mong muốn nhận được phản hồi — đặc biệt là từ những ai đang xử lý việc truyền tải tệp tin lớn hoặc quy trình sao lưu. Bạn đang sử dụng công cụ nào hiện nay? Và chúng còn thiếu những gì?
Bài viết liên quan

Phần mềm
Anthropic ra mắt Claude Opus 4.7: Nâng cấp mạnh mẽ cho lập trình nhưng vẫn thua Mythos Preview
16 tháng 4, 2026

Công nghệ
Qwen3.6-35B-A3B: Quyền năng Lập trình Agentic, Nay Đã Mở Cửa Cho Tất Cả
16 tháng 4, 2026

Công nghệ
Spotify thắng kiện 322 triệu USD từ nhóm pirate Anna's Archive nhưng đối mặt với bài toán thu hồi
16 tháng 4, 2026
