Bash + rclone · OneDrive ↔ Google Drive · Hướng dẫn vận hành mã nguồn mở

Truyền dữ liệu đám mây chỉ bằng thao tác sao chép trong Bash với rclone

rclone đã hỗ trợ sẵn việc phân trang trên đám mây, thử lại, truyền có thể tiếp tục và hàm băm của nhà cung cấp. Nhiệm vụ kỹ thuật là bao bọc các chức năng cơ bản đó trong một quy trình vận hành an toàn theo nguyên tắc đóng khi có lỗi và có tính đến dung lượng.

Cập nhật ; 20 phút đọc.

Câu trả lời ngắn gọn

FileArk là lựa chọn có quản lý đơn giản hơn cho các đợt di chuyển lớn hoặc không có người giám sát: dịch vụ thực hiện truyền trực tuyến, đã được kiểm thử với khối lượng công việc nhiều terabyte và kiểm tra từng kết quả trước khi hoàn tất. Với người vận hành muốn kiểm soát đường đi của dữ liệu bằng shell, trình bao Bash theo giấy phép MIT này sao chép các lô có giới hạn qua vùng lưu tạm cục bộ, xác minh từng byte ở cả hai chặng và không bao giờ xóa tệp nguồn.

Tại sao nên dùng trình bao cho rclone thay vì xây dựng lại ứng dụng khách cho từng nhà cung cấp

rclone cung cấp cho quy trình shell một lớp trừu tượng hoàn thiện cho các nhà cung cấp, cấu hình OAuth, phân trang, cơ chế thử lại, truyền có thể tiếp tục, kiểm soát tác vụ đồng thời, lệnh lập danh mục và lệnh xác minh. Nhờ đó, trình bao có thể tập trung vào các nguyên tắc bất biến của quá trình di chuyển: chỉ dùng lệnh sao chép, vùng lưu tạm có giới hạn, dung lượng dự phòng, danh sách tệp có tính xác định và tiến trình được lưu bền vững.

Điều đó không khiến công việc trở nên tự động. Người vận hành vẫn chịu trách nhiệm về cấu hình remote, bảo mật mã thông báo, thời gian hoạt động của mạng, giám sát tiến trình, ổ đĩa cục bộ, nhật ký, giới hạn của nhà cung cấp, xem xét các đối tượng lỗi và nghiệm thu đích. FileArk dành cho người dùng muốn quy trình đó được vận hành như một luồng công việc trực tuyến có quản lý thay vì trên máy trạm hoặc máy chủ của họ.

Tập lệnh tuyệt đối không gọi rclone move, sync, delete, purge hoặc rmdirs. Tập lệnh dùng lsf và about để thăm dò, dùng copy cho từng chặng và dùng check --download để xác minh toàn bộ từng byte. Thao tác xóa duy nhất là xóa một tệp đã được xác minh khỏi thư mục lưu tạm cục bộ.

Tải phiên bản Bash và giấy phép MIT

Tải chương trình truyền bằng Bash và rclone
Trình bao chỉ sao chép, có giới hạn lô, phần dung lượng dự phòng cục bộ và tại đích, xác minh toàn bộ từng byte, điểm kiểm tra, tùy chọn thử lại và bản demo không cần mạng.
fileark-cloud-transfer.sh · Bash 4+ · rclone · jq · giấy phép MIT

Tải giấy phép MIT xuống
Thông báo cấp phép áp dụng cho cả hai tập lệnh truyền thủ công của FileArk.
LICENSE-fileark-cloud-transfer.txt · MIT · văn bản thuần túy

Chạy bản minh họa vận hành không cần mạng

Cửa sổ dòng lệnh đang chạy tập lệnh truyền dữ liệu đám mây bằng Bash và rclone của FileArk ở chế độ demo
Bản minh họa cho thấy một lô có giới hạn đi qua cả hai ranh giới xác minh. Bản minh họa không kiểm tra cấu hình rclone, không kết nối với dịch vụ đám mây và không ghi dữ liệu từ xa.

Bạn có thể chạy bản demo một cách an toàn trước khi cài đặt rclone hoặc jq vì quá trình phân tích đối số sẽ thoát trước bước kiểm tra phần phụ thuộc. Kết quả đầu ra nêu tên các thao tác phá hủy bị cấm, hiển thị cả hai mức dung lượng dự phòng và kết thúc bằng số lượng mục đã xóa khỏi nguồn.

