Bash + rclone · OneDrive ↔ Google Drive · Open-source beheerhandleiding

Een cloudoverdracht die uitsluitend kopieert met Bash en rclone

rclone ondersteunt al paginering in de cloud, nieuwe pogingen, hervatbare overdrachten en providerhashes. De technische opgave is om deze basisfuncties te verpakken in een capaciteitsbewuste werkwijze die bij fouten veilig afbreekt.

Bijgewerkt ; 20 minuten leestijd.

Kort antwoord

FileArk is de eenvoudigere beheerde keuze voor grote of onbeheerde migraties: het voert de overdracht online uit, is getest met workloads van meerdere terabytes en controleert elk resultaat voordat de overdracht wordt voltooid. Voor beheerders die het gegevenspad vanuit de shell willen aansturen, kopieert deze Bash-wrapper met MIT-licentie begrensde batches via lokale tijdelijke opslag, verifieert hij beide trajecten byte voor byte en verwijdert hij nooit bronbestanden.

Waarom rclone in een wrapper gebruiken in plaats van elke providerclient opnieuw te bouwen

rclone biedt een shellworkflow een volwassen providerabstractie, OAuth-configuratie, paginering, gedrag bij nieuwe pogingen, hervatbare overdrachten, instellingen voor gelijktijdigheid, inventarisatieopdrachten en verificatieopdrachten. De wrapper kan zich daardoor richten op de vaste regels voor de migratie: uitsluitend kopieeropdrachten, begrensde tijdelijke opslag, capaciteitsreserves, deterministische bestandslijsten en duurzaam vastgelegde voortgang.

Dat maakt de taak niet automatisch. De beheerder blijft verantwoordelijk voor de configuratie van remotes, tokenbeveiliging, netwerkbeschikbaarheid, procesbewaking, lokale schijfruimte, logboeken, providerlimieten, controle van mislukte objecten en acceptatie van de bestemming. FileArk is bedoeld voor gebruikers die deze procedure als een beheerde online workflow willen laten uitvoeren in plaats van op hun werkstation of server.

Het script roept rclone move, sync, delete, purge of rmdirs expliciet nooit aan. Het gebruikt lsf en about voor detectie, copy voor elk traject en check --download voor volledige byte-voor-byteverificatie. Alleen een geverifieerd bestand in de lokale tijdelijke opslag wordt verwijderd.

Download de Bash-versie en MIT-licentie

Download het overdrachtsprogramma voor Bash en rclone
Een wrapper die uitsluitend kopieert, met batchlimieten, lokale en doelreserves, volledige byte-voor-byteverificatie, checkpoints, instellingen voor nieuwe pogingen en een demo zonder netwerkverbinding.
fileark-cloud-transfer.sh · Bash 4+ · rclone · jq · MIT-licentie

Download de MIT-licentie
Licentietekst voor beide scripts van FileArk voor handmatige overdracht.
LICENSE-fileark-cloud-transfer.txt · MIT · platte tekst

Voer de beheerdersdemo zonder netwerkverbinding uit

Terminal waarin het FileArk-script voor cloudoverdracht met Bash en rclone in demomodus wordt uitgevoerd
De demo toont één begrensde batch die beide verificatiegrenzen passeert. De demo inspecteert de rclone-configuratie niet, maakt geen verbinding met een cloud en schrijft geen externe gegevens.

De demo kan veilig worden uitgevoerd voordat rclone of jq is geïnstalleerd, omdat de argumentverwerking wordt afgesloten voordat afhankelijkheden worden gecontroleerd. De uitvoer noemt de verboden destructieve bewerkingen, toont beide capaciteitsreserves en eindigt met het aantal verwijderingen uit de bron.

Inspecteer de download en voer een snelle test uit
chmod +x fileark-cloud-transfer.sh
bash -n fileark-cloud-transfer.sh
./fileark-cloud-transfer.sh --demo
./fileark-cloud-transfer.sh --help

Installeer en configureer de vereiste beheerderssoftware

Installeer een actuele versie van rclone volgens de officiële instructies en installeer jq via de pakketbeheerder van uw besturingssysteem. Bash 4 of nieuwer is vereist, omdat het wrapperscript strikte foutafhandeling en moderne voorwaardelijke expressies gebruikt.

