Documentação Técnica · Infraestrutura

Migração OneDrive
para Google Drive

Guia completo para transferência de arquivos em nuvem usando rclone no VPS da empresa
1.0
Março 2026
rclone
Migração real 25/03/2026
✓ Testado e validado
01 · Visão Geral

O que este processo faz

Copia todos os arquivos do OneDrive (Microsoft 365) para o Google Drive usando o rclone — ferramenta gratuita e open source. A migração roda no VPS da empresa, sem ocupar o computador de ninguém.

Segurança
Não apaga nada

OneDrive permanece intacto até você decidir cancelar o plano Microsoft

Resiliência
Retoma sozinho

Se cair no meio, basta rodar novamente — pula o que já foi copiado

Custo
Gratuito

rclone é open source. Roda no VPS que você já paga

Pré-requisito principal
Admin Azure

Acesso de administrador ao portal.azure.com

Tempo estimado (800 GB)
8–24 horas

VPS fica trabalhando sozinho, sem precisar ficar online

Google Workspace
Já contratado

Domínio verificado e e-mail funcionando antes de iniciar

Parte 01

Preparar o VPS

01

Conectar no VPS via SSH

ssh usuario@IP-DO-VPS
02

Instalar o rclone

curl https://rclone.org/install.sh | sudo bash

Se já estiver instalado, o script pula automaticamente.

Parte 02

Registrar Aplicativo no Azure

Para o rclone autenticar no OneDrive da empresa, é necessário criar um "App Registration" no Azure. Feito uma única vez — leva 5 minutos.

01

Acessar o portal Azure

Acesse portal.azure.com com a conta de administrador da empresa.

02

Criar novo App Registration

  1. Na barra de busca no topo, digite App registrations → clique
  2. Clique em New registration
  3. No campo Name, coloque rclone
  4. Clique em Register
03

Copiar o Client ID

Na página do app, copie o valor de Application (client) ID — você vai precisar depois.

Também copie o Directory (tenant) ID na mesma página.

04

Criar o Client Secret

  1. Menu esquerdo → Certificates & secrets
  2. Clique em New client secret
  3. Em Description coloque rclone → clique Add
  4. Copie o valor na coluna Value (não o Secret ID)
O Value aparece apenas uma vez. Copie imediatamente — depois de sair da página não é possível visualizá-lo novamente.
05

Adicionar permissões de acesso ao OneDrive

  1. Menu esquerdo → API permissions
  2. Clique Add a permissionMicrosoft GraphDelegated permissions
  3. Busque Files.ReadWrite → marque Files.ReadWrite.All
  4. Clique Add permissions
  5. Clique em "Grant admin consent for [empresa]" → confirme
06

Habilitar autenticação por código (Device Flow)

  1. Menu esquerdo → Authentication
  2. Role até Advanced settings
  3. Em Allow public client flows → mude para Yes
  4. Clique Save
Sem essa configuração, a autenticação por código retorna erro AADSTS7000218.
Parte 03

Autenticar OneDrive no VPS

Autenticação via código — sem instalar nada no computador pessoal. O usuário apenas abre uma URL e digita um código de 9 caracteres.

01

Gerar o código de autenticação

No VPS, substitua os valores e execute:

TENANT="SEU-TENANT-ID" CLIENT_ID="SEU-CLIENT-ID" curl -s -X POST \ "https://login.microsoftonline.com/${TENANT}/oauth2/v2.0/devicecode" \ -H "Content-Type: application/x-www-form-urlencoded" \ --data-urlencode "client_id=${CLIENT_ID}" \ --data-urlencode "scope=https://graph.microsoft.com/Files.ReadWrite.All offline_access" \ | python3 -c " import sys, json r = json.load(sys.stdin) print('URL:', r['verification_uri']) print('CÓDIGO:', r['user_code']) with open('/home/usuario/device_code.txt', 'w') as f: f.write(r['device_code']) print('device_code salvo.') "
02

Autorizar no navegador

  1. Abra https://login.microsoft.com/device no navegador
  2. Digite o código de 9 caracteres exibido no terminal
  3. Faça login com a conta Microsoft da empresa
  4. Clique em Autorizar
03

Capturar o token

Após autorizar, execute no VPS:

python3 << 'EOF' import urllib.request, urllib.parse, json tenant = "SEU-TENANT-ID" client_id = "SEU-CLIENT-ID" with open('/home/usuario/device_code.txt') as f: device_code = f.read().strip() data = urllib.parse.urlencode({ "client_id": client_id, "grant_type": "urn:ietf:params:oauth:grant-type:device_code", "device_code": device_code }).encode() url = f"https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token" req = urllib.request.Request(url, data=data, headers={"Content-Type": "application/x-www-form-urlencoded"}) try: with urllib.request.urlopen(req) as resp: r = json.loads(resp.read()) with open('/home/usuario/od_token.json', 'w') as f: json.dump(r, f) print("TOKEN CAPTURADO COM SUCESSO") except urllib.error.HTTPError as e: r = json.loads(e.read()) print("ERRO:", r.get('error_description','')) EOF
04

