Topik ini menjelaskan cara menggunakan alat Robocopy untuk memigrasikan data antara sistem file Penyimpanan File NAS Apsara (NAS) yang menggunakan Protokol SMB.
Prasyarat
Sistem file SMB sumber telah dibuat dan berisi data. Titik pemasangan virtual private cloud (VPC) juga telah dibuat untuk sistem file tersebut.
Informasi latar belakang
Robocopy adalah perintah salin direktori yang disediakan oleh Windows. Anda dapat menggunakan perintah ini untuk membuat dua salinan gambar dengan struktur file yang sama tanpa menyalin file duplikat yang tidak diperlukan. Anda juga dapat mempertahankan semua informasi terkait file, seperti tanggal dan cap waktu.
Penagihan
Migrasi data antar sistem file NAS menghasilkan biaya sebagai berikut:
Jika Anda menggunakan instance Elastic Compute Service (ECS) sebagai node perantara untuk transfer data, Anda akan dikenakan biaya untuk instance ECS berdasarkan konfigurasinya. Untuk informasi lebih lanjut tentang penagihan ECS, lihat Ikhtisar Penagihan.
Anda akan dikenakan biaya untuk penggunaan penyimpanan kedua sistem file NAS. Kami merekomendasikan Anda membeli paket sumber daya untuk mengimbangi biaya penggunaan penyimpanan. Untuk informasi lebih lanjut tentang penagihan NAS, lihat Ikhtisar Penagihan.
Jika Anda menggunakan Cloud Enterprise Network (CEN) untuk menghubungkan VPC, Anda akan dikenakan biaya untuk router transit dan koneksi antar wilayah yang Anda gunakan. Untuk informasi lebih lanjut tentang penagihan CEN, lihat Penagihan.
Persiapan
Saat memigrasikan data antar sistem file NAS, instance ECS harus dapat mengakses sistem file NAS sumber dan tujuan. Oleh karena itu, pastikan bahwa sistem file NAS sumber dan tujuan dapat diakses dari virtual private cloud (VPC) Alibaba Cloud yang sama.
Lihat informasi tentang titik pemasangan sistem file sumber.
Sebelum memigrasikan data, catat informasi titik pemasangan sistem file sumber dan VPC tempat titik pemasangan tersebut berada. Untuk informasi lebih lanjut, lihat Kelola Titik Pemasangan.
CatatanJika sistem file Anda hanya memiliki titik pemasangan jaringan klasik, Anda harus membuat titik pemasangan di VPC. Untuk informasi lebih lanjut, lihat Tambahkan Titik Pemasangan.
Konfigurasikan titik pemasangan sistem file tujuan.
Jika sistem file berada di wilayah yang sama
Jika titik pemasangan sistem file tujuan dan sumber termasuk dalam VPC yang sama, Anda dapat memperoleh informasi titik pemasangan dan memigrasikan data. Untuk informasi lebih lanjut, lihat Migrasi Data.
Jika titik pemasangan sistem file tujuan dan sumber termasuk dalam VPC yang berbeda, Anda dapat menggunakan salah satu dari tiga metode berikut untuk menyiapkan titik pemasangan:
Buat sistem file baru di wilayah dan zona tujuan. Titik pemasangan baru akan dibuat secara otomatis. Untuk informasi lebih lanjut, lihat Buat Sistem File NAS Tujuan Umum di Konsol.
CatatanJika Anda membeli Sistem File NAS Tujuan Umum bayar sesuai penggunaan (Kapasitas, Performa, atau Premium) yang menggunakan Protokol SMB, pilih VPC dan vSwitch yang sama dengan titik pemasangan sumber. Titik pemasangan tujuan akan dihasilkan secara otomatis. Setelah sistem file baru dibuat, Anda dapat membeli paket sumber daya untuk mengimbangi biaya dan menghemat pengeluaran.
Buat titik pemasangan baru pada sistem file yang ada. Untuk informasi lebih lanjut, lihat Buat Titik Pemasangan.
Gunakan CEN untuk menghubungkan VPC titik pemasangan tujuan dan sumber. Untuk informasi lebih lanjut, lihat Gunakan CEN untuk Memasang Sistem File NAS Lintas VPC di Wilayah yang Sama.
Jika sistem file milik akun yang berbeda atau berada di wilayah yang berbeda
Jika titik pemasangan sistem file tujuan dan sumber Anda tidak berada di akun atau wilayah yang sama, Anda harus menggunakan CEN untuk menghubungkan VPC Anda. Untuk informasi lebih lanjut, lihat Gunakan CEN untuk Memasang Sistem File NAS Lintas Akun dan Wilayah.
Migrasi data
Setelah menyiapkan titik pemasangan sumber dan tujuan, buat instance ECS baru, pasang kedua sistem file SMB pada instance ECS, dan gunakan alat Robocopy untuk menyalin data. Langkah-langkah berikut menjelaskan cara memigrasikan data.
Pasang sistem file sumber dan tujuan.
PentingKami merekomendasikan Anda membeli instance ECS baru, sementara, untuk melakukan migrasi. Jika Anda menggunakan instance ECS yang ada, tugas migrasi mungkin mengonsumsi sumber daya CPU dan lebar pita jaringan yang dialokasikan untuk aplikasi yang sedang berjalan.
Masuk ke Konsol ECS dan klik Create Instance. Kemudian, konfigurasikan parameter berikut.
Wilayah: Pilih wilayah tempat sistem file sumber berada.
Jaringan dan Zona: Pilih VPC, zona, dan vSwitch tempat sistem file sumber berada.
Tipe Instans: Dalam banyak kasus, Anda dapat memilih tipe instans minimum.
Citra: Pilih versi Windows Server. Kami merekomendasikan Anda memilih Windows Server 2019.
Penyimpanan: Klik Add File System di bagian Elastic Ephemeral Disk | Apsara File Storage NAS | Dedicated Block Storage Cluster (Optional). Gambar berikut menunjukkan contoh konfigurasi.
CatatanJika titik pemasangan sumber dan tujuan berada di VPC yang sama, Anda dapat mengonfigurasi informasi pemasangan NAS di halaman pembelian ECS. Setelah instance ECS dimulai, sistem file NAS sumber dan tujuan dipasang secara otomatis.
Jika titik pemasangan sumber dan tujuan tidak berada di VPC, wilayah, atau akun yang sama, Anda hanya perlu mengonfigurasi sistem file sumber di halaman pembelian ECS. Setelah instance ECS dibuat, Anda harus memasang sistem file tujuan secara manual. Untuk informasi lebih lanjut tentang cara memasang sistem file tujuan secara manual, lihat Pasang Sistem File SMB.

