Bash + rclone · OneDrive ↔ Google Drive · Driftguide med öppen källkod

En molnöverföring som endast kopierar i Bash med rclone

rclone hanterar redan paginering i molntjänster, återförsök, återupptagningsbara överföringar och leverantörshashar. Den tekniska uppgiften är att omsluta dessa byggstenar i en felstängd och kapacitetsmedveten driftprocedur.

Uppdaterad ; 20 minuters läsning.

Kort svar

FileArk är det enklare hanterade valet för stora eller obevakade migreringar: tjänsten kör överföringen online, har testats med datamängder på flera terabyte och kontrollerar varje resultat före slutförandet. För operatörer som vill styra dataflödet från skalet kopierar detta MIT-licensierade Bash-omslutningsskript avgränsade batcher via lokal mellanlagring, verifierar båda etapperna byte för byte och raderar aldrig källfiler.

Varför omsluta rclone i stället för att bygga om varje leverantörsklient?

rclone ger ett skalskriptflöde ett moget abstraktionslager för leverantörer, OAuth-konfiguration, paginering, återförsök, återupptagningsbara överföringar, styrning av samtidighet, inventeringskommandon och verifieringskommandon. Omslutningsskriptet kan därför fokusera på migreringens grundvillkor: kommandon som endast kopierar, avgränsad mellanlagring, kapacitetsreserver, deterministiska fillistor och beständig förloppsinformation.

Det gör inte jobbet automatiskt. Operatören ansvarar fortfarande för fjärrkonfiguration, tokensäkerhet, nätverkets tillgänglighet, processövervakning, lokal disk, loggar, leverantörsgränser, granskning av misslyckade objekt och godkännande av målet. FileArk finns för användare som vill få proceduren utförd som ett hanterat onlinearbetsflöde i stället för på sin arbetsstation eller server.

Skriptet anropar uttryckligen aldrig rclone move, sync, delete, purge eller rmdirs. Det använder lsf och about för identifiering, copy för varje etapp och check --download för fullständig byteverifiering. Det enda som tas bort är en verifierad fil från den lokala mellanlagringskatalogen.

Ladda ned Bash-versionen och MIT-licensen

Ladda ned överföringsprogrammet för Bash och rclone
Ett omslutningsskript som endast kopierar, med batchgränser, lokala reserver och målreserver, fullständig byteverifiering, kontrollpunkter, styrning av återförsök och en nätverksfri demo.
fileark-cloud-transfer.sh · Bash 4+ · rclone · jq · MIT-licens

Hämta MIT-licensen
Licensmeddelande som omfattar båda FileArk-skripten för manuell överföring.
LICENSE-fileark-cloud-transfer.txt · MIT · oformaterad text

Kör operatörsdemon utan nätverksåtkomst

Terminal som kör FileArks molnöverföringsskript för Bash och rclone i demoläge
Demon visar en begränsad batch som passerar båda verifieringsgränserna. Den granskar inte rclone-konfigurationen, ansluter inte till någon molntjänst och skriver inga fjärrdata.

Demon är säker att köra innan rclone eller jq har installerats, eftersom argumenttolkningen avslutas före beroendekontrollerna. Utdata namnger de förbjudna destruktiva åtgärderna, visar båda kapacitetsreserverna och avslutas med antalet raderingar från källan.

Granska och snabbtesta den hämtade filen
chmod +x fileark-cloud-transfer.sh
bash -n fileark-cloud-transfer.sh
./fileark-cloud-transfer.sh --demo
./fileark-cloud-transfer.sh --help

Installera och konfigurera operatörsverktygens beroenden

Installera en aktuell version av rclone enligt de officiella anvisningarna och installera jq via operativsystemets pakethanterare. Bash 4 eller senare krävs eftersom skriptomslaget använder strikt felhantering och moderna villkorsuttryck.

Kör rclone config och skapa två fjärranslutningar med separata namn, till exempel onedrive: och gdrive:. Ange ditt eget klient-ID och din egen klienthemlighet hos leverantören när policyer eller hastighetsgränser kräver särskilda OAuth-appar. rclone lagrar OAuth-token i sin konfigurationsfil. Skydda filen med restriktiva behörigheter och paketera den aldrig tillsammans med skriptet.

Bekräfta varje fjärranslutning med ett skrivskyddat listningskommando och ett kvotkommando innan du kör omslutningsskriptet. Använd sökvägar som onedrive:Department/Archive när endast ett underträd omfattas.

Konfigurera och granska båda fjärranslutningarna
rclone version
rclone config
rclone lsd onedrive:
rclone lsd gdrive:
rclone about onedrive: --json | jq
rclone about gdrive: --json | jq

Frys en deterministisk inventering innan byte överförs

Omslutningsskriptet använder rclone lsf rekursivt med en uttrycklig tabbavgränsare och formatet sp, vilket ger storlek följt av sökväg. Det verifierar att varje storlek är numerisk och varje sökväg är relativ och utesluter sedan sökvägar som redan finns i den verifierade kontrollpunkten.

