Dropbox → Google Drive Migration via VPS
A step-by-step procedure for migrating large Dropbox accounts (500 GB – 2 TB) to Google Drive using rclone on a cheap cloud VPS, with a real-time monitoring dashboard. This avoids consuming local internet bandwidth — all data flows server-to-server.
Estimated cost: Free (within UpCloud's €250 trial) or under €0.50 if paying.
Estimated duration: 1–3 days depending on data volume (Google Drive allows 750 GB/day upload).
Prerequisites
- rclone installed on your local Windows PC (e.g. in C:\rclone)
- Dropbox and Google Drive accounts
- An SSH client (built into Windows PowerShell)
Step 1: Create the VPS
- Sign up at https://upcloud.com — free trial gives €250 credit for 30 days
Go to Servers → Deploy server and configure:
- Location: NL-AMS1 (Amsterdam) — or closest to your region
- Plan: Developer, 1 core, 1 GB RAM, €3/mo — sufficient for rclone
- OS: Ubuntu Server 22.04 LTS (or 24.04 LTS)
- Network: Public IPv4 enabled
- Login method: SSH key (see Step 2 if you don't have one)
Initialization script: paste the following:
#!/bin/bash apt-get update -qq && apt-get install -y -qq tmux curl unzip && curl -sSL https://rclone.org/install.sh | bash
- Hostname: migration (or whatever you prefer)
- Click Deploy — server is ready in ~45 seconds
- Note the IP address from the server list
Alternative providers
Any Ubuntu VPS works. Hetzner CX22 (€3.79/mo) is another good option. See the comparison document for details.
Step 2: Generate SSH Key (if needed)
If the VPS provider requires SSH key authentication (e.g. Ubuntu 24.04 on UpCloud):
ssh-keygen -t ed25519 -C "migration"
Press Enter for all defaults. Copy the public key:
Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub" | clip
Paste it in the VPS provider's SSH key field during deployment.
Step 3: SSH into the VPS
ssh root@YOUR_VPS_IP
Accept the host fingerprint when prompted.
Step 4: Configure rclone Remotes
rclone was pre-installed by the initialization script. Now configure the cloud storage remotes.
Create the config file
mkdir -p /root/.config/rclone
Authorize Dropbox
On your local Windows PC (not the VPS), open a new PowerShell window:
C:\rclone\rclone authorize "dropbox"
A browser opens → log in to Dropbox → authorize → rclone prints a JSON token in the terminal. Copy the entire JSON (from { to }).
Authorize Google Drive
On your local Windows PC, in the same or another PowerShell window:
C:\rclone\rclone authorize "drive"
Browser opens → log in to Google → authorize → copy the JSON token.
Write the config file on the VPS
Back in the VPS SSH session, create the config with both tokens. Replace PASTE_DROPBOX_TOKEN_HERE and PASTE_GDRIVE_TOKEN_HERE with the actual JSON tokens:
cat > /root/.config/rclone/rclone.conf << 'CONF' [dropbox] type = dropbox token = PASTE_DROPBOX_TOKEN_HERE [gdrive] type = drive scope = drive token = PASTE_GDRIVE_TOKEN_HERE CONF
Verify both remotes
rclone lsd dropbox: --max-depth 0
Should list your Dropbox root folders. Ctrl+C if the list is long.
rclone lsd gdrive: --max-depth 0
Should list your Google Drive root folders. If both work, you're ready.
Step 5: Start the Migration
Choose a dashboard password (replace YOUR_PASSWORD below), then run:
LOGFILE="/root/migration_$(date +%Y%m%d_%H%M%S).log"
tmux new-session -d -s migration "rclone move dropbox: gdrive: \
--exclude '/GIT/**' \
--update \
--use-server-modtime \
--transfers 16 \
--checkers 32 \
--buffer-size 64M \
--drive-chunk-size 128M \
--tpslimit 10 \
--tpslimit-burst 20 \
--retries 5 \
--retries-sleep 10s \
--low-level-retries 10 \
--ignore-errors \
--stats 1m \
--stats-log-level NOTICE \
--stats-one-line \
--log-file $LOGFILE \
--log-level INFO \
--rc \
--rc-addr 0.0.0.0:5572 \
--rc-user admin \
--rc-pass YOUR_PASSWORD \
--rc-enable-metrics \
--rc-allow-origin '*' \
--progress"
Key flags explained
| Flag | Purpose |
|---|---|
| --exclude '/GIT/**' | Skip the GIT folder |
| --update | Skip files newer on destination |
| --transfers 16 | 16 concurrent file transfers |
| --drive-chunk-size 128M | Larger chunks for big files |
| --tpslimit 10 | Rate limit to avoid Google API 403 errors |
| --retries 5 | Auto-retry on transient failures |
| --rc | Enable remote control API for dashboard |
| --rc-addr 0.0.0.0:5572 | Listen on all interfaces (not just localhost) |
| --rc-user / --rc-pass | Dashboard authentication |
| --rc-allow-origin '*' | Allow CORS for the HTML dashboard |
Modify the exclude pattern
Adjust --exclude '/GIT/**' to match your needs, or add multiple excludes:
--exclude '/GIT/**' \ --exclude '*.tmp' \ --exclude '/Old Backups/**' \
Step 6: Monitor via Dashboard
Open rclone-dashboard.html in your browser (the file provided alongside this procedure).
- Select Remote VPS
Enter:
- URL: http://YOUR_VPS_IP:5572
- Username: admin
- Password: the password you chose in Step 5
- Click Connect
The dashboard shows:
- Overview tab: live progress bar, transfer speed, files transferred, data moved, elapsed time, errors, active transfers with per-file progress, and speed/files charts over time
- Transfers tab: recently completed files with status
- Hourly Log tab: automatic snapshots every hour
You can now close the SSH session — the migration continues in tmux on the VPS.
Step 7: Check Progress (optional)
Via the dashboard
Just open rclone-dashboard.html anytime from any device.
Via SSH
ssh root@YOUR_VPS_IP # Attach to migration terminal tmux attach -t migration # Detach without stopping: Ctrl+B then D # Check if rclone is running ps aux | grep rclone # View recent log entries tail -50 /root/migration_*.log
Step 8: Clean Up
Once the dashboard shows the migration is complete:
Verify by SSH-ing in and checking the log:
tail -20 /root/migration_*.log
- Delete the VPS from the UpCloud console: Servers → select server → Destroy
Optionally remove the SSH known host on your PC:
ssh-keygen -R YOUR_VPS_IP
Troubleshooting
Google Drive 403 rate limit errors
Normal for large migrations. The --tpslimit 10 and --retries 5 flags handle this automatically. Google allows 750 GB/day upload, so a 1.5 TB migration takes ~2 days.
Dropbox token expired
Dropbox tokens expire after a few hours but rclone auto-refreshes using the refresh_token. If auth fails:
# Stop the migration tmux kill-session -t migration # Re-authorize on your local PC C:\rclone\rclone authorize "dropbox" # Edit the config on the VPS nano /root/.config/rclone/rclone.conf # Replace the dropbox token line with the new token # Restart migration (it resumes where it left off) bash /root/run-migration.sh
Dashboard shows "Disconnected"
- Check VPS is still running in UpCloud console
- Verify port 5572 is open: try curl http://YOUR_VPS_IP:5572/core/stats -u admin:YOUR_PASSWORD
- Check rclone is still running: ssh root@YOUR_VPS_IP "ps aux | grep rclone"
Migration was interrupted
rclone with --update is safe to re-run — it skips files already transferred. Just re-run the Step 5 command.
Out of memory on 1 GB VPS
Reduce concurrent operations:
--transfers 8 \ --checkers 16 \ --buffer-size 32M \
Files Included
| File | Purpose |
|---|---|
| rclone-dashboard.html | Browser-based monitoring dashboard (works for both local and remote VPS) |
| Start-RcloneMigration.ps1 | PowerShell script for running the migration locally on Windows (alternative to VPS) |
| vps-setup.sh | Automated VPS setup script (installs rclone, guides through auth, starts migration) |
| VPS-Comparison-rclone-migration.md | Price comparison of Hetzner, UpCloud, DigitalOcean, Vultr |