Todos os produtos
Search
Central de documentação

File Storage NAS:Migrar dados usando o Robocopy

Última atualização: Jun 27, 2026

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.

  1. 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.

    Nota

    Se 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.

  2. 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:

    • 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.

  1. Monte os sistemas de arquivos de source e de destino.

    Importante

    Use 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.

      Nota

      Se 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.

      image.png

      Nota
      • Se 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 use

    Em 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

  2. 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:32
    Nota

    Este 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

    Nota

    Para 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.

  3. 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.txt

    Parâ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

    1. Execute net use para registrar as informações atuais de montagem do NAS. Anote a letra da unidade local na qual o sistema de arquivos NAS está montado.

    2. Execute o comando a seguir para desmontar o sistema de arquivos original.

      net use Z: /delete

      Substitua Z: no comando pela letra real da unidade.

      Nota
      • Execute 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.

    3. Monte o novo sistema de arquivos na letra de unidade original. Montar um sistema de arquivos SMB.

    4. Inicie os processos que acessam o sistema de arquivos NAS e confirme se as operações de leitura e gravação foram bem-sucedidas.

    5. 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

    1. Modifique o arquivo de configuração YAML existente e substitua o ponto de montagem original pelo novo.

    2. 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.

    3. Recicle todos os pods que usam o sistema de arquivos original.

Importante

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.

  1. Baixe e instale a versão mais recente do Python.

  2. Adicione o caminho do executável do Python à variável de ambiente PATH (por exemplo, C:\Python27).

    set PATH=%PATH%;C:\python27

    Você também pode executar o comando where python para verificar o caminho de instalação do Python, conforme mostra a figura a seguir.Python path

  3. 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:])
  4. 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 BeginIndex até EndIndex. Por exemplo, -r 1:100 migra 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.txt exclui o arquivo chamado ignored.txt.

    Nota

    Por 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:\

Tópicos relacionados