Setelah instance ECS dibuat dan sistem file NAS sumber dan tujuan dipasang, jalankan perintah berikut untuk mengonfirmasi hasilnya.
net useJika pemasangan berhasil, informasi berikut ditampilkan. Sistem file sumber dipasang ke drive Z, dan sistem file tujuan dipasang ke drive Y.
Status Lokal Remote Jaringan ------------------------------------------------------------------------------ OK Y: \\29e9c24****-eab13.cn-wulanchabu.nas.aliyuncs.com\myshare MicrosoftWindowgNetwork OK Z: \\29fe7f4****-txr31.cn-wulanchabu.nas.aliyuncs.com\myshare MicrosoftWindowgNetworkMigrasi Data.
Jalankan perintah berikut untuk memigrasikan data dari sistem file sumber (disk Z) ke sistem file tujuan (disk Y):
robocopy Z:\ Y:\ /e /w:5 /z /mt:32CatatanHanya data di direktori yang ditentukan yang dimigrasikan. Direktori tidak dimigrasikan.
Tabel berikut menjelaskan parameter. Ganti nilai parameter dengan nilai sebenarnya.
Parameter
Deskripsi
/mt
Menentukan jumlah utas konkuren. Nilai default: 8.
Nilai valid: 1 hingga 128.
Dalam contoh ini, 32 utas digunakan untuk replikasi multi-utas.
/w
Menentukan jumlah detik antara dua percobaan ulang berturut-turut yang disebabkan oleh kesalahan.
/z
Mengaktifkan unggah yang dapat dilanjutkan.
/e
Menyalin semua subdirektori, termasuk direktori kosong.
/copyall
Menyalin semua informasi file. Informasi tersebut mencakup item berikut:
Data
Atribut
Cap waktu
Daftar kontrol akses (ACL)
Informasi pemilik
Informasi audit
CatatanJika Anda ingin mempercepat migrasi sejumlah besar data, misalnya, ratusan juta file kecil lebih besar dari 10 TB, Anda dapat menginstal program Python terbaru pada instance ECS Windows. Untuk informasi lebih lanjut, lihat Bagaimana Cara Mempercepat Migrasi Data ke Sistem File SMB?
Periksa Hasil Migrasi.
Setelah migrasi selesai, jalankan perintah Robocopy berikut untuk memeriksa apakah sistem file tujuan konsisten dengan sistem file sumber.
ROBOCOPY Z:\ Y:\ /e /l /ns /njs /njh /ndl /fp /log:reconcile.txtTabel berikut menjelaskan parameter. Ganti sesuai kebutuhan.
/e: Menampilkan hanya direktori, termasuk yang kosong.
/l: Mencatat perbedaan tanpa memodifikasi atau menyalin file.
/fp: Memasukkan jalur lengkap file dalam log. Parameter ini hanya diperlukan jika parameter /ndl tidak ditentukan.
/ns: Tidak memasukkan ukuran file dalam log.
/ndl: Tidak memasukkan folder dalam log.
/njs: Tidak memasukkan ringkasan pekerjaan dalam log.
/njh: Tidak memasukkan header pekerjaan dalam log.
/log:reconcile.txt: Menulis hasil migrasi ke file log reconcile.txt. Jika file sudah ada, konten yang ada akan ditimpa.
Beralih aplikasi ke sistem file baru
Setelah migrasi data selesai, beralihlah aplikasi Anda dari sistem file lama ke yang baru. Untuk melakukannya, uninstall sistem file lama dari semua instance ECS dan kontainer, lalu pasang sistem file baru.
Jika sistem file NAS dipasang langsung pada instance ECS:
Jalankan perintah
net useuntuk mencatat informasi pemasangan NAS yang ada. Catat huruf drive lokal tempat sistem file NAS dipasang.Jalankan perintah untuk uninstall sistem file lama.
net use Z: /deleteGanti huruf drive dalam perintah (Z:) dengan huruf drive sebenarnya.
CatatanJalankan perintah net use * /delete untuk secara manual uninstall semua sistem file yang dipasang di Windows.
Jalankan perintah net use * /delete /y untuk secara otomatis uninstall semua sistem file yang dipasang di Windows.
Pasang sistem file baru ke huruf drive asli. Untuk informasi lebih lanjut tentang parameter pemasangan, lihat Pasang Sistem File SMB.
Mulai aplikasi yang mengakses NAS untuk mengonfirmasi bahwa operasi baca dan tulis berhasil.
Ubah informasi pemasangan otomatis di auto_mount.bat untuk mengganti titik pemasangan lama dengan yang baru.
Jika sistem file NAS dipasang pada kontainer Windows:
Ubah file konfigurasi YAML yang ada untuk mengganti titik pemasangan lama dengan yang baru.
Gunakan file konfigurasi yang dimodifikasi untuk menghasilkan pod baru. Konfirmasikan bahwa sistem file baru dipasang dan bahwa operasi baca dan tulis berhasil.
Hapus semua pod yang menggunakan sistem file lama.
Setelah Anda beralih aplikasi Anda ke sistem file baru, pertahankan data pada sistem file lama setidaknya selama satu minggu. Jangan segera menghapus data dari sistem file lama untuk mencegah kehilangan data yang disebabkan oleh penghapusan tidak sengaja atau sinkronisasi yang tidak lengkap.
FAQ
Bagaimana cara mempercepat migrasi data ke sistem file SMB?
Anda mungkin perlu menulis sejumlah besar data ke sistem file SMB atau mempercepat migrasi sejumlah besar data, seperti ratusan juta file kecil yang totalnya lebih dari 10 TB (dengan setiap file sekitar 100 KB). Dalam hal ini, Anda dapat menginstal program Python terbaru pada instance ECS Windows untuk melakukan migrasi. Anda harus melakukan langkah-langkah berikut:
Unduh dan instal program Python terbaru.
Atur variabel lingkungan sistem PATH ke jalur eksekusi Python, misalnya, `C:\Python27`.
set PATH=%PATH%;C:\python27Anda juga dapat menjalankan perintah
where pythonuntuk melihat jalur instalasi Python, seperti yang ditunjukkan pada gambar berikut.
Salin skrip `migration.py` berikut ke direktori lokal pada instance ECS Alibaba Cloud, 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:])Migrasi data. Format perintah adalah:
python ./migration.py -s <source path> -d <destination path> [-r BeginIndex:EndIndex | -f] [-i ignoredFile].Tabel berikut menjelaskan parameter utama dalam perintah.
Parameter
Deskripsi
-s <source path>
Menentukan direktori titik pemasangan untuk sistem file sumber. Sebagai contoh,
-s Z:\menunjukkan bahwa direktori titik pemasangan untuk sistem file sumber adalah direktori root dari drive Z.-d <destination path>
Menentukan direktori titik pemasangan untuk sistem file tujuan. Sebagai contoh,
-d Y:\menunjukkan bahwa direktori titik pemasangan untuk sistem file tujuan adalah direktori root dari drive Y.-r BeginIndex:EndIndex
Menentukan rentang file yang akan dimigrasikan, dari
BeginIndexhinggaEndIndex. Sebagai contoh,-r 1:100menunjukkan bahwa file dari 1 hingga 100 dimigrasikan.-f
Menentukan bahwa hanya file reguler di tingkat pertama dalam direktori sistem file sumber yang dimigrasikan.
Semua file dalam direktori sistem file sumber dimigrasikan, dan batasan rentang diabaikan.
-i ignoredFile
Menentukan file dalam direktori sistem file sumber yang tidak perlu dimigrasikan. Sebagai contoh,
-i ignored.txtmenunjukkan bahwa file bernamaignored.txttidak dimigrasikan.CatatanSecara default, Anda tidak perlu mengatur parameter -r atau -f. Skrip secara berurutan menjalankan Robocopy pada semua subdirektori dan kemudian menyalin file reguler di tingkat pertama. Jika Anda ingin menggunakan sumber daya CPU dan jaringan dari beberapa klien untuk mempercepat migrasi subdirektori yang berbeda secara bersamaan, dan semua klien dapat mengakses disk sumber yang sama, Anda dapat menentukan rentang subdirektori yang akan dimigrasikan. Sebagai contoh, klien pertama dapat menggunakan
-r 0:9999, dan klien kedua dapat menggunakan-r 10000:19999.Sebagai contoh, untuk memigrasikan data dari direktori `Z:\` sistem file sumber ke direktori `Y:\` sistem file tujuan, gunakan perintah sampel berikut:
python ./migration.py -s Z:\ -d Y:\