All Products
Search
Document Center

File Storage NAS:Migrasi data menggunakan Robocopy

Last Updated:May 28, 2026

Migrasikan data antar sistem file SMB File Storage NAS menggunakan Robocopy.

Prasyarat

Data sumber harus berada dalam sistem file SMB yang memiliki titik pemasangan di VPC.

Latar Belakang

Robocopy adalah alat baris perintah bawaan Windows yang mereplikasi struktur direktori tanpa menyalin file duplikat. Alat ini mempertahankan metadata file, termasuk tanggal dan timestamp.

Billing

Migrasi data antar sistem file NAS dapat menimbulkan biaya berikut:

  • Instans ECS transit dikenakan biaya berdasarkan konfigurasinya. Ikhtisar penagihan.

  • Biaya penyimpanan berlaku untuk kedua sistem file. Beli paket sumber daya untuk mengurangi biaya. Ikhtisar penagihan.

  • Biaya Cloud Enterprise Network (CEN) berlaku untuk router transit dan koneksi antar-wilayah. Penagihan.

Persiapan

Instans ECS transit harus dapat mengakses kedua sistem file tersebut. Pastikan keduanya dapat dijangkau dari VPC yang sama.

  1. Periksa informasi titik pemasangan sumber.

    Sebelum memulai migrasi, catat detail titik pemasangan sistem file sumber dan VPC terkaitnya. Untuk informasi lebih lanjut, lihat Lihat titik pemasangan.

    Catatan

    Jika sistem file Anda hanya memiliki titik pemasangan di jaringan klasik, Anda harus membuat titik pemasangan baru di VPC. Untuk petunjuknya, lihat Buat titik pemasangan.

  2. Konfigurasikan titik pemasangan sistem file tujuan.

    • Sistem file berada di wilayah yang sama

      • Jika titik pemasangan sistem file sumber dan tujuan berada di VPC yang sama, ambil detail titik pemasangan tujuan lalu lanjutkan ke bagian Prosedur untuk melakukan migrasi data.

      • Jika titik pemasangan sistem file sumber dan tujuan tidak berada di VPC yang sama, gunakan salah satu metode berikut untuk menyiapkan titik pemasangan:

    • Sistem file berada di akun atau wilayah berbeda

      Jika sistem file sumber dan tujuan berada di akun atau wilayah berbeda, hubungkan VPC-nya menggunakan CEN. Pasang sistem file NAS lintas akun dan wilayah menggunakan CEN.

Prosedur

Setelah menyiapkan titik pemasangan, buat instans ECS transit, pasang kedua sistem file SMB, lalu gunakan Robocopy untuk melakukan migrasi data.

  1. Pasang sistem file sumber dan tujuan.

    Penting

    Gunakan instans ECS sementara khusus untuk migrasi. Berbagi instans yang sudah ada menyebabkan kontensi CPU dan jaringan dengan beban kerja yang sedang berjalan.

    Masuk ke Konsol ECS, klik Create Instance, lalu konfigurasikan parameter kunci berikut.

    • Region: Pilih wilayah tempat sistem file sumber berada.

    • Network and Zone: Pilih VPC, zona, dan vSwitch sistem file sumber.

    • Instance Type: Tipe instans minimum biasanya sudah cukup.

    • Image: Pilih versi Windows Server. Kami merekomendasikan Windows Server 2019.

      Catatan

      Jika Anda menggunakan Windows Server 2025, Anda harus menonaktifkan SMB signing sebelum dapat memasang sistem file File Storage NAS. Jalankan perintah berikut di PowerShell sebagai administrator, lalu restart instans:

      reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v RequireSecuritySignature /t REG_DWORD /d 0 /f
    • Storage: Di bagian Elastic Ephemeral Disk | File Storage NAS | Dedicated Block Storage Cluster (Optional), klik Add File System lalu konfigurasikan pengaturannya. Contohnya ditunjukkan pada gambar berikut.

      image.png

      Catatan
      • Jika titik pemasangan sumber dan tujuan berada di VPC yang sama, Anda dapat mengonfigurasi informasi pemasangan NAS pada halaman pembelian ECS. Setelah instans ECS berjalan, sistem file NAS sumber dan tujuan akan dipasang secara otomatis.

      • Jika titik pemasangan tidak berada di VPC, wilayah, atau akun yang sama, konfigurasikan hanya sistem file sumber pada halaman pembelian ECS. Setelah instans berjalan, pasang sistem file tujuan secara manual. Pasang sistem file SMB.

    Setelah instans berjalan dan kedua sistem file telah dipasang, verifikasi pemasangannya:

    net use

    Jika berhasil, output akan menampilkan kedua pemasangan tersebut. Pada contoh ini, sumber berada di drive Z dan tujuan di drive 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. Lakukan migrasi data.

    Jalankan perintah berikut untuk memigrasikan data dari sistem file sumber (drive Z) ke sistem file tujuan (drive Y).

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

    Perintah ini hanya memigrasikan data di dalam direktori yang ditentukan, bukan direktorinya sendiri.

    Tabel berikut menjelaskan parameter utama. Sesuaikan nilainya berdasarkan kebutuhan aktual Anda.

    Parameter

    Deskripsi

    /mt

    Menentukan jumlah thread konkuren. Nilai default-nya adalah 8.

    Nilainya harus berupa bilangan bulat antara 1 hingga 128.

    Contoh ini menggunakan 32 thread untuk penyalinan multithreaded.

    /w

    Mengatur interval dalam detik antar percobaan ulang setelah terjadi error.

    /z

    Menyalin file dalam mode yang dapat dilanjutkan kembali (restartable).

    /e

    Menyalin subdirektori, termasuk yang kosong.

    /copyall

    Menyalin semua informasi file, termasuk:

    • Data

    • Atribut

    • Timestamp

    • Daftar kontrol akses (ACL)

    • Informasi pemilik

    • Informasi audit

    Catatan

    Untuk mempercepat migrasi data dalam jumlah besar—misalnya ratusan juta file kecil yang melebihi 10 TB—Anda dapat menginstal versi terbaru Python pada instans ECS Windows untuk melakukan migrasi. Untuk informasi selengkapnya, lihat Percepat migrasi data ke sistem file SMB.

  3. Verifikasi migrasi.

    Setelah migrasi, jalankan perintah berikut untuk memverifikasi konsistensi antara sumber dan tujuan:

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

    Parameter utama:

    • /e: Menampilkan semua subdirektori, termasuk yang kosong.

    • /l: Menampilkan perbedaan tanpa memodifikasi atau menyalin file.

    • /fp: Menyertakan path lengkap file dalam log. Parameter ini hanya diperlukan jika Anda menghilangkan /ndl.

    • /ns: Tidak menyertakan ukuran file dalam log.

    • /ndl: Tidak menyertakan nama folder dalam log.

    • /njs: Tidak menyertakan ringkasan tugas.

    • /njh: Tidak menyertakan header tugas.

    • /log:reconcile.txt: Menulis hasil ke file log reconcile.txt. Jika file tersebut sudah ada, isinya akan ditimpa.

