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.
-
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.
CatatanJika sistem file Anda hanya memiliki titik pemasangan di jaringan klasik, Anda harus membuat titik pemasangan baru di VPC. Untuk petunjuknya, lihat Buat titik pemasangan.
-
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:
-
Buat sistem file di wilayah dan zona tujuan. Titik pemasangan akan dibuat secara otomatis. Buat sistem file NAS tujuan umum di Konsol.
CatatanSaat membeli sistem file SMB NAS tujuan umum (Capacity, Performance, atau Advanced) dengan model bayar sesuai penggunaan, pilih VPC dan vSwitch yang sama dengan titik pemasangan sumber. Hal ini akan menghasilkan titik pemasangan tujuan secara otomatis. Anda kemudian dapat membeli paket sumber daya untuk mengurangi biaya.
-
Buat titik pemasangan pada sistem file yang sudah ada. Tambahkan titik pemasangan.
-
Hubungkan VPC dengan menggunakan CEN. Kaitkan sistem file NAS lintas VPC di Wilayah yang sama dengan menggunakan CEN.
-
-
-
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.
-
Pasang sistem file sumber dan tujuan.
PentingGunakan 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.
CatatanJika 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.
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 useJika 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 -
-
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:32CatatanPerintah 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
CatatanUntuk 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.
-
-
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.txtParameter 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
-
Jalankan
net useuntuk mencatat informasi pemasangan NAS saat ini. Catat huruf drive lokal tempat sistem file NAS dipasang. -
Jalankan perintah berikut untuk melepas pemasangan sistem file asli.
net use Z: /deleteGanti 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.
-
-
Pasang sistem file baru ke huruf drive asli. Pasang sistem file SMB.
-
Jalankan proses yang mengakses sistem file NAS dan pastikan operasi baca-tulis berhasil.
-
Ubah informasi pemasangan otomatis dalam file auto_mount.bat dengan mengganti titik pemasangan lama dengan yang baru.
-
-
Pasang sistem file NAS dalam kontainer Windows
-
Ubah file konfigurasi YAML yang ada untuk mengganti titik pemasangan asli dengan yang baru.
-
Gunakan file konfigurasi yang telah dimodifikasi untuk membuat pod baru. Pastikan sistem file baru berhasil dipasang dan operasi baca-tulis berjalan normal.
-
Lakukan daur ulang terhadap semua Pod yang menggunakan sistem file asli.
-
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.
-
Unduh dan instal versi terbaru Python.
-
Tambahkan path eksekusi Python ke variabel lingkungan PATH (misalnya, C:\Python27).
set PATH=%PATH%;C:\python27Anda juga dapat menjalankan perintah
where pythonuntuk memeriksa path instalasi Python, seperti yang ditunjukkan pada gambar berikut.
-
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:]) -
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
BeginIndexhinggaEndIndex. Misalnya,-r 1:100memigrasikan 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.txtmengecualikan file bernamaignored.txt.CatatanSecara 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:\