Voer rclone config uit en maak twee onafhankelijk benoemde remotes, bijvoorbeeld onedrive: en gdrive:. Voer je eigen client-ID en clientgeheim van de provider in wanneer het beleid of de snelheidslimieten afzonderlijke OAuth-applicaties vereisen. rclone slaat OAuth-tokens op in het configuratiebestand. Beveilig dat bestand met beperkende machtigingen en voeg het nooit bij het script.

Controleer elke remote met een alleen-lezen-lijst en een quotaopdracht voordat je de wrapper uitvoert. Gebruik paden zoals onedrive:Department/Archive als slechts een deelstructuur binnen het bereik valt.

Beide remotes configureren en controleren
rclone version
rclone config
rclone lsd onedrive:
rclone lsd gdrive:
rclone about onedrive: --json | jq
rclone about gdrive: --json | jq

Leg een deterministische inventaris vast voordat je bytes verplaatst

De wrapper gebruikt rclone lsf recursief met een expliciete tab als scheidingsteken en de indeling sp. Dit levert de grootte op, gevolgd door het pad. De wrapper controleert of elke grootte numeriek en elk pad relatief is en sluit vervolgens paden uit die al in het geverifieerde checkpoint staan.

De Bash-versie weigert bestandsnamen met tabs, regelteruglopen of regeleinden, omdat door regeleinden gescheiden --files-from-raw-lijsten deze niet eenduidig kunnen weergeven. Gebruik de Python-versie of een speciaal hiervoor ontworpen inventarisindeling als zulke namen voorkomen.

Een checkpoint op basis van paden is bewust eenvoudig en controleerbaar. Hierbij wordt ervan uitgegaan dat bronpaden tijdens de uitvoering niet veranderen. Blokkeer indien mogelijk schrijfbewerkingen naar de bron, of maak de inventaris opnieuw en stem deze af als gelijktijdige wijzigingen worden verwacht.

Basisopdracht voor inventarisatie die door de wrapper wordt gebruikt
rclone lsf "$SOURCE" \
  --recursive \
  --files-only \
  --format "sp" \
  --separator 
    
  

\t' > "$inventory"

Stop voordat een batch de reserve verbruikt

Het aantal vrije lokale bytes wordt met df bepaald op het bestandssysteem voor tijdelijke opslag. Het aantal vrije bytes op de bestemming komt uit rclone about --json: het script gebruikt free als die waarde beschikbaar is en anders total min used. Het controleert vóór aanvang het totale aantal resterende bytes en controleert vóór elke batch opnieuw zowel de lokale capaciteit als de capaciteit op de bestemming.

Sommige providers of accounttypen publiceren via rclone geen eindig quotum. Het wrapperscript meldt die beperking en gaat verder met handhaving door de provider. Beschouw dit als een vereiste voor monitoring, niet als bewijs dat er voldoende ruimte is.

De batchlimiet is geen harde bovengrens voor één object. Eén bestand dat groter is dan de ingestelde batch kan een eigen batch vormen. De vrije lokale ruimte moet daarom voldoende zijn voor het grootste bestand plus de reserve. Bij volledige verificatie van de bestemming worden bytes vanaf de bestemming gelezen, maar in de rclone-versie wordt lokaal geen tweede kopie bewaard.

Verifieer beide kanten van de grens met de lokale tijdelijke opslag

Elke batch doorloopt twee onafhankelijke trajecten. Eerst kopieert rclone de geselecteerde bronpaden met --ignore-existing naar lokale tijdelijke opslag. Daarna leest check --download beide kanten en vergelijkt de daadwerkelijke inhoud. Vervolgens kopieert rclone die tijdelijk opgeslagen paden naar de bestemming en herhaalt dezelfde volledige byte-voor-bytecontrole.

--ignore-existing zorgt ervoor dat onderbroken uitvoeringen niet-destructief zijn: een bestaand object wordt niet overschreven. De verificatie moet nog steeds slagen voordat het pad aan het checkpoint kan worden toegevoegd. Als de bestaande bestemming afwijkt, mislukt rclone check en wordt de uitvoering gestopt door de strikte foutafhandeling van Bash.

