Migre dados entre sistemas de arquivos SMB do File Storage NAS com o Robocopy.
Pré-requisitos
Os dados de source devem estar 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. Ele 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. Billing overview.
Custos de armazenamento se aplicam a ambos os sistemas de arquivos. Adquira um plano de recursos para reduzir despesas. Billing overview.
Há cobrança da Cloud Enterprise Network (CEN) para roteadores de trânsito e conexões entre regiões. Billing.
Preparação
A instância ECS de trânsito precisa acessar ambos os sistemas de arquivos. Certifique-se de que ambos sejam acessíveis na mesma VPC.
-
Visualize as informações do ponto de montagem do sistema de arquivos de source.
Antes de migrar os dados, anote as informações do ponto de montagem e da VPC do sistema de arquivos de source. Para mais informações, consulte Gerencie mount targets.
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 Add a mount target.
-
Configure o ponto de montagem do sistema de arquivos de destino.
-
Sistemas de arquivos na mesma região
Se os pontos de montagem dos sistemas de arquivos de source e destino estiverem na mesma VPC, obtenha os detalhes do ponto de montagem de destino e prossiga para a seção Procedure para migrar os dados.
-
Se os pontos de montagem dos sistemas de arquivos de source e destino não estiverem 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. Create a General-purpose NAS file system in the 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. Add a mount target.
Conecte as VPCs com a CEN. Mount a NAS file system across VPCs in the same region by using 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 por meio da CEN. Mount a NAS file system across accounts and regions by using 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 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 login no console ECS, clique em Create Instance e configure os parâmetros principais a seguir.
Região: Selecione a região onde reside o sistema de arquivos de source.
Rede e Zona: Selecione a VPC, a zona e o vSwitch do sistema de arquivos de source.
Tipo de Instância: Geralmente, o tipo mínimo de instância é suficiente.
-
Imagem: 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 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 -
Armazenamento: Na seção Elastic Ephemeral Disk | File Storage NAS | Dedicated Block Storage Cluster (Optional), clique em Add File System e defina as configurações.
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 destino.
Se os pontos de montagem não estiverem 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. Mount an SMB file system.
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 How to accelerate data migration to an SMB file system of Apsara File Storage NAS.
-
-
Verifique a migração.
Após a migração, execute o comando a seguir para validar 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, ele será sobrescrito.
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. Mount an SMB file system.
Inicie os processos que acessam o sistema de arquivos NAS e confirme se as operações de leitura e escrita 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 escrita 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 mostrado abaixo.C:\Users\Administrator\Desktop>set PATH=%PATH%;C:\python27 C:\Users\Administrator\Desktop>where python C:\Python27\python.exe C:\Users\Administrator\Desktop>path PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\python27 -
Copie o script migration.py a seguir para um diretório local na 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 seguinte formato:
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 <caminho de source>
Define o caminho para o diretório de source. Por exemplo,
-s Z:\especifica o diretório raiz da unidade Z.-d <caminho de destino>
Define o caminho para o diretório de destino. Por exemplo,
-d Y:\especifica o diretório raiz da unidade Y.-r BeginIndex:EndIndex
Especifica 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:\