Bash-versionen avvisar filnamn som innehåller tabbar, vagnreturer eller radbrytningar, eftersom radbrytningsavgränsade listor för --files-from-raw inte kan återge dem entydigt. Använd Python-versionen eller ett särskilt utformat inventeringsformat om sådana namn förekommer.

En sökvägsbaserad kontrollpunkt är avsiktligt enkel och lätt att granska. Den förutsätter att källsökvägarna förblir stabila under körningen. Stoppa skrivningar till källan om möjligt, eller återskapa och stäm av inventeringen om samtidiga ändringar förväntas.

Inventeringsprimitiv som används av omslutningsskriptet
rclone lsf "$SOURCE" \
  --recursive \
  --files-only \
  --format "sp" \
  --separator 
    
  

\t' > "$inventory"

Avbryt innan en batch förbrukar reserven

Antalet lokalt lediga byte hämtas från df för mellanlagringens filsystem. Antalet lediga byte i målet hämtas från rclone about --json: skriptet använder free när det anges, annars total minus used. Det kontrollerar det totala antalet väntande byte innan arbetet påbörjas och kontrollerar både lokal kapacitet och målkapacitet igen före varje batch.

Vissa leverantörer eller kontotyper publicerar inte någon ändlig kvot via rclone. Skriptomslaget upplyser om denna begränsning och fortsätter med leverantörens begränsningar som skydd. Betrakta detta som ett krav på övervakning, inte som bevis på att utrymmet är tillräckligt.

Batchgränsen är inte ett absolut maximum för ett enskilt objekt. En fil som är större än den konfigurerade batchen kan bilda en egen batch, så det lokala lediga utrymmet måste räcka till den största filen plus reserven. Fullständig verifiering av målet läser byte från målet men sparar inte en andra lokal kopia i rclone-versionen.

Verifiera båda sidor av gränsen för lokal mellanlagring

Varje batch passerar två oberoende etapper. Först kopierar rclone de valda källsökvägarna till den lokala mellanlagringen med --ignore-existing. Därefter läser check --download båda sidorna och jämför det faktiska innehållet. Sedan kopierar rclone de mellanlagrade sökvägarna till målet och upprepar samma fullständiga bytekontroll.

--ignore-existing gör avbrutna körningar icke-destruktiva: ett befintligt objekt skrivs inte över. Verifieringen måste ändå lyckas innan sökvägen kan läggas till i kontrollpunkten. Om det befintliga målet avviker misslyckas rclone check, och Bashs strikta felhantering stoppar körningen.

Att använda --download är långsammare och förbrukar leverantörens utgående dataöverföring och läsåtgärder, men gör att du inte enbart behöver förlita dig på att två leverantörer tillhandahåller samma hashalgoritm. Kommandot ändrar ingenting på någon av sidorna.

De två etapperna för kopiering och verifiering
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

Kör från OneDrive till Google Drive med begränsad mellanlagring

Exemplet lämnar 15 GiB av den lokala disken orört, behåller 10 GiB ledigt på Google Drive, begränsar en normal batch till 8 GiB eller 200 filer och använder fyra samtidiga överföringar. Målinnehållet skrivs till en ny daterad mapp.

Använd --dry-run först. Då inventeras källan och destinationskvoten förhandskontrolleras utan att något hämtas eller laddas upp. Skriptomslaget visar det totala antalet byte som väntar på överföring. Detta bör stämmas av mot migreringens omfattning före den första faktiska batchen.

Förhandskontrollera och kör sedan med samma omfattning
./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.

Vänd riktningen utan att återanvända tillståndsdata

Omslutningsskriptet är leverantörsneutralt eftersom rclone hanterar fjärradaptrarna. Byt plats på fjärrargumenten för att kopiera Google Drive till OneDrive och ge den körningen en ny målmapp, sökväg för mellanlagring och kontrollpunktsfil.

Google-formaten Dokument, Kalkylark och Presentationer samt andra virtuella format kräver att export konfigureras i rclone och granskas noggrant. Bekräfta de exporterade filändelserna och konverteringsbeteendet med en testuppsättning. En kopiering via kommandoskalet bevarar inte Googles samarbets- och versionshistorik, genvägar eller behörigheter, och inte heller Microsoft-specifika metadata.

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

Skapa en kontrollpunkt först efter verifiering av målet

När målkontrollen har avslutats utan fel lägger omslutningsskriptet till varje relativ sökväg i en kontrollpunkt i oformaterad text. Därefter raderar det filen från den lokala mellanlagringen och tar bort tomma lokala kataloger. Fjärrkällan lämnas orörd.

Under en körning kan kontrollpunkten endast utökas och är lätt att granska med standardverktyg. Bevara den tillsammans med kommandoraden, rclone-versionen, konfigurationens fingeravtryck, inventeringen, loggarna, tidsstämplarna och anteckningarna om godkännande. Redigera den inte för att dölja ett fel om inte målfilen har verifierats oberoende.