Het gebruik van --download is trager en verbruikt uitgaande gegevensoverdracht en leesbewerkingen bij de provider, maar voorkomt dat u alleen afhankelijk bent van de vraag of twee providers hetzelfde hash-algoritme ondersteunen. De opdracht wijzigt geen van beide kanten.

De twee kopieer- en verificatietrajecten
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

Draag met begrensde tijdelijke opslag gegevens over van OneDrive naar Google Drive

In het voorbeeld blijft 15 GiB aan lokale schijfruimte onaangeroerd, blijft 10 GiB vrij op Google Drive, is een normale batch beperkt tot 8 GiB of 200 bestanden en worden vier gelijktijdige overdrachten gebruikt. De inhoud wordt op de bestemming naar een nieuwe map met datum geschreven.

Gebruik eerst --dry-run. Daarmee worden de bron geïnventariseerd en het bestemmingsquotum vooraf gecontroleerd, zonder bestanden te downloaden of uploaden. Het wrapperscript toont het totale aantal bytes dat nog moet worden overgedragen. Controleer vóór de eerste echte batch of dit overeenkomt met de reikwijdte van uw migratie.

Voer een voorafgaande controle uit en verwerk daarna hetzelfde bereik
./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.

Keer de richting om zonder de status opnieuw te gebruiken

De wrapper is provideronafhankelijk, omdat rclone de externe adapters beheert. Verwissel de remote-argumenten om Google Drive naar OneDrive te kopiëren en gebruik voor die uitvoering een nieuwe doelmap, een nieuw pad voor tijdelijke opslag en een nieuw checkpointbestand.

Google-eigen Docs-, Sheets- en Slides-bestanden en andere virtuele indelingen vereisen configuratie van de exportfunctie van rclone en een zorgvuldige controle. Controleer de geëxporteerde extensies en het conversiegedrag met een testset. Een kopie via de shell behoudt geen samenwerkingsgeschiedenis van Google, snelkoppelingen, machtigingen of Microsoft-specifieke metagegevens.

Van Google Drive naar 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

Voeg pas na verificatie van de bestemming een checkpoint toe

Nadat de bestemmingscontrole met succes is afgesloten, voegt de wrapper elk relatief pad toe aan een checkpoint in platte tekst. Daarna verwijdert de wrapper dat bestand uit de lokale tijdelijke opslag en verwijdert hij lege lokale mappen. De remote aan de bronzijde blijft onaangeroerd.

Tijdens een uitvoering wordt het checkpoint alleen aangevuld en het is eenvoudig te controleren met standaardhulpmiddelen. Bewaar het samen met de opdrachtregel, de rclone-versie, de vingerafdruk van de configuratie, de inventaris, logboeken, tijdstempels en acceptatienotities. Bewerk het niet om een fout te verbergen, tenzij het bestand op de bestemming onafhankelijk is geverifieerd.

Een controlepunt dat alleen op het pad is gebaseerd, kan niet detecteren dat de inhoud van een bronobject verandert terwijl het pad gelijk blijft. Staak bij veranderlijke gegevenssets tijdelijk alle schrijfbewerkingen, leg provider-ID's en wijzigingsmetagegevens afzonderlijk vast of gebruik het strengere controlepunt op basis van ID en grootte uit de Python-versie. Gebruik voor gereguleerde migraties of migraties van samenwerkingsgegevens een beheerde workflow met expliciet wijzigingsbeheer.

Behandel elke afsluitcode die niet nul is als een onopgeloste batch

  • In de strikte modus wordt het script afgesloten als een opdracht of pipeline mislukt of als een niet-ingestelde variabele wordt gebruikt. De tijdelijke inventarismap wordt automatisch verwijderd.
  • rclone probeert tijdelijke overdrachtsfouten opnieuw, maar blijvende fouten met machtigingen, quota, het netwerk, conflicten of de integriteit stoppen de batch.
  • Tijdelijk opgeslagen bestanden die nog niet in het checkpoint staan, blijven beschikbaar voor controle. Bij een identieke nieuwe uitvoering wordt --ignore-existing gebruikt voordat de bytes worden gecontroleerd.
  • Een afwijkend bestand op de bestemming wordt nooit overschreven. Los het conflict op of kies een lege hoofdmap als bestemming.
  • Zet een mislukte kopieerbewerking niet om in rclone sync of move. Die opdrachten hanteren andere regels voor verwijdering.
  • Bewaar de logboeken en het checkpoint totdat de handmatige acceptatie van de bestemming is voltooid.

