Migre dados entre sistemas de arquivos SMB do File Storage NAS com o Robocopy.
Pré-requisitos
Os dados de source devem residir em um sistema de arquivos SMB com ponto de montagem em uma VPC.
Contexto
O Robocopy é uma ferramenta de linha de comando nativa do Windows que espelha estruturas de diretórios sem copiar arquivos duplicados. Ela preserva metadados dos arquivos, incluindo datas e carimbos de data/hora.
Faturamento
A migração de dados entre sistemas de arquivos NAS pode gerar as seguintes taxas:
A instância ECS de trânsito gera cobranças conforme sua configuração. Visão geral do faturamento.
Custos de armazenamento aplicam-se a ambos os sistemas de arquivos. Adquira um plano de recursos para reduzir despesas. Visão geral do faturamento.
Há cobrança da Cloud Enterprise Network (CEN) para roteadores de trânsito e conexões inter-regionais. Faturamento.
Preparação
A instância ECS de trânsito precisa acessar ambos os sistemas de arquivos. Garanta que ambos sejam acessíveis na mesma VPC.
-
Visualize as informações do ponto de montagem do sistema de arquivos de source.
Antes da migração, anote as informações do ponto de montagem e da VPC do sistema de arquivos de source. Para mais informações, consulte Gerencie pontos de montagem.
NotaSe o sistema de arquivos tiver apenas um ponto de montagem de rede clássica, crie um ponto de montagem em uma VPC. Para mais informações, consulte Adicionar um ponto de montagem.
-
Configure o ponto de montagem do sistema de arquivos de destino.
-
Sistemas de arquivos na mesma região
Se os pontos de montagem de source e destino estiverem na mesma VPC, obtenha os detalhes do ponto de montagem de destino e prossiga para a seção Procedimento para migrar os dados.
-
Caso os pontos de montagem de source e destino não estejam na mesma VPC, use um dos métodos a seguir para preparar o ponto de montagem:
-
Crie um sistema de arquivos na região e zona de destino. O sistema cria automaticamente um ponto de montagem. Criar um sistema de arquivos NAS de uso geral no console.
NotaAo adquirir um sistema de arquivos SMB NAS de uso geral (Capacidade, Desempenho ou Avançado) com pagamento conforme o uso, selecione a mesma VPC e vSwitch do ponto de montagem de source. Essa ação gera automaticamente o ponto de montagem de destino. Em seguida, adquira um plano de recursos para reduzir custos.
Crie um ponto de montagem em um sistema de arquivos existente. Adicionar um ponto de montagem.
Conecte as VPCs com a CEN. Montar um sistema de arquivos NAS em VPCs na mesma região usando a CEN.
-
-
Sistemas de arquivos em contas ou regiões diferentes
Se os sistemas de arquivos de source e destino estiverem em contas ou regiões diferentes, conecte as VPCs correspondentes com a CEN. Montar um sistema de arquivos NAS em contas e regiões diferentes usando a CEN.
-
Procedimento
Após preparar os pontos de montagem, crie uma instância ECS de trânsito, monte ambos os sistemas de arquivos SMB e use o Robocopy para migrar os dados.
-
Monte os sistemas de arquivos de source e de destino.
ImportanteUse uma instância ECS temporária dedicada à migração. Compartilhar uma instância existente causa contenção de CPU e rede com cargas de trabalho em execução.
Faça logon no console do ECS, clique em Create Instance e configure os parâmetros principais a seguir.
Region: Selecione a região do sistema de arquivos de source.
Network and Zone: Selecione a VPC, a zona e o vSwitch do sistema de arquivos de source.
Instance Type: Geralmente, o tipo mínimo de instância é suficiente.
-
Image: Selecione uma versão do Windows Server. Recomendamos o Windows Server 2019.
NotaSe você usar o Windows Server 2025, desative a assinatura SMB antes de montar um sistema de arquivos do File Storage NAS. Execute o comando a seguir no powershell como administrador e reinicie a instância:
reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v RequireSecuritySignature /t REG_DWORD /d 0 /f -
Storage: Na seção Elastic Ephemeral Disk | File Storage NAS | Dedicated Block Storage Cluster (Optional), clique em Add File System e defina as configurações. Para ver um exemplo, consulte a figura a seguir.
NotaSe os pontos de montagem de source e destino estiverem na mesma VPC, configure as informações de montagem do NAS na página de compra do ECS. Após a inicialização da instância ECS, o sistema monta automaticamente os sistemas de arquivos NAS de source e de destino.
Caso os pontos de montagem não estejam na mesma VPC, região ou conta, configure apenas o sistema de arquivos de source na página de compra do ECS. Depois que a instância iniciar, monte manualmente o sistema de arquivos de destino. Montar um sistema de arquivos SMB.
Depois que a instância iniciar e ambos os sistemas de arquivos estiverem montados, verifique as montagens:
net useEm caso de sucesso, a saída exibirá ambas as montagens. Neste exemplo, a source é a unidade Z e o destino é a unidade Y.
Status Local Remote Network ------------------------------------------------------------------------------ OK Y: \\29e9c24****-eab13.cn-wulanchabu.nas.aliyuncs.com\myshare MicrosoftWindowgNetwork OK Z: \\29fe7f4****-txr31.cn-wulanchabu.nas.aliyuncs.com\myshare MicrosoftWindowgNetwork -
Migre os dados.
Execute o comando a seguir para migrar dados do sistema de arquivos de source (unidade Z) para o sistema de arquivos de destino (unidade Y):
robocopy Z:\ Y:\ /e /w:5 /z /mt:32NotaEste comando migra apenas os dados dentro do diretório especificado, e não o diretório em si.
A tabela a seguir descreve parâmetros importantes. Substitua-os pelos valores reais.
Parâmetro
Descrição
/mt
Número de threads simultâneas. O padrão é 8.
Valores válidos: 1 a 128.
Este exemplo usa 32 threads para cópia multithread.
/w
Define o tempo de espera em segundos entre novas tentativas.
/z
Ativa a transferência retomável.
/e
Copia todos os subdiretórios, inclusive os vazios.
/copyall
Copia todas as informações do arquivo, incluindo:
-
Dados
-
Atributos
-
Carimbos de data/hora
-
Lista de Controle de Acesso (ACL)
-
Informações do proprietário
-
Informações de auditoria
NotaPara acelerar a migração de grandes volumes de dados, como mais de 100 milhões de arquivos pequenos que totalizam mais de 10 TB, instale a versão mais recente do Python na instância ECS Windows e execute a migração. Para mais informações, consulte Como acelerar a migração de dados para um sistema de arquivos SMB do Apsara File Storage NAS.
-
-
Verifique a migração.
Após a migração, execute o comando a seguir para verificar a consistência entre source e destino:
ROBOCOPY Z:\ Y:\ /e /l /ns /njs /njh /ndl /fp /log:reconcile.txtParâmetros principais:
/e: Lista todos os subdiretórios, inclusive os vazios.
/l: Lista diferenças sem modificar ou copiar arquivos.
/fp: Inclui o caminho completo dos arquivos no log. Esse parâmetro é necessário apenas se você omitir /ndl.
/ns: Exclui tamanhos de arquivo do log.
/ndl: Exclui nomes de pastas do log.
/njs: Exclui o resumo do trabalho.
/njh: Exclui o cabeçalho do trabalho.
/log:reconcile.txt: Grava os resultados no arquivo de log reconcile.txt. Se o arquivo já existir, o sistema o sobrescreverá.
Alternar cargas de trabalho para o novo sistema de arquivos
Após a migração, desmonte o sistema de arquivos original e monte o novo em todas as instâncias ECS e contêineres relevantes.
-
Montar um sistema de arquivos NAS diretamente em uma instância ECS
Execute
net usepara registrar as informações atuais de montagem do NAS. Anote a letra da unidade local na qual o sistema de arquivos NAS está montado.-
Execute o comando a seguir para desmontar o sistema de arquivos original.
net use Z: /deleteSubstitua Z: no comando pela letra real da unidade.
NotaExecute o comando net use * /delete para desmontar manualmente todos os sistemas de arquivos montados no Windows.
Execute o comando net use * /delete /y para desmontar automaticamente todos os sistemas de arquivos montados no Windows.
Monte o novo sistema de arquivos na letra de unidade original. Montar um sistema de arquivos SMB.
Inicie os processos que acessam o sistema de arquivos NAS e confirme se as operações de leitura e gravação foram bem-sucedidas.
Modifique as informações de montagem automática no arquivo auto_mount.bat e substitua o ponto de montagem antigo pelo novo.
-
Montar um sistema de arquivos NAS em um contêiner Windows
Modifique o arquivo de configuração YAML existente e substitua o ponto de montagem original pelo novo.
Use o arquivo de configuração modificado para criar um novo pod. Confirme se o novo sistema de arquivos foi montado com sucesso e se as operações de leitura e gravação estão normais.
Recicle todos os pods que usam o sistema de arquivos original.
Após alternar as cargas de trabalho, mantenha os dados no sistema de arquivos original por pelo menos uma semana para evitar perda de dados devido a exclusões acidentais ou erros de sincronização.
Perguntas frequentes
Como acelerar a migração de dados para um sistema de arquivos SMB?
Para acelerar migrações em grande escala (por exemplo, mais de 10 TB com centenas de milhões de arquivos pequenos de cerca de 100 KB cada) enquanto as cargas de trabalho gravam no mesmo sistema de arquivos SMB, instale o Python em uma instância ECS Windows e execute o script de migração a seguir.
Baixe e instale a versão mais recente do Python.
-
Adicione o caminho do executável do Python à variável de ambiente PATH (por exemplo, C:\Python27).
set PATH=%PATH%;C:\python27Você também pode executar o comando
where pythonpara verificar o caminho de instalação do Python, conforme mostra a figura a seguir.
-
Copie o script migration.py a seguir para um diretório local em sua instância ECS, como C:\.
#!/usr/bin/python import os import random import string import sys, getopt import datetime import time def execute_cmd(cmd): print('\tExecuting cmd: %s' % cmd) count = 0 rc = 0 while (count < 3*60): rc = os.system(cmd) if (rc != 0): count += 1 time.sleep(1) continue else: break if rc != 0: print('\tFailed to execute cmd: %s. rc:%d' %(cmd, rc)) return def migrate_subdirs(srcPath, dstPath, rangeBegin, rangeEnd, ignoreFile): currTimeStr = datetime.datetime.now().strftime("%Y-%m-%d_%H:%M:%S") print('Start to migrate from %s to %s for subdir range[%s, %s] at %s.\n' %(srcPath, dstPath, rangeBegin, rangeEnd, currTimeStr)) index = 0 for entry in os.listdir(srcPath): if os.path.isdir(os.path.join(srcPath, entry)): if index >= rangeBegin and index <= rangeEnd: srcSubDir = srcPath + "\\" + entry dstSubDir = dstPath + "\\" + entry print('\tBegin of migrating from the %d th dir %s to %s.' %(index, srcSubDir, dstSubDir)) cmd = "robocopy \"" + srcSubDir + "\" \"" + dstSubDir + "\" /e /w:5 /z /mt:32" if ignoreFile.strip(): cmd += " /XF \"" + ignoreFile + "\"" cmd += " >> robocopy.log" execute_cmd(cmd) print('\tEnd of migrating from %s to %s.\n' %(srcSubDir, dstSubDir)) index += 1 print('Finish to migrate from %s to %s for subdir range[%s, %s] at %s.\n' %(srcPath, dstPath, rangeBegin, rangeEnd, datetime.datetime.now().strftime("%Y-%m-%d_%H:%M:%S"))) def migrate_regfiles(srcPath, dstPath, ignoreFile): currTimeStr = datetime.datetime.now().strftime("%Y-%m-%d_%H:%M:%S") print('Start to migrate from %s to %s for regular files at %s.\n' %(srcPath, dstPath, currTimeStr)) for entry in os.listdir(srcPath): if os.path.isfile(os.path.join(srcPath, entry)): print('\tBegin of migrating %s from %s to %s.\n' %(entry, srcPath, dstPath)) cmd = "attrib -R \"" + dstPath + "\\\\" + entry + "\"" execute_cmd(cmd) cmd = "copy \"" + srcPath + "\\\\" + entry + "\" \"" + dstPath + "\" /Y" if ignoreFile.strip(): cmd += " /XF \"" + ignoreFile + "\"" cmd += " >> robocopy.log" execute_cmd(cmd) print('\tEnd of migrating %s from %s to %s' %(entry, srcPath, dstPath)) print('Finish to migrate from %s to %s for regular files at %s.\n' %(srcPath, dstPath, datetime.datetime.now().strftime("%Y-%m-%d_%H:%M:%S"))) def main(argv): srcPath = '' dstPath = '' range = '' ignoreFile = '' try: opts, args = getopt.getopt(argv,"hs:d:r:i:f",["srcPath=","dstPath=","range=","ignore="]) except getopt.GetoptError: print('migration.py -s <source path> -d <destination path> [-r BeginIndex:EndIndex | -f] [-i ignoredFile]') print('example: migration.py -s x:\pic -d z:\pic [-r 0:100]') sys.exit(2) subdironly = False fileonly = False for opt, arg in opts: if opt == '-h': print('migration.py -s <source path> -d <destination path> [-r BeginIndex:EndIndex | -f] [-i ignoredFile]') sys.exit() elif opt in ("-s", "--srcPath"): srcPath = arg elif opt in ("-d", "--dstPath"): dstPath = arg elif opt in ("-r", "--range"): range = arg subdironly = True elif opt in ("-f", "--file"): fileonly = True elif opt in ("-i", "--ignore"): ignoreFile = arg if not srcPath.strip() or not dstPath.strip(): print('migration.py -s <source path> -d <destination path> [-r BeginIndex:EndIndex | -f] [-i ignoredFile]') sys.exit() if subdironly and fileonly: print('migration.py -s <source path> -d <destination path> [-r BeginIndex:EndIndex | -f] [-i ignoredFile]') sys.exit() if not fileonly: if not range.strip(): rangeBegin = 0 rangeEnd = sys.maxsize-1 else: rangeBegin, rangeEnd = (int(x) for x in range.split(":")) if rangeBegin < 0 or rangeEnd >= sys.maxsize or rangeEnd < rangeBegin: print('migration.py -s <source path> -d <destination path> [-r BeginIndex:EndIndex | -f] [-i ignoredFile]') print('example: migration.py -s x:\pic -d z:\pic -r 0:99') sys.exit() migrate_subdirs(srcPath, dstPath, rangeBegin, rangeEnd, ignoreFile) if not subdironly: migrate_regfiles(srcPath, dstPath, ignoreFile) if __name__ == "__main__": main(sys.argv[1:]) -
Migre os dados. O comando usa o formato a seguir:
python ./migration.py -s <source path> -d <destination path> [-r BeginIndex:EndIndex | -f] [-i ignoredFile].A tabela a seguir descreve os principais parâmetros do comando.
Parâmetro
Descrição
-s <source path>
Especifica o caminho do diretório de source. Por exemplo,
-s Z:\especifica o diretório raiz da unidade Z.-d <destination path>
Define o caminho do diretório de destino. Por exemplo,
-d Y:\especifica o diretório raiz da unidade Y.-r BeginIndex:EndIndex
Determina o intervalo de subdiretórios a migrar, de
BeginIndexatéEndIndex. Por exemplo,-r 1:100migra os subdiretórios de 1 a 100.-f
Migra apenas os arquivos regulares no nível superior do diretório de source.
Migra todos os arquivos no diretório do sistema de arquivos de source e ignora limitações de escopo.
-i ignoredFile
Indica arquivos no diretório de source a excluir da migração. Por exemplo,
-i ignored.txtexclui o arquivo chamadoignored.txt.NotaPor padrão, o script executa o Robocopy para todos os subdiretórios em sequência e depois copia os arquivos do nível raiz. Para acelerar a migração, execute o script em paralelo em vários clientes com intervalos exclusivos de subdiretórios. Por exemplo, o primeiro cliente usa
-r 0:9999, o segundo usa-r 10000:19999, e assim por diante.Por exemplo, para migrar dados da source Z:\ para o destino Y:\, execute o comando a seguir:
python ./migration.py -s Z:\ -d Y:\