Kiểm tra và chạy thử nhanh tệp tải xuống
chmod +x fileark-cloud-transfer.sh
bash -n fileark-cloud-transfer.sh
./fileark-cloud-transfer.sh --demo
./fileark-cloud-transfer.sh --help

Cài đặt và cấu hình các phần phụ thuộc phục vụ vận hành

Cài đặt phiên bản rclone hiện hành theo hướng dẫn chính thức và cài đặt jq bằng trình quản lý gói của hệ điều hành. Cần có Bash 4 trở lên vì trình bao sử dụng cơ chế xử lý lỗi nghiêm ngặt và các biểu thức điều kiện hiện đại.

Chạy rclone config và tạo hai remote có tên riêng biệt, chẳng hạn onedrive: và gdrive:. Nhập ID ứng dụng khách và khóa bí mật của riêng bạn cho nhà cung cấp khi chính sách hoặc giới hạn tốc độ yêu cầu ứng dụng OAuth chuyên dụng. rclone lưu mã thông báo OAuth trong tệp cấu hình; hãy bảo vệ tệp đó bằng quyền truy cập hạn chế và tuyệt đối không đóng gói cùng tập lệnh.

Xác nhận từng remote bằng lệnh liệt kê chỉ đọc và lệnh kiểm tra hạn ngạch trước khi chạy trình bao. Dùng các đường dẫn như onedrive:Department/Archive khi phạm vi chỉ bao gồm một cây thư mục con.

Cấu hình và kiểm tra cả hai remote
rclone version
rclone config
rclone lsd onedrive:
rclone lsd gdrive:
rclone about onedrive: --json | jq
rclone about gdrive: --json | jq

Cố định một danh mục xác định trước khi di chuyển dữ liệu

Trình bao dùng rclone lsf theo cách đệ quy với ký tự tab phân tách rõ ràng và định dạng sp, tạo ra kích thước theo sau là đường dẫn. Trình bao xác thực rằng mỗi kích thước là số và mỗi đường dẫn là tương đối, sau đó loại trừ các đường dẫn đã có trong điểm kiểm tra được xác minh.

Phiên bản Bash từ chối tên tệp chứa ký tự tab, ký tự xuống dòng kiểu carriage return hoặc ký tự dòng mới vì danh sách --files-from-raw phân tách bằng dòng mới không thể biểu diễn chúng một cách rõ ràng. Hãy dùng phiên bản Python hoặc định dạng danh mục chuyên dụng khi có những tên như vậy.

Điểm kiểm tra theo đường dẫn được thiết kế có chủ đích để đơn giản và dễ kiểm tra. Cơ chế này giả định đường dẫn nguồn vẫn ổn định trong suốt lần chạy. Nếu có thể, hãy tạm dừng thao tác ghi vào nguồn; hoặc tạo lại và đối chiếu danh mục khi dự kiến có thay đổi đồng thời.

Lệnh cơ bản để lập danh mục mà trình bao sử dụng
rclone lsf "$SOURCE" \
  --recursive \
  --files-only \
  --format "sp" \
  --separator 
    
  

\t' > "$inventory"

Dừng trước khi một lô sử dụng hết phần dung lượng dự phòng

Số byte trống cục bộ được lấy từ df trên hệ thống tệp lưu tạm. Số byte trống tại đích được lấy từ rclone about --json: tập lệnh dùng free nếu có; nếu không, dùng total trừ used. Tập lệnh kiểm tra tổng số byte đang chờ trước khi bắt đầu và kiểm tra lại cả dung lượng cục bộ lẫn dung lượng đích trước mỗi lô.

Một số nhà cung cấp hoặc loại tài khoản không công bố hạn ngạch hữu hạn thông qua rclone. Trình bao sẽ hiển thị hạn chế này và tiếp tục hoạt động theo cơ chế thực thi giới hạn của nhà cung cấp. Hãy xem đây là một yêu cầu giám sát, không phải bằng chứng cho thấy có đủ dung lượng.

