Bash + rclone · OneDrive ↔ Google Drive · Panduan operasional sumber terbuka

Transfer Cloud Khusus Penyalinan di Bash dengan rclone

rclone sudah memahami paginasi cloud, percobaan ulang, transfer yang dapat dilanjutkan, dan hash penyedia. Tugas rekayasanya adalah membungkus fungsi-fungsi dasar tersebut dalam prosedur operasional yang berhenti dengan aman jika terjadi kegagalan dan mempertimbangkan kapasitas.

Diperbarui ; 20 menit membaca.

Jawaban singkat

FileArk adalah pilihan terkelola yang lebih sederhana untuk migrasi besar atau tanpa pengawasan: FileArk menjalankan transfer secara online, telah diuji dengan beban kerja multiterabyte, dan memeriksa setiap hasil sebelum selesai. Bagi operator yang menginginkan jalur data yang dikendalikan melalui shell, wrapper Bash berlisensi MIT ini menyalin batch terbatas melalui staging lokal, memverifikasi kedua tahap byte demi byte, dan tidak pernah menghapus file sumber.

Mengapa membungkus rclone alih-alih membangun ulang setiap klien penyedia

rclone menyediakan abstraksi penyedia yang matang, konfigurasi OAuth, paginasi, mekanisme percobaan ulang, transfer yang dapat dilanjutkan, kontrol konkurensi, perintah inventaris, dan perintah verifikasi untuk alur kerja shell. Dengan demikian, wrapper dapat berfokus pada prinsip tetap migrasi: perintah yang hanya menyalin, staging terbatas, cadangan kapasitas, daftar file deterministik, dan progres yang tersimpan secara persisten.

Hal tersebut tidak menjadikan pekerjaan ini otomatis. Operator tetap bertanggung jawab atas konfigurasi remote, keamanan token, ketersediaan jaringan, pengawasan proses, disk lokal, log, batas penyedia, peninjauan objek yang gagal, dan penerimaan hasil di tujuan. FileArk tersedia bagi pengguna yang ingin prosedur tersebut dijalankan sebagai alur kerja online terkelola, bukan di workstation atau server mereka.

Skrip secara eksplisit tidak pernah menjalankan rclone move, sync, delete, purge, atau rmdirs. Skrip menggunakan lsf dan about untuk penemuan, copy untuk setiap tahap, serta check --download untuk verifikasi seluruh byte. Satu-satunya penghapusan adalah file terverifikasi dari direktori staging lokal.

Unduh edisi Bash dan lisensi MIT

Unduh program transfer Bash dan rclone
Wrapper khusus penyalinan dengan batas batch, cadangan kapasitas lokal dan tujuan, verifikasi seluruh byte, checkpoint, kontrol percobaan ulang, serta demo tanpa jaringan.
fileark-cloud-transfer.sh · Bash 4+ · rclone · jq · Lisensi MIT

Unduh lisensi MIT
Pemberitahuan izin yang mencakup kedua skrip transfer manual FileArk.
LICENSE-fileark-cloud-transfer.txt · MIT · teks biasa

Jalankan demo operator tanpa jaringan

Terminal yang menjalankan skrip transfer cloud Bash dan rclone FileArk dalam mode demo
Demo ini menunjukkan satu batch terbatas yang melewati kedua batas verifikasi. Demo tidak memeriksa konfigurasi rclone, menghubungi layanan cloud, atau menulis data jarak jauh.

Demo aman dijalankan sebelum rclone atau jq diinstal karena penguraian argumen berhenti sebelum pemeriksaan dependensi. Output menyebutkan operasi destruktif yang dilarang, menampilkan kedua cadangan kapasitas, dan diakhiri dengan jumlah penghapusan dari sumber.

Periksa dan uji cepat hasil unduhan
chmod +x fileark-cloud-transfer.sh
bash -n fileark-cloud-transfer.sh
./fileark-cloud-transfer.sh --demo
./fileark-cloud-transfer.sh --help

Instal dan konfigurasikan dependensi operator