Beveilig de host die het gegevensverkeer gaat verwerken

De host voor tijdelijke opslag bevat tijdelijk leesbare kopieën van brongegevens en OAuth-vernieuwingstokens. Gebruik volledige schijfversleuteling, beperkende bestandsmachtigingen, een speciaal besturingssysteemaccount, bijgewerkte afhankelijkheden, gecontroleerde beheerderstoegang en een beleid voor versleutelde back-ups waardoor gegevens in de tijdelijke opslag niet onverwacht worden bewaard.

Gebruik geen geheimen op de opdrachtregel, omdat proceslijsten en de shellgeschiedenis deze zichtbaar kunnen maken. De beveiligde configuratie van rclone kan opgeslagen tokens onleesbaar maken, maar vervangt de beveiliging van de host niet. Verwijder tokengegevens en restanten uit de tijdelijke opslag nadat de migratie is geaccepteerd, overeenkomstig je bewaarbeleid.

Bewaak auditlogboeken van de provider, uitgaand netwerkverkeer, schijfstatus, beschikbare inodes, processtatus en rclone-uitvoer. Een openstaande terminal is geen procesbewaking. Gebruik een goedgekeurde servicebeheerder of terminalmultiplexer en sla logboeken duurzaam op.

Rond de migratie af met bewijs, niet met een groene opdrachtstatus

  • Archiveer de vastgelegde inventaris, de exacte opdracht, de checksum van het script, de rclone-versie, de vingerafdruk van de remoteconfiguratie en het geverifieerde checkpoint.
  • Controleer de aantallen bestanden en bekende aantallen bytes per map, niet alleen voor de hele schijf.
  • Open een risicogebaseerde steekproef van grote, kleine, oude, nieuwe, gearchiveerde, geconverteerde en diep geneste documenten en documenten met Unicode-tekens.
  • Test de toegang tot de bestemming vanuit representatieve gebruikersaccounts en stel vereiste deelrechten afzonderlijk opnieuw in.
  • Controleer overgeslagen pakketten, snelkoppelingen, links, systeemeigen documenten, conflicten en providerwaarschuwingen.
  • Hanteer een overlappingsperiode voor de bron en vraag de eigenaar expliciet om goedkeuring voordat u later een beslissing neemt over bewaring of verwijdering.

Veelgestelde vragen

Waarom gebruikt het Bash-script rclone copy in plaats van sync?

Kopiëren verwijdert geen bronobjecten en verwijdert evenmin objecten op de bestemming die niet in de bron staan. Synchroniseren heeft andere regels voor afstemming en verwijdering en valt daarom bewust buiten deze workflow.

Wijzigt rclone check --download iets in een van beide clouds?

Nee. De opdracht leest en vergelijkt bestandsinhoud. Het script gebruikt deze na elke kopieerstap, zodat voor een pad pas een controlepunt wordt vastgelegd wanneer de bytes op de bestemming overeenkomen met die in de tijdelijke opslag.

Wat gebeurt er als de bestemming al een bestand bevat?

Bij het kopiëren wordt --ignore-existing gebruikt, gevolgd door volledige byte-voor-byteverificatie. Een identiek object kan de controle doorstaan; bij een afwijkend object mislukt de controle. Het script overschrijft het conflicterende object nooit.

Kan het script bestanden verwerken die groter zijn dan één batch?

Ja. Eén te groot bestand vormt een afzonderlijke batch. Het bestandssysteem voor tijdelijke opslag moet ruimte hebben voor dat bestand plus de ingestelde lokale reserve.

Migreert dit machtigingen, versies of cloudspecifieke samenwerkingsgegevens?

Nee. Het kopieert bestandsinhoud en paden via rclone. Toegangsbeheer, versies, labels, opmerkingen, snelkoppelingen, links, bewaarregels en providerspecifiek gedrag vereisen afzonderlijke planning en verificatie.

Officiële bronnen die voor deze handleiding zijn gebruikt

Handleiding lezen