Python · Google Drive ↔ OneDrive · Panduan rekayasa sumber terbuka
Membuat Transfer Google Drive–OneDrive yang Aman dengan Python
Panduan ini mengubah penyalinan cloud yang ternyata rumit menjadi alur yang eksplisit: membuat daftar, melakukan pemeriksaan awal, menampung sementara, menghitung hash, mengunggah, mengunduh ulang, membandingkan, membuat checkpoint, dan baru kemudian mengosongkan ruang disk lokal.
Diperbarui ; 22 menit membaca.
Jawaban singkat
Untuk migrasi terkelola, FileArk mengotomatiskan alur kerja ini tanpa menjadikan komputer Anda sebagai jalur data. FileArk telah diuji dengan beban kerja migrasi berukuran beberapa terabyte dan memeriksa penerimaan data dari sumber, persetujuan upload oleh penyedia, serta objek tujuan sebelum melaporkan keberhasilan. Jika Anda perlu mengoperasikan pipeline sendiri, program Python berlisensi MIT di bawah ini melakukan penyalinan secara hati-hati melalui komputer Anda dan tidak pernah menghapus file sumber.
Pilih model operasional sebelum memilih kode
Layanan migrasi cloud langsung merupakan pilihan praktis jika pustaka berukuran besar, koneksi harus berjalan tanpa pengawasan, atau data tidak boleh melewati laptop. FileArk menjaga transfer tetap berjalan secara online, memantau respons penyedia, mencoba kembali kegagalan yang dapat dipulihkan, dan memberi Anda satu tampilan progres. Alur validasinya melakukan tiga pemeriksaan independen sebelum file dianggap selesai.
Skrip lokal berguna ketika Anda memerlukan kendali penuh atas aplikasi OAuth, disk penampungan sementara, log, atau kebijakan folder tujuan. Konsekuensinya adalah tanggung jawab operasional: komputer Anda harus tetap online, koneksi jaringannya menjadi hambatan, kredensial OAuth harus dilindungi, dan ruang disk sementara yang memadai harus tetap tersedia untuk batch aktif serta salinan verifikasi.
Program yang dirilis di sini sengaja dirancang secara konservatif. Program ini menyalin dari root satu drive pribadi ke folder tujuan baru. Program tidak menyediakan metode penghapusan, tidak menimpa file yang berkonflik, menyimpan checkpoint persisten setelah verifikasi, dan berhenti ketika kapasitas lokal atau tujuan berada di bawah ruang cadangan yang Anda konfigurasi.
Pipeline transfer dan batas-batas kegagalannya
Inventarisasikan struktur sumber
Adaptor sumber menelusuri folder secara rekursif, mengikuti paginasi penyedia, mencatat ID, jalur, jenis, dan ukuran yang dilaporkan, serta memetakan file native Google yang didukung ke format ekspor portabel.
Periksa kapasitas tujuan dan lokal sebelum transfer
Mesin membandingkan byte yang tertunda ditambah ruang cadangan yang dapat dikonfigurasi dengan kuota tujuan. Mesin juga memeriksa sistem file penampungan sebelum setiap batch dan setiap pengunduhan file.
Tampung batch dengan batas yang ditentukan
File diproses dalam batch yang dibatasi berdasarkan total byte dan jumlah file. Hanya batch saat ini yang menggunakan disk lokal, sehingga pustaka berukuran besar tidak memerlukan drive dengan ukuran yang sama.
Hitung hash dan unggah
Setelah mengunduh, skrip menghitung SHA-256 lokal, memeriksa ukuran sumber yang diketahui, membuat folder tujuan, lalu mengunggah dalam potongan yang dapat dilanjutkan dan kompatibel dengan penyedia.
Verifikasi dan buat checkpoint
Mode default mendownload ulang objek baru di tujuan dan membandingkan SHA-256. Hanya file yang cocok yang dicatat ke checkpoint JSON dan dihapus dari penampungan lokal.
Unduh versi Python lengkap berlisensi MIT
Unduhan ini merupakan satu titik masuk Python yang mudah dibaca. SDK penyedia hanya diimpor untuk transfer sebenarnya, sehingga perintah demo dan bantuan dapat dijalankan sebelum dependensi atau kredensial diinstal. File persyaratan terpisah menetapkan versi minimum paket yang didukung, dan lisensinya disertakan bersama kode sumber.
Baca kode sebelum menggunakannya, lakukan pengujian dengan folder tujuan kecil, dan pertahankan verifikasi unduh ulang bawaan untuk data penting. Tidak ada skrip generik yang dapat mereplikasi setiap izin berbagi, pintasan, label retensi, aturan drive bersama, atau kebijakan tenant.
Unduh program transfer Python
Implementasi langsung Google Drive API dan Microsoft Graph dengan batch, checkpoint, percobaan ulang, cadangan kuota, dan verifikasi SHA-256 di tujuan.fileark-cloud-transfer.py · Python 3.10+ · Lisensi MIT
Unduh file persyaratan Python
Daftar dependensi ringkas untuk Google OAuth dan Drive, autentikasi Microsoft, permintaan Graph, serta dukungan percobaan ulang.requirements-fileark-cloud-transfer.txt · persyaratan pip · teks biasa
Unduh lisensi MIT
Pemberitahuan izin yang mencakup kedua skrip transfer manual FileArk.LICENSE-fileark-cloud-transfer.txt · MIT · teks biasa
Tinjau alur keamanan sebelum memberikan akses cloud