Instal rilis rclone terkini dengan mengikuti petunjuk resminya, lalu instal jq melalui pengelola paket sistem operasi Anda. Bash 4 atau versi lebih baru diperlukan karena skrip pembungkus menggunakan penanganan kesalahan yang ketat dan ekspresi kondisional modern.

Jalankan rclone config dan buat dua remote dengan nama berbeda, misalnya onedrive: dan gdrive:. Masukkan ID klien dan rahasia klien penyedia Anda sendiri jika kebijakan atau batas laju mengharuskan aplikasi OAuth khusus. rclone menyimpan token OAuth dalam file konfigurasinya; lindungi file tersebut dengan izin akses yang ketat dan jangan pernah menyertakannya bersama skrip.

Konfirmasikan setiap remote dengan perintah daftar hanya-baca dan kuota sebelum menjalankan wrapper. Gunakan jalur seperti onedrive:Department/Archive jika cakupannya hanya mencakup satu subpohon.

Konfigurasikan dan periksa kedua remote
rclone version
rclone config
rclone lsd onedrive:
rclone lsd gdrive:
rclone about onedrive: --json | jq
rclone about gdrive: --json | jq

Bekukan inventaris deterministik sebelum memindahkan byte

Wrapper menggunakan rclone lsf secara rekursif dengan pemisah tab eksplisit dan format sp, yang menghasilkan ukuran diikuti jalur. Wrapper memvalidasi bahwa setiap ukuran berupa angka dan setiap jalur bersifat relatif, lalu mengecualikan jalur yang sudah tercantum dalam checkpoint terverifikasi.

Edisi Bash menolak nama file yang mengandung tab, carriage return, atau baris baru karena daftar --files-from-raw yang dipisahkan oleh baris baru tidak dapat merepresentasikannya tanpa ambiguitas. Gunakan edisi Python atau format inventaris yang dibuat khusus jika nama-nama tersebut ada.

Checkpoint berbasis jalur sengaja dibuat sederhana dan mudah diperiksa. Mekanisme ini mengasumsikan jalur sumber tetap stabil selama proses berlangsung. Bekukan penulisan ke sumber jika memungkinkan, atau buat ulang dan rekonsiliasi inventaris jika diperkirakan ada perubahan bersamaan.

Fungsi dasar inventaris yang digunakan wrapper
rclone lsf "$SOURCE" \
  --recursive \
  --files-only \
  --format "sp" \
  --separator 
    
  

\t' > "$inventory"

Hentikan proses sebelum batch memakai ruang cadangan

Jumlah byte kosong lokal diperoleh dari df pada sistem file staging. Jumlah byte kosong di tujuan diperoleh dari rclone about --json: skrip menggunakan free jika tersedia; jika tidak, total dikurangi used. Skrip memeriksa total byte yang tertunda sebelum mulai bekerja dan kembali memeriksa kapasitas lokal serta tujuan sebelum setiap batch.

Beberapa penyedia atau jenis akun tidak memublikasikan kuota terbatas melalui rclone. Skrip pembungkus menampilkan keterbatasan tersebut dan melanjutkan proses dengan mengikuti pembatasan penyedia. Perlakukan kondisi ini sebagai kebutuhan pemantauan, bukan bukti bahwa ruang yang tersedia sudah memadai.

Batas batch bukan batas maksimum mutlak untuk satu objek. Satu file yang lebih besar daripada batch yang dikonfigurasi dapat membentuk batch tersendiri, sehingga ruang kosong lokal harus cukup untuk file terbesar ditambah cadangan. Verifikasi penuh di tujuan membaca byte dari tujuan, tetapi tidak menyimpan salinan lokal kedua pada edisi rclone.

Verifikasi kedua sisi batas penampungan lokal

Setiap batch melewati dua tahap yang independen. Pertama, rclone menyalin jalur sumber yang dipilih ke staging lokal dengan --ignore-existing, lalu check --download membaca kedua sisi dan membandingkan konten sebenarnya. Kedua, rclone menyalin jalur yang telah masuk staging tersebut ke tujuan dan mengulangi pemeriksaan seluruh byte yang sama.