Obter o Drive ID

python3 << 'EOF' import urllib.request, json with open('/home/usuario/od_token.json') as f: t = json.load(f) req = urllib.request.Request( "https://graph.microsoft.com/v1.0/me/drive", headers={"Authorization": f"Bearer {t['access_token']}"} ) with urllib.request.urlopen(req) as resp: d = json.loads(resp.read()) print("DRIVE ID:", d['id']) print("TIPO:", d['driveType']) with open('/home/usuario/drive_info.json', 'w') as f: json.dump({'drive_id': d['id'], 'drive_type': d['driveType']}, f) EOF

Anote o Drive ID — será usado na configuração do rclone.

Parte 04

Autenticar Google Drive

01

Instalar rclone no Mac (se necessário)

brew install rclone
02

Autorizar acesso ao Google Drive

rclone authorize "drive"

O navegador abre automaticamente. Faça login com a conta Google Workspace da empresa e clique em Permitir.

O terminal exibe um JSON — copie o conteúdo completo.

03

Salvar o token no VPS

Cole o JSON gerado e salve no arquivo /home/usuario/gd_token.json no VPS.

Parte 05

Configurar o rclone no VPS

01

Criar o arquivo de configuração

python3 << 'EOF' import json, os with open('/home/usuario/od_token.json') as f: od = json.load(f) with open('/home/usuario/gd_token.json') as f: gd = json.load(f) with open('/home/usuario/drive_info.json') as f: drive = json.load(f) od_token = json.dumps({ "access_token": od['access_token'], "token_type": "Bearer", "refresh_token": od['refresh_token'], "expiry": "2020-01-01T00:00:00Z" }, separators=(',', ':')) gd_token = json.dumps({ "access_token": gd['access_token'], "token_type": "Bearer", "refresh_token": gd['refresh_token'], "expiry": "2020-01-01T00:00:00Z" }, separators=(',', ':')) config = f"""[onedrive] type = onedrive client_id = SEU-CLIENT-ID client_secret = SEU-CLIENT-SECRET token = {od_token} drive_id = {drive['drive_id']} drive_type = {drive['drive_type']} [gdrive] type = drive scope = drive token = {gd_token} """ os.makedirs('/home/usuario/.config/rclone', exist_ok=True) with open('/home/usuario/.config/rclone/rclone.conf', 'w') as f: f.write(config) print("Configuração salva!") EOF
02

Testar as conexões

# Testar OneDrive — deve listar as pastas rclone lsd onedrive: --max-depth 1 # Testar Google Drive — sem erros = OK rclone ls gdrive: --max-depth 1
Parte 06

Iniciar a Migração

01

Rodar a migração em background

python3 -c " import subprocess proc = subprocess.Popen( ['rclone', 'copy', 'onedrive:', 'gdrive:', '--transfers', '4', '--checkers', '8', '--log-file', '/home/usuario/rclone-migration.log', '--log-level', 'INFO'], stdout=open('/home/usuario/rclone-out.log', 'w'), stderr=subprocess.STDOUT ) print('Migração iniciada. PID:', proc.pid) with open('/home/usuario/rclone.pid', 'w') as f: f.write(str(proc.pid)) "
A migração roda em background. O VPS continua trabalhando mesmo que você feche o terminal.
02

Acompanhar o progresso

# Ver arquivos sendo copiados em tempo real tail -f /home/usuario/rclone-migration.log # Ver se o processo está rodando ps aux | grep rclone | grep -v grep
03

Retomar se cair

Se a migração parar por qualquer motivo, basta rodar o mesmo comando do Passo 01 novamente. O rclone pula automaticamente os arquivos já copiados.

Antes de cancelar o Microsoft 365: verifique no Google Drive que todos os arquivos chegaram corretamente. Compare as pastas principais, confirme com a equipe, e só então cancele o plano Microsoft.
Referência

Parâmetros utilizados

Parâmetro Valor Descrição
--transfers 44Copia 4 arquivos em paralelo
--checkers 88Verifica 8 arquivos em paralelo
--log-level INFOINFORegistra cada arquivo copiado no log
rclone copyCopia sem apagar a origem
Resolução de Problemas

Erros comuns e soluções

Erro Causa Solução
AADSTS650051 App padrão do rclone bloqueado pelo tenant Criar App Registration próprio no Azure (Parte 02)
AADSTS7000218 Public client flows desabilitado Authentication → Allow public client flows → Yes
Permission denied no log Pasta de log sem permissão de escrita Usar pasta home do usuário em vez de /var/log
Invalid Credentials (Google) Access token expirado Definir expiry para data passada — rclone renova com o refresh_token
drive_id não encontrado Config sem drive_id Consultar Graph API com token válido (Parte 03, Passo 04)
Signature is invalid Token corrompido no copy-paste Usar device code flow em vez de copiar tokens manualmente