Giới hạn lô không phải là mức tối đa tuyệt đối cho một đối tượng. Một tệp lớn hơn kích thước lô đã cấu hình có thể tự tạo thành một lô riêng, vì vậy dung lượng trống cục bộ phải đủ cho tệp lớn nhất cộng với phần dự phòng. Việc xác minh đầy đủ tại đích sẽ đọc dữ liệu từ đích nhưng không giữ thêm một bản sao cục bộ thứ hai trong phiên bản rclone.

Xác minh cả hai phía của ranh giới lưu tạm cục bộ

Mỗi lô đi qua hai chặng độc lập. Đầu tiên, rclone sao chép các đường dẫn nguồn đã chọn vào vùng lưu tạm cục bộ bằng --ignore-existing, sau đó check --download đọc cả hai phía và so sánh nội dung thực tế. Tiếp theo, rclone sao chép các đường dẫn đã lưu tạm đó đến đích và lặp lại bước kiểm tra toàn bộ từng byte tương tự.

--ignore-existing giúp các lần chạy bị gián đoạn không gây phá hủy dữ liệu: đối tượng đã tồn tại sẽ không bị ghi đè. Quá trình xác minh vẫn phải thành công trước khi đường dẫn được ghi vào điểm kiểm tra. Nếu nội dung hiện có tại đích khác biệt, rclone check sẽ thất bại và cơ chế xử lý lỗi nghiêm ngặt của Bash sẽ dừng lần chạy.

Việc dùng --download chậm hơn và tiêu tốn các thao tác đọc/truyền dữ liệu ra của nhà cung cấp, nhưng giúp tránh việc chỉ dựa vào khả năng hai nhà cung cấp có hỗ trợ chung một thuật toán băm hay không. Lệnh này không sửa đổi dữ liệu ở bất kỳ phía nào.

Hai chặng sao chép và xác minh
rclone copy "$SOURCE" "$STAGING_DIR" \
  --files-from-raw "$batch_list" \
  --ignore-existing --retries 6 --low-level-retries 20

rclone check "$SOURCE" "$STAGING_DIR" \
  --files-from-raw "$batch_list" --one-way --download

rclone copy "$STAGING_DIR" "$DESTINATION_ROOT" \
  --files-from-raw "$batch_list" \
  --ignore-existing --retries 6 --low-level-retries 20

rclone check "$STAGING_DIR" "$DESTINATION_ROOT" \
  --files-from-raw "$batch_list" --one-way --download

Chạy quy trình từ OneDrive sang Google Drive với vùng lưu tạm giới hạn

Ví dụ này giữ nguyên 15 GiB dung lượng ổ đĩa cục bộ làm dự phòng, giữ 10 GiB trống trên Google Drive, giới hạn một lô thông thường ở mức 8 GiB hoặc 200 tệp và dùng bốn tác vụ truyền đồng thời. Nội dung đích được ghi vào một thư mục mới có ngày tháng trong tên.

Trước tiên, hãy dùng --dry-run. Tùy chọn này kiểm kê nguồn và kiểm tra trước hạn ngạch ở đích mà không tải xuống hay tải lên. Trình bao hiển thị tổng số byte đang chờ xử lý; bạn nên đối chiếu con số này với phạm vi di chuyển trước khi chạy lô thực tế đầu tiên.

Kiểm tra trước, rồi thực thi với cùng phạm vi
./fileark-cloud-transfer.sh \
  --source onedrive: \
  --destination gdrive: \
  --destination-folder "OneDrive archive 2026-07-25" \
  --staging-dir /srv/fileark-staging \
  --state-file ./onedrive-to-google-verified.txt \
  --batch-gib 8 \
  --batch-files 200 \
  --local-reserve-gib 15 \
  --destination-reserve-gib 10 \
  --transfers 4 \
  --checkers 8 \
  --dry-run

# Remove only --dry-run after reviewing the preflight.

Đảo ngược hướng mà không tái sử dụng trạng thái

Trình bao không phụ thuộc vào nhà cung cấp vì rclone đảm nhiệm các bộ điều hợp từ xa. Hãy hoán đổi các đối số từ xa để sao chép Google Drive sang OneDrive, đồng thời đặt cho lần chạy đó một thư mục đích, đường dẫn lưu tạm và tệp điểm kiểm tra mới.