Jalankan demo terlebih dahulu. Demo tidak melakukan panggilan jaringan dan tidak menulis data cloud. Baris terakhir sengaja dibuat tanpa ambiguitas: tidak ada file sumber yang dihapus. Mesin yang sebenarnya menghasilkan urutan yang sama melalui log terstruktur dan keluar dengan kode bukan nol saat menemukan file pertama yang belum terverifikasi.
chmod +x fileark-cloud-transfer.py
python3 fileark-cloud-transfer.py --demo
python3 fileark-cloud-transfer.py --helpBuat klien OAuth tanpa menyematkan rahasia
Untuk Google Drive, buat klien OAuth desktop dalam proyek Google Cloud, aktifkan Drive API, konfigurasikan layar persetujuan, lalu unduh JSON klien. Masukkan jalurnya dengan --google-client-secret atau tetapkan GOOGLE_OAUTH_CLIENT_SECRET_FILE. Skrip meminta akses Drive karena harus membuat daftar, mengunduh, membuat folder, mengunggah, dan memverifikasi file.
Untuk OneDrive, daftarkan aplikasi klien publik di Microsoft Entra ID, aktifkan alur kode perangkat, tambahkan izin terdelegasi Files.ReadWrite, dan masukkan ID klien aplikasi. Pilih common untuk akun konsumen dan organisasi, organizations untuk akun kerja, atau ID tenant tertentu jika diwajibkan oleh kebijakan.
Token disimpan dalam cache file lokal agar migrasi yang terputus dapat dilanjutkan tanpa login ulang. Perlakukan JSON klien dan cache token sebagai rahasia: kecualikan dari kontrol versi, batasi izin sistem file, jangan pernah mengunggahnya ke tiket dukungan, dan hapus setelah migrasi diterima.
python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements-fileark-cloud-transfer.txtJalankan dari Google Drive ke OneDrive—atau sebaliknya
Semua nilai khusus identitas merupakan tanggung jawab operator. Program ini tidak menyertakan ID klien, rahasia, tenant, token, akun jarak jauh, atau kredensial tujuan. Perintah pertama melakukan proses masuk ke Google melalui browser dan ke Microsoft dengan kode perangkat, lalu menyalin data ke folder OneDrive baru.
Tukar sumber dan tujuan untuk menjalankan transfer dari OneDrive ke Google Drive. Gunakan file status dan root tujuan yang berbeda untuk setiap migrasi terpisah. Checkpoint mengikat penyedia sumber, penyedia tujuan, dan root menjadi satu, serta menolak melanjutkan jika konfigurasinya tidak cocok.
export MICROSOFT_CLIENT_ID="your-public-client-id"
python fileark-cloud-transfer.py \
--source google \
--destination onedrive \
--google-client-secret ./client_secret.json \
--microsoft-tenant common \
--destination-root "FileArk Manual Transfer 2026-07-25" \
--batch-gib 8 \
--batch-files 200 \
--local-reserve-gib 15 \
--destination-reserve-gib 10 \
--verification redownloadpython fileark-cloud-transfer.py \
--source onedrive \
--destination google \
--microsoft-client-id "$MICROSOFT_CLIENT_ID" \
--google-client-secret ./client_secret.json \
--destination-root "OneDrive archive 2026-07-25" \
--state-file ./onedrive-to-google-state.json \
--verification redownloadMengapa kapasitas diperiksa lebih dari sekali
Satu pemeriksaan awal dapat menjadi kedaluwarsa saat transfer yang panjang masih berjalan. Seseorang dapat mengupload file lain ke tujuan, dokumen Google yang diekspor dapat lebih besar daripada yang ditunjukkan metadata sumbernya, dan aplikasi lain dapat menggunakan ruang disk lokal. Karena itu, mesin memeriksa total kapasitas tujuan sebelum memulai, kapasitas tujuan pada setiap batch, kapasitas tujuan sekali lagi setelah setiap download lokal, serta disk lokal sebelum setiap penyalinan untuk tahap penampungan atau verifikasi.
Nilai cadangan merupakan ruang operasional tambahan, bukan perkiraan ukuran transfer. Tetapkan nilai yang cukup besar untuk mengakomodasi pembaruan sistem operasi, keterlambatan pencatatan oleh penyedia, dan pengguna lain yang memakai kuota cloud yang sama. Jika penyedia tidak menampilkan sisa kuota yang terbatas, skrip akan menampilkan peringatan dan mengandalkan penerapan batas oleh penyedia; pendekatan ini lebih lemah daripada pemeriksaan awal dengan nilai yang diketahui dan perlu dipantau secara aktif.
def ensure_destination_capacity(quota, required, reserve):
if quota.remaining is None:
LOG.warning("Destination did not report a finite quota")
return
needed = required + reserve
if quota.remaining < needed:
raise RuntimeError(
f"Destination is too small: {human_bytes(quota.remaining)} free, "
f"{human_bytes(needed)} required including reserve."
)Batasi ukuran penampungan berdasarkan jumlah byte dan file
Batas maksimum byte mengendalikan penggunaan ruang disk; batas maksimum jumlah file mengendalikan beban tambahan API dan sistem file ketika sumber berisi ratusan ribu objek kecil. File yang lebih besar daripada batas batch diizinkan sebagai batch satu file, sehingga ruang cadangan harus disesuaikan dengan ukuran objek individual terbesar.
Ukuran chunk default adalah 10 MiB. Ukuran ini merupakan kelipatan persekutuan dari granularitas upload yang dapat dilanjutkan sebesar 256 KiB di Google Drive dan persyaratan fragmen berurutan sebesar 320 KiB di Microsoft Graph. Validator baris perintah menolak ukuran chunk yang tidak kompatibel sebelum autentikasi.
def batches(files, max_bytes, max_files):
batch, batch_size = [], 0
for item in files:
planned_size = max(item.size, 1)
if batch and (
len(batch) >= max_files
or batch_size + planned_size > max_bytes
):
yield batch
batch, batch_size = [], 0
batch.append(item)
batch_size += planned_size
if batch:
yield batchTangani dokumen native Google melalui konversi
Proyek Google Docs, Sheets, Slides, Drawings, dan Apps Script bukanlah aliran byte biasa yang dapat diunduh. Adaptor Google mengekspornya masing-masing ke DOCX, XLSX, PPTX, PNG, dan JSON, serta menambahkan ekstensi nama file portabel. Folder ditelusuri, tetapi tidak diunggah sebagai objek kosong kecuali berisi file.
Konversi dapat mengubah font, formula, komentar, objek tersemat, tata letak halaman, dan riwayat kolaborasi. Endpoint ekspor Google juga memberlakukan batasan format dan ukuran. Skrip melewati jenis native yang tidak didukung dengan menampilkan peringatan, alih-alih membuat representasi sendiri. Tinjau sampel representatif dari file yang dikonversi secara manual.
Pintasan, drive bersama, file yang dibagikan kepada Anda tetapi tidak berada di My Drive, paket OneNote, metadata retensi organisasi, riwayat versi, dan ACL berbagi tidak tercakup dalam edisi ini. Batasan inilah yang membuat penyalinan file tidak boleh disebut sebagai migrasi tenant lengkap.
Gunakan verifikasi unduh ulang penuh dari tujuan untuk memastikan byte yang sama persis
Keberhasilan upload oleh penyedia diperlukan, tetapi belum cukup. Setelah upload, skrip terlebih dahulu membandingkan ukuran dalam metadata tujuan dengan file di penampungan. Dalam mode download ulang default, skrip kemudian mendownload objek tujuan ke file sementara di lokasi yang sama, menghitung SHA-256, dan membandingkan digest tersebut dengan digest sumber di penampungan.
Entri checkpoint hanya dibuat jika ukuran dan digest sama. Checkpoint mencatat ID sumber, ukuran yang dilaporkan sumber, ID tujuan, jalur tujuan, byte aktual, kedua digest, dan waktu penyelesaian UTC. Jika jalur sumber yang tercatat dalam checkpoint kemudian mengarah ke ID atau ukuran berbeda, skrip akan berhenti alih-alih melewati data yang berubah secara diam-diam.
Pengunduhan ulang menggandakan lalu lintas baca di sisi tujuan dan untuk sementara memerlukan ruang bagi file yang ditampung serta salinan verifikasinya. Pilih mode metadata hanya jika konsekuensi biaya tersebut telah dipahami dan tersedia proses verifikasi konten yang independen.
destination.redownload(uploaded, verification_copy)
verification_hash = sha256_file(verification_copy)
if verification_hash != local_hash:
raise RuntimeError(
f"SHA-256 mismatch after destination re-download: {relative!r}."
)
state["completed"][relative] = {
"source_id": item.id,
"destination_id": uploaded.id,
"bytes": actual_size,
"sha256": local_hash,
"destination_sha256": verification_hash,
}Lanjutkan tanpa menganggap ketidakpastian sebagai keberhasilan
Program menulis status secara atomik melalui file sementara lalu mengganti namanya. Item yang telah diverifikasi baru dihapus dari penampungan lokal setelah penulisan persisten tersebut selesai. Menjalankan kembali perintah yang sama persis akan melewati item yang sudah tercatat dalam checkpoint dan melanjutkan pemrosesan jalur yang tertunda.
Crash dapat terjadi setelah penyedia menerima upload, tetapi sebelum checkpoint dicatat. Karena perilaku saat terjadi konflik diatur ke fail, proses berikutnya akan berhenti pada jalur tujuan yang sudah ada tersebut, alih-alih menimpanya atau secara keliru menyatakan berhasil. Periksa objek dan bandingkan isinya, lalu tambahkan entri pemulihan yang telah diverifikasi secara hati-hati atau mulai ulang dengan root tujuan baru.
Kedaluwarsa OAuth, pembatasan laju, kesalahan server sementara, dan chunk yang terputus akan dicoba ulang dalam batas yang ditentukan. Kegagalan autentikasi atau izin yang terus berlanjut akan menghentikan program. Simpan log, checkpoint, dan isi penampungan hingga Anda memahami penyebab kegagalannya.
Lakukan uji penerimaan yang sesungguhnya
- Mulailah dengan folder kecil yang berisi file kosong, file besar, jalur direktori yang dalam, nama Unicode, dan dokumen native Google.
- Jalankan --dry-run terlebih dahulu, lalu bandingkan total byte inventaris dengan antarmuka penyedia.
- Pantau ruang kosong lokal dan kuota tujuan secara terpisah selama batch produksi pertama.
- Biarkan verifikasi melalui download ulang tetap aktif dan arsipkan checkpoint bersama catatan migrasi Anda.
- Buka sampel representatif berupa PDF, file Office, gambar, video, arsip, dan dokumen native yang telah dikonversi di tujuan.
- Bandingkan jumlah folder dan file yang diharapkan, selidiki setiap item yang dilewati atau gagal, dan uji akses dari pengguna kedua.
- Biarkan sumber tidak berubah selama periode tumpang tindih yang telah ditentukan. Skrip ini tidak pernah menghapusnya.
Pertanyaan umum
Apakah skrip Python ini pernah menghapus file sumber?
Tidak. Penghapusan sumber tidak diimplementasikan. Mesin mendownload dari sumber dan menulis ke root tujuan terpisah; verifikasi yang berhasil hanya menghapus salinan penampungan lokal sementara.
Apakah transfer dapat dilakukan dalam kedua arah?
Ya. Tetapkan Google Drive atau OneDrive sebagai sumber dan penyedia lainnya sebagai tujuan. Gunakan checkpoint dan root tujuan yang unik untuk setiap migrasi.
Apakah izin berbagi dan riwayat file tetap dipertahankan?
Tidak. Edisi ini menyalin konten file terkini dan jalur folder. ACL berbagi, tautan publik, versi, komentar, label, kebijakan retensi, dan metadata khusus organisasi memerlukan migrasi dan validasi terpisah.
Mengapa mengunduh ulang file yang baru saja diunggah?
Penerimaan unggahan dan ukuran metadata tidak membuktikan bahwa byte yang sama persis di tujuan dapat dibaca kembali. Mode unduh ulang menghitung SHA-256 dari konten tujuan dan hanya membuat checkpoint jika hasilnya sama persis.
Apakah ini alat resmi Google atau Microsoft?
Tidak. Ini adalah implementasi referensi FileArk independen yang dirilis berdasarkan lisensi MIT. Tinjau implementasinya, uji dengan data yang tidak penting, dan patuhi kebijakan penyedia serta organisasi Anda.
Sumber resmi yang digunakan untuk panduan ini
- Pusat Pembelajaran Google Workspace: beralih dari OneDrive ke Google Drive
- Bantuan Google Drive: penyimpanan dan perilaku file
- Dukungan Microsoft: mengunggah dan menyimpan file ke OneDrive
- Google Drive API: mendownload dan mengekspor file
- Google Drive API: unggahan yang dapat dilanjutkan
- Google Drive API: kolom kuota penyimpanan
- Microsoft Graph: menampilkan daftar item turunan drive
- Microsoft Graph: membuat sesi upload yang dapat dilanjutkan
- Microsoft Graph: sumber daya kuota OneDrive