最近遇到一个CIFS文件数据迁移的测试。
用户用户使用AD域环境,要求在不同的存储设备之间迁移Windows桌面中使用的CIFS数据(域账号不变)。
本文记录异构存储环境下怎么做数据迁移的一些心得,涉及两种工具——微软的Robocopy和Netapp的XCP。
二、工具介绍
Robocopy
Robocopy 是windows server 2003以后就集成在系统的工具,使用它的目的通常就是为了需求复杂的拷贝,比如本次用户要求的复制NTFS权限。
如上图,随便打开自己电脑,打开CMD,输入Robocopy,发现可以使用。
XCP
XCP是Netapp公司的一种命令行拷贝工具。是可以免费使用的(但需要申请license)。
如上图,网址为:xcp.netapp.com。
三、重要结论
1、Windows 2012和Windows 2008中的Robocopy差异,建议2008。
Windows 2012下只要用上Robocopy 的/copy:S参数,哪怕文件没有任何改变,仍然会把所有文件再拷贝一遍。Windows 2008 下,如果文件未发生变化,则不会拷贝。
如果一定要是Windows 2012做迁移。可以采用配合方案:割接开始后,先用XCP 加-acl -nodata参数进行拷贝/同步,再使用robocopy /copy:DAT进行配合做最后更新。(不能/copy:DATS)
2、Robocopy拷贝的带权限信息的文件,如未发生变化,XCP能识别,不会重复拷贝。
3、只用XCP一种工具也可以实现割接前的常规数据拷贝和割接时的最后验证。
注:为了数据完整和安全性,还是推荐最终用Robocopy验证。
四、Robocopy参数精讲
范本:Robocopy /e /zb /COPY:DATSOU /mt \share_source\fs1 \share_destination\fs2 /r:0 /w:0
1、/e /z /b
必备参数
2、/COPY:DATSOU
这里的SOU就是本案例中要增加的权限的关键。这里是可以单独指定的。
3、/mt
加/MT参数可以大大提高同步速度,建议开启。
4、/r /w
可以设置为0,加快单次扫描的速度。在割接之前,同步是要进行多次的。
五、XCP参数精讲
范本:XCP sync -acl -nodata – noatime -fallback-user domain\user1 -fallback-group “domain\Domain Users” \share_source\fs1 \share_destination\fs2 -parallel 32 -l
1、-acl
加这个参数才会拷贝权限。
2、-nodata、-noatime(类似的,还可以-noctime等)
不比较源文件和目的文件的内容,好处是能够加快执行速度。这个设置会忽略源文件和新文件大小相同、但实际内容不同的情况。举例,某次拷贝时,假设1个txt文件中有一个参数是10ms,拷贝完成。后期,若原文件被修改为12ms,再次同步时,会忽略这个文件。但有例外,如果原始文件的size变化了(比如在原始txt文件中再多加一行内容),则会识别和重新拷贝。
3、-fallback-user、-fallback-group
如果设置了-ACL,这两个参数是必选的,它的本意是应用于这个场景:执行XCP的用户未加入域,而目的地址是有域的,需要在此定义拷贝完之后的域用户和用户组身份信息。
对于本次测试,域用户不变,这两个参数是可以任意设置为不相关的内容,不会影响运行结果。
4、-parallel 32
设置并发线程,默认是8,迁移主机的cpu配置,适当调高这个数字,可以加快扫描和拷贝的速度。设置16个就会在任务管理器看到16个XCP.exe进程。
实际测试中,设为32和16差异不大,都比8明显快。
5、-l
输出拷贝信息
六、其它信息
1、XCP安装需要VC++库,在下载文件中会包含。
2、除本文所提到XCP、Robocop外,还有Fastcopy、HDS厂商的CMT等工具,也可实现带权限后台拷贝。
七、信息扫盲
最后,对于初级人士,我写了一点知识扫盲。
带权限迁移
NTFS权限是微软的文件系统格式,从NT以后就一直沿用至今了。和本测试的相关点在于权限。随便打开一个文件夹邮件点属性,然后点安全。这里可以看到gujin这个用户对这个文件有完全控制权限,这样gujin就可以对它做读取、修改、删除等操作,如下图所示。
与此类似,用户公司中的每个员工原始只对自己个人,或者所隶属的用户组能访问的文件有访问权限权限,彼此之间是不能交叉访问的。如果迁移项目做完,但是权限信息丢失了,比如所有文件都变成everyone可访问,那无疑是失败的结果。
普通拷贝的局限——谁拷贝,权限就是谁的。
如果用具有高级权限的账号(比如说administrator)普通拷贝某用户A的数据,从旧存储位置拷贝到新存储位置。会发现新存储上的这份文件的所有者是administrator,A是没有权限的。