En enkel kontrollpunkt baserad på sökvägen kan inte upptäcka ett källobjekt vars innehåll ändras utan att sökvägen ändras. För föränderliga datauppsättningar bör du pausa skrivningar, registrera leverantörens ID:n och ändringsmetadata separat eller använda Python-versionens striktare kontrollpunkt baserad på ID och storlek. För reglerade migreringar eller migreringar av samarbetsdata bör du använda ett hanterat arbetsflöde med uttrycklig ändringskontroll.

Behandla varje avslutningskod som inte är noll som en olöst batch

  • Strikt läge avslutar körningen när ett kommando, en pipeline eller en variabel som inte har angetts orsakar ett fel. Den tillfälliga inventeringskatalogen tas bort automatiskt.
  • rclone försöker överföra igen vid tillfälliga fel, men bestående behörighets-, kvot-, nätverks-, konflikt- eller integritetsfel stoppar batchen.
  • Mellanlagrade filer som inte lagts till i kontrollpunkten finns kvar för granskning, och en identisk omkörning använder --ignore-existing innan deras byte kontrolleras.
  • En avvikande fil på destinationen skrivs aldrig över. Lös konflikten eller välj en tom destinationsrot.
  • Ändra inte en misslyckad kopiering till rclone sync eller move. De kommandona har en annan raderingslogik.
  • Behåll loggarna och kontrollpunkten tills målet har godkänts manuellt.

Säkra värden som blir dataplanet

Mellanlagringsvärden innehåller tillfälligt läsbara kopior av källdata och OAuth-uppdateringstoken. Använd fullständig diskkryptering, restriktiva filbehörigheter, ett särskilt operativsystemskonto, uppdaterade beroenden, kontrollerad administratörsåtkomst och en policy för krypterad säkerhetskopiering som inte oväntat behåller mellanlagrat innehåll.

Undvik hemligheter på kommandoraden eftersom processlistor och skalhistorik kan exponera dem. rclones skyddade konfiguration kan dölja token när de lagras, men den ersätter inte säkerhet på värddatorn. Ta bort tokenmaterial och rester från mellanlagringen efter att migreringen har godkänts, i enlighet med er lagringspolicy.

Övervaka leverantörens granskningsloggar, utgående nätverkstrafik, diskstatus, tillgängliga inoder, processstatus och utdata från rclone. Ett öppet terminalfönster är inte processövervakning. Använd en godkänd tjänstehanterare eller terminalmultiplexer och se till att loggarna sparas beständigt.

Slutför migreringen med underlag, inte bara ett grönt kommando

  • Arkivera den frysta inventeringen, det exakta kommandot, skriptets kontrollsumma, rclone-versionen, fjärrkonfigurationens fingeravtryck och den verifierade kontrollpunkten.
  • Stäm av filantal och känd datamängd i byte per mapp, inte bara totalsumman för enheten.
  • Öppna ett riskbaserat urval av stora, små, gamla, nya, Unicode-baserade, djupt kapslade, arkiverade och konverterade dokument.
  • Testa åtkomsten till målet från representativa användarkonton och återskapa nödvändig delning separat.
  • Granska överhoppade paket, genvägar, länkar, dokument i leverantörens eget format, konflikter och leverantörsvarningar.
  • Behåll källan under en överlappningsperiod och inhämta uttryckligt godkännande från ägaren före varje senare beslut om lagring eller radering.

Vanliga frågor

Varför använder Bash-skriptet rclone copy i stället för sync?

Kopiering raderar inte objekt i källan och tar inte bort objekt i målet som saknas i källan. Synkronisering har en annan logik för avstämning och radering och ingår därför avsiktligt inte i det här arbetsflödet.

Ändrar rclone check --download något i någon av molntjänsterna?

Nej. Det läser och jämför filinnehåll. Skriptet använder det efter varje kopieringsetapp, så en sökväg registreras vid en kontrollpunkt först när destinationsfilens byte överensstämmer med den mellanlagrade filens byte.

Vad händer om målet redan innehåller en fil?

Kopieringen använder --ignore-existing och därefter fullständig byteverifiering. Ett identiskt objekt kan godkännas, medan ett avvikande objekt gör att kontrollen misslyckas. Skriptet skriver aldrig över objektet som orsakar konflikten.

Kan skriptet hantera filer som är större än en batch?

Ja. En enskild fil som är för stor blir en egen batch. Mellanlagringens filsystem måste ha utrymme för den filen plus den konfigurerade lokala reserven.

Migrerar detta behörigheter, versioner eller molnbaserade samarbetsdata?

Nej. Filinnehåll och sökvägar kopieras via rclone. Åtkomstkontroll, versioner, etiketter, kommentarer, genvägar, länkar, lagringsregler och leverantörsspecifika funktioner kräver separat planering och verifiering.

Officiella resurser som använts för den här guiden

Läs guiden