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

05 tháng 4, 2026·4 phút đọc

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.

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

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 -r hoạ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ỏ.
  • rsync rất mạnh mẽ nhưng phức tạp, và vẫn chậm khi sao chép hàng loạt.
  • scp và 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

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 được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