Các định dạng gốc của Google như Docs, Sheets, Slides và những định dạng ảo khác yêu cầu cấu hình xuất của rclone và cần được xem xét kỹ. Hãy dùng một tập dữ liệu thử nghiệm để xác nhận phần mở rộng của tệp được xuất và cách thức chuyển đổi. Việc sao chép bằng shell không bảo toàn lịch sử cộng tác của Google, lối tắt, quyền hay siêu dữ liệu dành riêng cho Microsoft.

Google Drive sang OneDrive
./fileark-cloud-transfer.sh \
  --source gdrive: \
  --destination onedrive: \
  --destination-folder "Google archive 2026-07-25" \
  --staging-dir /srv/google-staging \
  --state-file ./google-to-onedrive-verified.txt \
  --batch-gib 8 \
  --local-reserve-gib 15

Chỉ ghi điểm kiểm tra sau khi xác minh đích

Sau khi bước kiểm tra đích thoát thành công, trình bao ghi nối tiếp từng đường dẫn tương đối vào điểm kiểm tra dạng văn bản thuần túy. Sau đó, trình bao xóa tệp đó khỏi vùng lưu tạm cục bộ và xóa các thư mục cục bộ trống. Remote nguồn không bị thay đổi.

Trong một lần chạy, điểm kiểm tra chỉ cho phép ghi nối tiếp và dễ kiểm tra bằng các công cụ tiêu chuẩn. Hãy lưu giữ điểm kiểm tra cùng dòng lệnh, phiên bản rclone, dấu vân tay cấu hình, danh mục, nhật ký, dấu thời gian và ghi chú nghiệm thu. Không chỉnh sửa điểm kiểm tra để bỏ qua lỗi trừ khi tệp đích đã được xác minh độc lập.

Điểm kiểm tra chỉ dựa trên đường dẫn không thể phát hiện một đối tượng nguồn có nội dung thay đổi nhưng đường dẫn không đổi. Đối với tập dữ liệu có thể thay đổi, hãy tạm dừng hoạt động ghi, thu thập riêng ID của nhà cung cấp và siêu dữ liệu sửa đổi, hoặc dùng điểm kiểm tra nghiêm ngặt hơn dựa trên ID và kích thước của phiên bản Python. Đối với quá trình di chuyển dữ liệu thuộc diện quản lý hoặc có tính cộng tác, hãy dùng quy trình được quản lý với cơ chế kiểm soát thay đổi rõ ràng.

Coi mọi mã thoát khác 0 là một lô chưa được xử lý xong

  • Chế độ nghiêm ngặt sẽ thoát khi một lệnh hoặc pipeline thất bại hay gặp biến chưa được đặt; thư mục danh mục tạm thời sẽ tự động bị xóa.
  • rclone thử lại các tác vụ truyền gặp lỗi tạm thời, nhưng lỗi kéo dài về quyền, hạn ngạch, mạng, xung đột hoặc tính toàn vẹn sẽ dừng lô.
  • Các tệp đã lưu tạm nhưng chưa được ghi vào điểm kiểm tra vẫn có thể được kiểm tra; một lần chạy lại giống hệt sẽ dùng --ignore-existing trước khi kiểm tra từng byte của chúng.
  • Tệp khác biệt ở đích sẽ không bao giờ bị ghi đè. Hãy giải quyết xung đột hoặc chọn một thư mục gốc đích trống.
  • Không chuyển một tác vụ sao chép thất bại thành rclone sync hoặc move. Các lệnh đó có cơ chế xóa khác.
  • Giữ lại nhật ký và điểm kiểm tra cho đến khi hoàn tất nghiệm thu đích thủ công.

Bảo mật máy chủ đóng vai trò tầng dữ liệu

Máy chủ lưu tạm sẽ tạm thời chứa các bản sao có thể đọc được của dữ liệu nguồn và các mã thông báo làm mới OAuth. Hãy sử dụng mã hóa toàn bộ ổ đĩa, quyền truy cập tệp nghiêm ngặt, một tài khoản hệ điều hành chuyên dụng, các phần phụ thuộc đã được vá, quyền truy cập quản trị viên có kiểm soát và chính sách sao lưu có mã hóa không vô tình lưu giữ nội dung trong vùng lưu tạm.

