Tous les produits
Search
Centre de documentation

File Storage NAS:Migrer des données à l'aide de Robocopy

Dernière mise à jour :Aug 09, 2026

Migrez des données entre des systèmes de fichiers SMB File Storage NAS à l'aide de Robocopy.

Prérequis

Les données source doivent se trouver dans un système de fichiers SMB doté d'un point de montage dans un VPC.

Contexte

Robocopy est un outil en ligne de commande intégré à Windows qui réplique les structures de répertoires sans copier les fichiers en double. Il conserve les métadonnées des fichiers, notamment les dates et les horodatages.

Facturation

La migration de données entre des systèmes de fichiers NAS peut entraîner les frais suivants :

  • L'instance ECS de transit est facturée selon sa configuration. Présentation de la facturation.

  • Des frais de stockage s'appliquent aux deux systèmes de fichiers. Souscrivez à un plan de ressources pour réduire les coûts. Présentation de la facturation.

  • Des frais Cloud Enterprise Network (CEN) s'appliquent aux routeurs de transit et aux connexions interrégionales. Facturation.

Préparation

L'instance ECS de transit doit pouvoir accéder aux deux systèmes de fichiers. Assurez-vous qu'ils sont tous deux accessibles depuis le même VPC.

  1. Consultez les informations du point de montage du système de fichiers source.

    Avant de migrer les données, notez le point de montage et les informations VPC du système de fichiers source. Pour plus d'informations, consultez la rubrique Gérer les points de montage.

    Remarque

    Si votre système de fichiers ne dispose que d'un point de montage sur le réseau classique, vous devez créer un point de montage dans un VPC. Pour plus d'informations, consultez la rubrique Ajouter un point de montage.

  2. Configurez le point de montage du système de fichiers de destination.

    • Les systèmes de fichiers se trouvent dans la même région

      • Si les points de montage des systèmes de fichiers source et de destination se trouvent dans le même VPC, récupérez les détails du point de montage de destination, puis passez à la section Procédure pour migrer les données.

      • Si les points de montage des systèmes de fichiers source et de destination ne se trouvent pas dans le même VPC, utilisez l'une des méthodes suivantes pour préparer le point de montage :

    • Les systèmes de fichiers se trouvent dans des comptes ou des régions différents

      Si les systèmes de fichiers source et de destination se trouvent dans des comptes ou des régions différents, connectez leurs VPC à l'aide de CEN. Monter un système de fichiers NAS via des comptes et des régions à l'aide de CEN.

Procédure

Une fois les points de montage préparés, créez une instance ECS de transit, montez les deux systèmes de fichiers SMB et utilisez Robocopy pour migrer les données.

  1. Montez les systèmes de fichiers source et de destination.

    Important

    Utilisez une instance ECS temporaire dédiée à la migration. Le partage d'une instance existante entraîne une contention du processeur et du réseau avec les charges de travail en cours d'exécution.

    Connectez-vous à la console ECS, cliquez sur Create Instance, et configurez les paramètres clés suivants.

    • Region : sélectionnez la région où réside le système de fichiers source.

    • Network and Zone : sélectionnez le VPC, la zone et le vSwitch du système de fichiers source.

    • Instance Type : le type d'instance minimal suffit généralement.

    • Image : sélectionnez une version de Windows Server. Nous vous recommandons de choisir Windows Server 2019.

      Remarque

      Si vous utilisez Windows Server 2025, vous devez désactiver la signature SMB avant de pouvoir monter un système de fichiers File Storage NAS. Exécutez la commande suivante dans PowerShell en tant qu'administrateur, puis redémarrez l'instance :

      reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v RequireSecuritySignature /t REG_DWORD /d 0 /f
    • Storage : dans la section Elastic Ephemeral Disk | File Storage NAS | Dedicated Block Storage Cluster (Optional), cliquez sur Add File System et configurez les paramètres.

      Remarque
      • Si les points de montage source et de destination se trouvent dans le même VPC, vous pouvez configurer les informations de montage NAS sur la page d'achat de l'instance ECS. Après le démarrage de l'instance ECS, les systèmes de fichiers NAS source et de destination sont automatiquement montés.

      • Si les points de montage ne se trouvent pas dans le même VPC, la même région ou le même compte, configurez uniquement le système de fichiers source sur la page d'achat de l'instance ECS. Une fois l'instance démarrée, montez manuellement le système de fichiers de destination. Monter un système de fichiers SMB.

    Une fois l'instance démarrée et les deux systèmes de fichiers montés, vérifiez les montages :

    net use

    En cas de réussite, la sortie affiche les deux montages. Dans cet exemple, la source est le lecteur Z et la destination est le lecteur 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. Migrez les données.

    Exécutez la commande suivante pour migrer les données du système de fichiers source (lecteur Z) vers le système de fichiers de destination (lecteur Y) :

    robocopy Z:\ Y:\ /e /w:5 /z /mt:32
    Remarque

    Cette commande migre uniquement les données contenues dans le répertoire spécifié, et non le répertoire lui-même.

    Le tableau suivant décrit les paramètres importants. Remplacez-les par vos valeurs réelles.

    Paramètre

    Description

    /mt

    Nombre de threads simultanés. La valeur par défaut est 8.

    Valeurs valides : 1 à 128.

    Cet exemple utilise 32 threads pour une copie multithread.

    /w

    Spécifie le temps d'attente en secondes entre les tentatives.

    /z

    Active le transfert reprenable.

    /e

    Copie tous les sous-répertoires, y compris les vides.

    /copyall

    Copie toutes les informations relatives aux fichiers. Cela inclut :

    • Données

    • Attributs

    • Horodatages

    • Liste de contrôle d'accès (ACL)

    • Informations sur le propriétaire

    • Informations d'audit

    Remarque

    Pour accélérer la migration de volumes massifs de données, tels que plus de 100 millions de petits fichiers dépassant au total 10 To, vous pouvez installer la dernière version de Python sur l'instance ECS Windows pour effectuer la migration. Pour plus d'informations, consultez la rubrique Comment accélérer la migration des données vers un système de fichiers SMB d'Apsara File Storage NAS.

  3. Vérifiez la migration.

    Après la migration, exécutez la commande suivante pour vérifier la cohérence entre la source et la destination :

    ROBOCOPY Z:\ Y:\ /e /l /ns /njs /njh /ndl /fp /log:reconcile.txt

    Paramètres clés :

    • /e : liste tous les sous-répertoires, y compris les vides.

    • /l : liste les différences sans modifier ni copier les fichiers.

    • /fp : inclut le chemin complet des fichiers dans le journal. Ce paramètre n'est nécessaire que si vous omettez /ndl.

    • /ns : exclut les tailles de fichier du journal.

    • /ndl : exclut les noms de dossier du journal.

    • /njs : exclut le résumé du travail.

    • /njh : exclut l'en-tête du travail.

    • /log:reconcile.txt : écrit les résultats dans le fichier journal reconcile.txt. Si le fichier existe déjà, il est écrasé.