--ignore-existing membuat proses yang terputus tetap tidak destruktif: objek yang sudah ada tidak akan ditimpa. Verifikasi tetap harus berhasil sebelum jalur dapat dicatat dalam checkpoint. Jika file yang sudah ada di tujuan berbeda, rclone check akan gagal dan penanganan kesalahan Bash yang ketat akan menghentikan proses.

Penggunaan --download lebih lambat dan memakai operasi egress/baca penyedia, tetapi tidak hanya bergantung pada apakah kedua penyedia menyediakan algoritme hash yang sama. Perintah ini tidak mengubah kedua sisi.

Dua tahap penyalinan dan verifikasi
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

Jalankan transfer OneDrive ke Google Drive dengan penampungan terbatas

Contoh ini menyisakan 15 GiB disk lokal tanpa digunakan, mempertahankan 10 GiB ruang kosong di Google Drive, membatasi batch normal hingga 8 GiB atau 200 file, dan menggunakan empat transfer bersamaan. Konten tujuan ditulis ke dalam folder baru yang diberi tanggal.

Gunakan --dry-run terlebih dahulu. Opsi ini menjalankan inventarisasi sumber dan pemeriksaan awal kuota tujuan tanpa mengunduh atau mengunggah. Skrip pembungkus menampilkan total byte yang masih harus ditransfer, yang perlu dicocokkan dengan cakupan migrasi Anda sebelum menjalankan batch pertama yang sebenarnya.

Lakukan pemeriksaan awal, lalu jalankan cakupan yang sama
./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.

Balik arah transfer tanpa menggunakan kembali status

Wrapper ini tidak bergantung pada penyedia karena adaptor remote ditangani oleh rclone. Tukar argumen remote untuk menyalin Google Drive ke OneDrive, lalu gunakan folder tujuan, jalur staging, dan file checkpoint baru untuk proses tersebut.

Docs, Sheets, Slides, dan format virtual bawaan Google lainnya memerlukan konfigurasi ekspor rclone dan peninjauan yang cermat. Konfirmasikan ekstensi hasil ekspor dan perilaku konversinya dengan sekumpulan data uji. Penyalinan melalui shell tidak mempertahankan riwayat kolaborasi Google, pintasan, izin, atau metadata khusus Microsoft.

Google Drive ke 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

Buat checkpoint hanya setelah verifikasi tujuan

Setelah pemeriksaan tujuan selesai dengan status berhasil, wrapper menambahkan setiap jalur relatif ke checkpoint teks biasa. Selanjutnya, wrapper menghapus file tersebut dari staging lokal dan menghapus direktori lokal yang kosong. Remote sumber tetap tidak berubah.

Checkpoint hanya dapat ditambahi selama proses berlangsung dan mudah diaudit dengan alat standar. Simpan bersama baris perintah, versi rclone, sidik jari konfigurasi, inventaris, log, stempel waktu, dan catatan penerimaan. Jangan mengeditnya untuk menyembunyikan kegagalan kecuali file tujuan telah diverifikasi secara independen.

Checkpoint yang hanya menggunakan jalur tidak dapat mendeteksi objek sumber yang kontennya berubah tanpa perubahan jalur. Untuk kumpulan data yang dapat berubah, hentikan sementara operasi tulis, catat ID penyedia dan metadata modifikasi secara terpisah, atau gunakan checkpoint berbasis ID dan ukuran yang lebih ketat pada edisi Python. Untuk migrasi yang diatur regulasi atau melibatkan kolaborasi, gunakan alur kerja terkelola dengan kontrol perubahan yang jelas.

Perlakukan setiap status keluar bukan nol sebagai batch yang belum terselesaikan

  • Mode ketat menghentikan proses saat perintah, pipeline, atau variabel yang belum ditetapkan mengalami kegagalan; direktori inventaris sementara dihapus secara otomatis.
  • rclone mencoba ulang transfer yang mengalami gangguan sementara, tetapi kesalahan izin, kuota, jaringan, konflik, atau integritas yang terus terjadi akan menghentikan batch.
  • File staging yang belum dicatat dalam checkpoint tetap tersedia untuk diperiksa, dan proses ulang yang identik menggunakan --ignore-existing sebelum memeriksa byte-nya.
  • File tujuan yang berbeda tidak akan pernah ditimpa. Selesaikan konfliknya atau pilih direktori akar tujuan yang bersih.
  • Jangan mengubah proses copy yang gagal menjadi rclone sync atau move. Perintah tersebut memiliki semantik penghapusan yang berbeda.
  • Simpan log dan checkpoint hingga penerimaan hasil di tujuan secara manual selesai.

