20TB文件服务器迁移记录

 

       公司现有的一台Windows文件服务器,容量已高达20TB,因使用年限长且已插满硬盘无法扩容,于是公司决定购买新的服务器替换。目前面临着一个问题:服务器上面共享了众多文件夹,并对不同的用户及组设置了详细的访问控制权限。如何使得这些共享文件夹由旧服务器平稳迁移到新服务器上,而共享权限及NTFS权限保持不变?

        对于这个需求,经过研究和测试,可使用以下3种免费方案:

1.  通过Xcopy命令进行文件的迁移;

2.  通过FSMT工具进行文件的迁移;

3.  通过Robocopy命令进行文件的迁移。

 

第一种方案: Xcopy

Xcopy的出现主要是为了解决Windows默认图形化拷贝与copy命令的不足,xcopy可以实现更加灵活的拷贝控制,例如控制只拷贝某些类型的文件,只拷贝某日期后修改过的文件,只拷贝文件目录结构,只可拷贝文件夹及子文件夹内容。

xcopy source destination /E /C /H /Y /K /O /X ,其中 source 是要复制的文件的源路径,destination 是这些文件的目标路径。其他主要参数解释如下:

/E 复制目录和子目录,包括空的。 与 /S /E 相同。可以用来修改 /T。
/C 即使有错误,也继续复制。
/H 也复制隐藏和系统文件。
/Y 禁止提示以确认改写一个现存目标文件。
/K 复制属性。一般的 Xcopy 会重设只读属性。
/O 复制文件所有权和 ACL 信息。
/X 复制文件审核设置(隐含 /O)。
更详尽的参数可参阅帮助信息

示例:

Xcopy "\\Fileserver\IT" "d:\IT" /E /C /H /Y /K /O /X

对于第一种方案,/O/X/E/H/K 开关的 Xcopy 命令复制文件并保留已明确应用于这些文件的现有权限,但是当文件太多,网络COPY容易出现某个文件无法COPY或是网络中断等一些不可预料的问题,而一旦出现这种问题,这种拷贝方式无法实现“断点续传”,那整个迁移过程将会失败。

测试中还发现通过Xcopy复制的话,父文件目录时间戳记会丢失。如果对于目录时间戳记迁移、以及复制性能没有过多要求,仅用于迁移NTFS权限,那么Xcopy这种方案还是不错的选择。

 

第二种方案:FSMT

第二种方案则是File Server Migration Toolki,是微软推出的扩展工具,使用 FSMT 来实现迁移文件夹及其权限。

经过测试,发现文件时间戳已经被迁移过来,但文件目录时间戳没有被迁移。

从实际测试结果来看,发现迁移过来之后SID不一致,会合并一些权限,与源文件夹权限有些微变化。

在测试中发现此种方式的速度较慢,在微软官方文档可以看到相关说明:Windows Server迁移工具的文件迁移部分是面向小型数据集(小于 100 GB 的数据),它会通过 HTTPS 逐个复制文件。

好处是FSMT可以提供GUI操作画面,对于技术性要求不高。

 

第三种方案: Robocopy

RoboCopy可以认为是Xcopy的 “替代升级版”,比Xcopy有更好的功能选项。

比如在重试逻辑上面,Robocopy可以做到在一定时间内,默认30秒,出现网络中断,不会导致复制中断,复制会在这个时间内继续次数尝试,直到成功复制。

示例:

robocopy "\\Fileserver\d$\IT" "e:\IT" /e /efsraw /copyall /dcopy:t /r:3 /w:3 /log:d:\IT.txt

几个有关的参数解释如下:

/E    复制子目录,包括空的子目录;

/COPY:复制标记   要复制的文件内容(默认为/COPY:DAT)

 [ 复制标记:D=数据,A=属性,T=时间戳,S=安全=NTFS ACL,O=所有者信息,U=审核信息 ] /copyall     复制所有文件信息(= /COPY:DATSOU)

/R:n    失败后重试次数;(默认1000,000次)

/W:n    失败后等待时间;(默认30秒)

/V        生成详细输出,并显示跳过的文件;

/LOG:PATH    LOG日志覆盖输出至指定路径下的LOG日志内;

/LOG+:PATH    LOG日志追加输出至指定路径下的LOG日志内;

/EFSRAW :: 在 EFS RAW 模式下复制所有加密的文件。

/DCOPY:T     复制目录时间戳

robocopy还有非常多的参数,更详尽的参数可参阅帮助信息robocopy /?

从实际效果来看,robocopy可以完美地迁移文件内容、文件及目录的安全属性和时间戳,并能够输出完整过程及详细log,满足本次迁移需求,是首选方案。

 

使用技巧

robocopy可输出日志,方便找到失败的文件记录。

 

重复执行robocopy命令时,如果文件或目录被删除了,会显示有*多余文件或*多余目录

*多余文件       XXXXXXXXXXXXXXXXXX

*多余目录       XXXXXXXXXXXXXXXXXX

备份文件会比原目录保留那些被删除的文件(可用来备份)。

本次目的是迁移,改用镜像参数/mir更合适,可将多余文件删除,结合参数/efsraw /copyall /dcopy:t可拷贝加密、NTFS权限和时间戳过去。

robocopyy "\\fileserver\d$\信息部" "d:\信息部" /mir /efsraw /copyall /dcopy:t /r:2 /w:2 /log:"d:\robolog\fileserver_20210101_信息部.txt"

 

异常处理

因历史文件特别多,会出现个别用户修改文件所有者权限的现象,导致有少数文件连超级管理员都无权限读取,需重新夺取所有者权限,怎么在这上百万个文件查到这些文件?

可用Power GREP工具快速分析日志,找出带“错误”标识的行,这些行就是拷贝失败的文件。

正则写法如下:

^((?!\~\$).)* 错误 ((?!\~\$).)*$    查出带关键字“ 错误 ”的行,注意前后有空格,并排除文件名也含有“错误”的文件,比如某excel文件名本身就叫错误样本。

 

 

找出这些行再重新赋权即可。

 

另外日志也会出现某些行带有~$标记,因在线编辑的文件关闭后不再存在临时文件,等到robocopy要拷贝时会记录为错误。类似的可用以下方法找出剔除,以便核对正确的错误文件总数。

^((?!0x00000002).)* 错误.*$

 新文件            165    ~$新产品开发.xlsx

2021/01/01 13:54:02 错误 2 (0x00000002) 正在复制文件 \\fileserver\2020年\~$新产品开发.xlsx

 

Tips:

重复执行robocopy过后,存在的文件会跳过,不会重复复制,从而可提前将大量文件拷贝过去。到真正切换的时候先禁用原服务器共享文件夹允许写入,再执行最后一次robocopy即可。这次只是拷贝少量新增或修改过的文件,从而可快速切换,未出现数据丢失。

 

posted @ 2021-02-23 23:59  ST运维  阅读(2141)  评论(0编辑  收藏  举报