Basculer les charges de travail vers le nouveau système de fichiers

Après la migration, démontez le système de fichiers d'origine et montez le nouveau sur toutes les instances ECS et conteneurs concernés.

  • Monter directement un système de fichiers NAS sur une instance ECS

    1. Exécutez net use pour enregistrer les informations de montage NAS actuelles. Notez la lettre de lecteur local sur laquelle le système de fichiers NAS est monté.

    2. Exécutez la commande suivante pour démonter le système de fichiers d'origine.

      net use Z: /delete

      Remplacez Z: dans la commande par la lettre de lecteur réelle.

      Remarque
      • Exécutez la commande net use * /delete pour démonter manuellement tous les systèmes de fichiers montés dans Windows.

      • Exécutez la commande net use * /delete /y pour démonter automatiquement tous les systèmes de fichiers montés dans Windows.

    3. Montez le nouveau système de fichiers sur la lettre de lecteur d'origine. Monter un système de fichiers SMB.

    4. Démarrez les processus qui accèdent au système de fichiers NAS et confirmez que les opérations de lecture et d'écriture réussissent.

    5. Modifiez les informations de montage automatique dans le fichier auto_mount.bat en remplaçant l'ancien point de montage par le nouveau.

  • Monter un système de fichiers NAS dans un conteneur Windows

    1. Modifiez le fichier de configuration YAML existant pour remplacer le point de montage d'origine par le nouveau.

    2. Utilisez le fichier de configuration modifié pour créer un nouveau pod. Confirmez que le nouveau système de fichiers est monté correctement et que les opérations de lecture et d'écriture fonctionnent normalement.

    3. Recyclez tous les pods qui utilisent le système de fichiers d'origine.

Important

Après avoir basculé les charges de travail, conservez les données sur le système de fichiers d'origine pendant au moins une semaine afin d'éviter toute perte de données due à une suppression accidentelle ou à des erreurs de synchronisation.

FAQ

Comment accélérer la migration des données vers un système de fichiers SMB ?

Pour accélérer les migrations à grande échelle (par exemple, plus de 10 To avec des centaines de millions de petits fichiers d'environ 100 Ko chacun) tandis que des charges de travail écrivent dans le même système de fichiers SMB, installez Python sur une instance ECS Windows et exécutez le script de migration suivant.

  1. Téléchargez et installez la dernière version de Python.

  2. Ajoutez le chemin d'accès à l'exécutable Python à la variable d'environnement PATH (par exemple, C:\Python27).

    set PATH=%PATH%;C:\python27

    Vous pouvez également exécuter la commande where python pour vérifier le chemin d'installation de Python, comme indiqué ci-dessous.

    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
  3. Copiez le script migration.py suivant dans un répertoire local de votre instance ECS, tel que 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. Migrez les données. La commande utilise le format suivant : python ./migration.py -s <source path> -d <destination path> [-r BeginIndex:EndIndex | -f] [-i ignoredFile].

    Le tableau suivant décrit les principaux paramètres de la commande.

    Paramètre

    Description

    -s <source path>

    Spécifie le chemin d'accès au répertoire source. Par exemple, -s Z:\ spécifie le répertoire racine du lecteur Z.

    -d <destination path>

    Spécifie le chemin d'accès au répertoire de destination. Par exemple, -d Y:\ spécifie le répertoire racine du lecteur Y.

    -r BeginIndex:EndIndex

    Spécifie la plage de sous-répertoires à migrer, de BeginIndex à EndIndex. Par exemple, -r 1:100 migre les sous-répertoires 1 à 100.

    -f

    Migre uniquement les fichiers réguliers au niveau supérieur du répertoire source.

    Migre tous les fichiers du répertoire du système de fichiers source, en ignorant les limites de portée.

    -i ignoredFile

    Spécifie les fichiers du répertoire source à exclure de la migration. Par exemple, -i ignored.txt exclut le fichier nommé ignored.txt.

    Remarque

    Par défaut, le script exécute Robocopy pour tous les sous-répertoires de manière séquentielle, puis copie les fichiers au niveau racine. Pour accélérer la migration, exécutez le script en parallèle sur plusieurs clients avec des plages de sous-répertoires uniques. Par exemple, le premier client utilise -r 0:9999, le deuxième utilise -r 10000:19999, et ainsi de suite.

    Par exemple, pour migrer des données de la source Z:\ vers la destination Y:\, exécutez la commande suivante :

    python ./migration.py -s Z:\ -d Y:\

Rubriques connexes