Amankan host yang menjadi data plane

Host penampungan untuk sementara menyimpan salinan data sumber yang dapat dibaca dan token penyegaran OAuth. Gunakan enkripsi seluruh disk, izin file yang ketat, akun sistem operasi khusus, dependensi yang telah ditambal, akses administrator yang terkendali, serta kebijakan pencadangan terenkripsi yang tidak menyimpan konten penampungan secara tak terduga.

Hindari rahasia pada baris perintah karena daftar proses dan riwayat shell dapat mengeksposnya. Konfigurasi rclone yang dilindungi dapat menyamarkan token saat tersimpan, tetapi tidak menggantikan keamanan host. Hapus materi token dan sisa staging setelah hasil migrasi diterima, sesuai kebijakan retensi Anda.

Pantau log audit penyedia, lalu lintas keluar jaringan, kesehatan disk, ketersediaan inode, status proses, dan output rclone. Terminal yang dibiarkan terbuka bukanlah pengawasan proses; gunakan pengelola layanan atau multiplexer terminal yang disetujui dan pastikan log tersimpan secara persisten.

Selesaikan migrasi dengan bukti, bukan sekadar perintah yang berhasil

  • Arsipkan inventaris yang telah dibekukan, perintah persis yang digunakan, checksum skrip, versi rclone, sidik jari konfigurasi remote, dan checkpoint terverifikasi.
  • Cocokkan jumlah file dan byte yang diketahui per folder, bukan hanya pada total drive.
  • Buka sampel berbasis risiko yang mencakup dokumen besar, kecil, lama, baru, berkarakter Unicode, berada jauh di dalam struktur folder, diarsipkan, dan dikonversi.
  • Uji akses ke tujuan dari akun pengguna yang representatif dan buat ulang pengaturan berbagi yang diperlukan secara terpisah.
  • Tinjau paket, pintasan, tautan, dokumen native, dan konflik yang dilewati, serta peringatan penyedia.
  • Pertahankan periode tumpang tindih dengan sumber dan dapatkan persetujuan tegas dari pemilik sebelum mengambil keputusan terkait retensi atau penghapusan di kemudian hari.

Pertanyaan umum

Mengapa skrip Bash menggunakan rclone copy, bukan sync?

Copy tidak menghapus objek sumber atau objek tujuan yang tidak ada di sumber. Sync memiliki semantik rekonsiliasi dan penghapusan yang berbeda, sehingga sengaja tidak disertakan dalam alur kerja ini.

Apakah rclone check --download mengubah salah satu cloud?

Tidak. Proses ini membaca dan membandingkan konten file. Skrip menggunakannya setelah setiap tahap penyalinan agar sebuah jalur hanya dicatat dalam checkpoint setelah byte di tujuan cocok dengan byte di penampungan.

Apa yang terjadi jika tujuan sudah berisi file?

Penyalinan menggunakan --ignore-existing, lalu melakukan verifikasi seluruh byte. Objek yang identik dapat lolos; objek yang berbeda menyebabkan pemeriksaan gagal. Skrip tidak pernah menimpa file yang berkonflik.

Apakah skrip dapat menangani file yang lebih besar daripada satu batch?

Ya. Satu file yang terlalu besar akan menjadi batch tersendiri. Sistem file penampungan harus memiliki ruang untuk file tersebut ditambah cadangan lokal yang telah dikonfigurasi.

Apakah proses ini memigrasikan izin, versi, atau data kolaborasi bawaan cloud?

Tidak. Proses ini menyalin konten dan jalur file melalui rclone. Kontrol akses, versi, label, komentar, pintasan, tautan, aturan retensi, dan perilaku bawaan penyedia memerlukan perencanaan serta verifikasi terpisah.

Sumber resmi yang digunakan untuk panduan ini

Baca panduan