Tránh đưa thông tin bí mật vào dòng lệnh vì danh sách tiến trình và lịch sử shell có thể làm lộ chúng. Cấu hình được bảo vệ của rclone có thể che giấu mã thông báo khi được lưu trữ, nhưng không thể thay thế cho việc bảo mật máy chủ. Sau khi nghiệm thu quá trình di chuyển, hãy xóa dữ liệu mã thông báo và phần còn lại trong vùng lưu tạm theo chính sách lưu giữ của bạn.

Theo dõi nhật ký kiểm tra của nhà cung cấp, lưu lượng mạng đi ra, tình trạng ổ đĩa, số inode còn khả dụng, trạng thái tiến trình và đầu ra của rclone. Chỉ để cửa sổ dòng lệnh mở không phải là giám sát tiến trình; hãy dùng trình quản lý dịch vụ hoặc trình ghép kênh đầu cuối được phê duyệt và lưu nhật ký bền vững.

Hoàn tất quá trình di chuyển bằng bằng chứng, không chỉ bằng một lệnh báo thành công

  • Lưu trữ danh mục đã cố định, lệnh chính xác, giá trị tổng kiểm của tập lệnh, phiên bản rclone, dấu vân tay cấu hình remote và điểm kiểm tra đã xác minh.
  • Đối chiếu số lượng tệp và số byte đã biết theo từng thư mục, không chỉ theo tổng số của ổ đĩa.
  • Mở và kiểm tra một mẫu dựa trên rủi ro gồm các tài liệu lớn, nhỏ, cũ, mới, có Unicode, nằm sâu trong nhiều cấp thư mục, đã lưu trữ và đã chuyển đổi.
  • Kiểm tra quyền truy cập đích từ các tài khoản người dùng đại diện và tạo lại riêng các thiết lập chia sẻ cần thiết.
  • Xem xét các gói, lối tắt, liên kết và tài liệu gốc bị bỏ qua, cũng như các xung đột và cảnh báo của nhà cung cấp.
  • Duy trì một khoảng thời gian giữ dữ liệu trùng lặp ở nguồn và xin chủ sở hữu chấp thuận rõ ràng trước mọi quyết định lưu giữ hoặc xóa sau đó.

Câu hỏi thường gặp

Tại sao tập lệnh Bash dùng rclone copy thay vì sync?

Thao tác sao chép không xóa đối tượng nguồn hay xóa các đối tượng đích không có ở nguồn. Đồng bộ hóa có cơ chế đối chiếu và xóa khác, vì vậy chủ đích không nằm trong quy trình này.

rclone check --download có thay đổi dữ liệu trên một trong hai đám mây không?

Không. Lệnh này đọc và so sánh nội dung tệp. Tập lệnh dùng lệnh đó sau mỗi chặng sao chép để một đường dẫn chỉ được ghi nhận vào điểm kiểm tra sau khi các byte ở đích khớp với các byte trong vùng lưu tạm.

Điều gì xảy ra khi đích đã chứa một tệp?

Quá trình sao chép dùng --ignore-existing, sau đó xác minh toàn bộ từng byte. Một đối tượng giống hệt có thể vượt qua bước xác minh; đối tượng khác biệt sẽ khiến bước kiểm tra thất bại. Tập lệnh không bao giờ ghi đè lên tệp xung đột.

Tập lệnh có thể xử lý tệp lớn hơn một lô không?

Có. Một tệp quá lớn sẽ tạo thành một lô riêng. Hệ thống tệp lưu tạm phải có đủ chỗ cho tệp đó cùng với dung lượng dự phòng cục bộ đã cấu hình.

Quy trình này có di chuyển quyền, phiên bản hoặc dữ liệu cộng tác gốc trên đám mây không?

Không. Quy trình này sao chép nội dung và đường dẫn tệp thông qua rclone. Việc kiểm soát quyền truy cập, phiên bản, nhãn, nhận xét, lối tắt, liên kết, quy tắc lưu giữ và hành vi gốc của nhà cung cấp cần được lập kế hoạch và xác minh riêng.

Các tài nguyên chính thức được sử dụng cho hướng dẫn này

Đọc hướng dẫn