Pindahkan beban kerja ke sistem file baru

Setelah migrasi, lepas pemasangan sistem file asli dan pasang sistem file baru pada semua instans ECS dan kontainer terkait.

  • Pasang sistem file NAS langsung pada instans ECS

    1. Jalankan net use untuk mencatat informasi pemasangan NAS saat ini. Catat huruf drive lokal tempat sistem file NAS dipasang.

    2. Jalankan perintah berikut untuk melepas pemasangan sistem file asli.

      net use Z: /delete

      Ganti Z: dalam perintah dengan huruf drive aktual.

      Catatan
      • Jalankan perintah net use * /delete untuk melepas pemasangan semua sistem file yang dipasang secara manual di Windows.

      • Jalankan perintah net use * /delete /y untuk melepas pemasangan semua sistem file yang dipasang secara otomatis di Windows.

    3. Pasang sistem file baru ke huruf drive asli. Pasang sistem file SMB.

    4. Jalankan proses yang mengakses sistem file NAS dan pastikan operasi baca-tulis berhasil.

    5. Ubah informasi pemasangan otomatis dalam file auto_mount.bat dengan mengganti titik pemasangan lama dengan yang baru.

  • Pasang sistem file NAS dalam kontainer Windows

    1. Ubah file konfigurasi YAML yang ada untuk mengganti titik pemasangan asli dengan yang baru.

    2. Gunakan file konfigurasi yang telah dimodifikasi untuk membuat pod baru. Pastikan sistem file baru berhasil dipasang dan operasi baca-tulis berjalan normal.

    3. Lakukan daur ulang terhadap semua Pod yang menggunakan sistem file asli.

Penting

Setelah memindahkan beban kerja, simpan data pada sistem file asli minimal selama satu minggu untuk mencegah kehilangan data akibat penghapusan tidak sengaja atau kesalahan sinkronisasi.

FAQ

Bagaimana cara mempercepat migrasi data ke sistem file SMB?

Untuk mempercepat migrasi skala besar (misalnya lebih dari 10 TB dengan ratusan juta file kecil berukuran sekitar 100 KB per file) sambil beban kerja menulis ke sistem file SMB yang sama, instal Python pada instans ECS Windows lalu jalankan skrip migrasi berikut.

  1. Unduh dan instal versi terbaru Python.

  2. Tambahkan path eksekusi Python ke variabel lingkungan PATH (misalnya, C:\Python27).

    set PATH=%PATH%;C:\python27

    Anda juga dapat menjalankan perintah where python untuk memeriksa path instalasi Python, seperti yang ditunjukkan pada gambar berikut.Python path

  3. Salin skrip migration.py berikut ke direktori lokal pada instans ECS Anda, misalnya 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. Lakukan migrasi data. Perintahnya menggunakan format berikut: python ./migration.py -s <source path> -d <destination path> [-r BeginIndex:EndIndex | -f] [-i ignoredFile].

    Tabel berikut menjelaskan parameter utama dalam perintah tersebut.

    Parameter

    Deskripsi

    -s <source path>

    Menentukan path ke direktori sumber. Misalnya, -s Z:\ menentukan direktori root drive Z.

    -d <destination path>

    Menentukan path ke direktori tujuan. Misalnya, -d Y:\ menentukan direktori root drive Y.

    -r BeginIndex:EndIndex

    Menentukan rentang subdirektori yang akan dimigrasikan, dari BeginIndex hingga EndIndex. Misalnya, -r 1:100 memigrasikan subdirektori 1 hingga 100.

    -f

    Hanya memigrasikan file biasa di tingkat atas direktori sumber.

    Memigrasikan semua file dalam direktori sistem file sumber, mengabaikan batasan cakupan.

    -i ignoredFile

    Menentukan file dalam direktori sumber yang akan dikecualikan dari migrasi. Misalnya, -i ignored.txt mengecualikan file bernama ignored.txt.

    Catatan

    Secara default, skrip menjalankan Robocopy untuk semua subdirektori secara berurutan, lalu menyalin file di level root. Untuk mempercepat migrasi, jalankan skrip secara paralel di beberapa klien dengan rentang subdirektori yang unik. Misalnya, klien pertama menggunakan -r 0:9999, klien kedua menggunakan -r 10000:19999, dan seterusnya.

    Sebagai contoh, untuk memigrasikan data dari sumber Z:\ ke tujuan Y:\, jalankan perintah berikut:

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

Topik terkait