【IT168 专稿】本文阐述将文件服务从 Windows 2003 Server 或更高版本的文件服务器迁移到 Windows Server 2008 R2 操作系统过程执行迁移后任务。 迁移中包含的文件服务为数据和共享、本地用户和组、分布式文件系统 (DFS) 命名空间、分布式文件系统 (DFS) 复制、文件服务器资源管理器 (FSRM)、特定于服务器消息块 (SMB) 和客户端缓存 (CSC) 的组策略、共享文件夹的卷影副本以及服务器标识。
五、执行迁移后任务
如果迁移已成功,则按照"成功"下的步骤执行操作以完成迁移。如果迁移失败,则按照"失败"下的步骤执行操作以回滚迁移。
成功
验证迁移之后,注销源服务器。
淘汰源服务器
完成迁移并对其进行验证之后,可以关闭源服务器或断开源服务器与网络的连接。
DFS 命名空间
独立命名空间
完成迁移并对其进行验证之后,可以关闭源服务器或断开源服务器与网络的连接。如果要从源服务器中删除命名空间,则必须使用 DFSUtil.exe。
在目标服务器的命令提示符下,键入以下命令:
Dfsutil.exe root remove <\\SourceServer\Namespace>注意
必须使用 DFSUtil.exe 执行该操作。
具有一个命名空间服务器的基于域的命名空间
该过程仅适用于已经向命名空间中添加了临时服务器的情况。从目标服务器打开命令提示符窗口并键入以下命令:
DFSUtil.exe target remove <\\TemporaryServer\Namespace>对于具有多个命名空间服务器的基于域的命名空间,不需要执行其他操作。
建议不要在验证完 DFSN 迁移后的五分钟(300 秒)之内执行该命令。其原因是,默认情况下 DFS 命名空间客户端会将命名空间服务器列表缓存五分钟。在迁移期间,DFS 命名空间客户端将在命名空间服务器的缓存中只包含临时服务器。因此,最好在将目标服务器添加回命名空间之后允许缓存超时期限(五分钟)过期,以使客户端在其缓存中包含目标服务器。
DFS 复制
启动 DFS 管理管理单元并从所有复制组中删除源服务器。该步骤使配置恢复到开始进行迁移过程之前的状态。只有在完成标识迁移之后才能执行该步骤,这样 Active Directory 目录服务中的配置信息才不会处于不一致的状态,这一点非常重要。
当从复制组中删除源服务器时,将删除在迁移过程中创建的源服务器和目标服务器之间的自定义连接。可能需要在目标服务器和每个复制组中的所有其他服务器之间建立附加连接,以便目标服务器连接到是源服务器的所有其他服务器。
失败
以下步骤介绍如何在迁移失败时还原角色。
将文件服务器角色迁移从目标服务器回滚到源服务器
回滚 DFS 命名空间
独立命名空间
除了将标识迁移回源服务器之外,不需要进行任何其他操作。
基于域的命名空间
如果基于域的命名空间具有多个命名空间服务器,或者已向最初只有一个命名空间服务器的命名空间中添加了临时服务器:
从命名空间中删除目标服务器。
将标识和共享信息迁移到源服务器。
向命名空间中添加源服务器。
如果基于域的命名空间具有一个命名空间服务器,并且没有添加任何临时命名空间服务器:
验证在迁移期间创建的命名空间的导出文件是否仍然可用。
删除命名空间。
将标识和共享信息迁移到源服务器。
在源服务器上创建命名空间。
从之前在迁移期间创建的导出文件中导入命名空间配置。
手动重置命名空间的委派权限。
注意:对具有一个命名空间服务器的基于域的命名空间进行迁移的另一个选项是在迁移之前临时添加另一个命名空间服务器,然后在迁移之后删除此临时服务器,如前面所述。
DFS 复制
从所有复制组中删除目标服务器。
数据和共享
如果在目标服务器上尚未对已迁移的文件、文件夹和共享进行任何更改,并且尚未从源服务器中删除该数据,则不需要采取额外的步骤来回滚数据和共享。
如果管理员或用户在目标服务器上对已迁移的文件、文件夹或共享进行了修改,则执行以下步骤可将目标服务器中的更改同步回源服务器:
将更新的已迁移数据(文件和文件夹)从目标服务器复制回源服务器:
robocopy <copy from path> <copy to path> /E该命令可以在源服务器或目标服务器上执行,并且将采用递归方式复制更新的数据。
警告
对于为非默认本地用户和组设置的任何权限,将无法正确复制,因此需要手动重新创建。
将源服务器和目标服务器上的共享及其权限的列表进行比较,并手动同步任何更改。
若要列出所有共享及其权限,请在以管理员身份打开的 PowerShell 提示符下使用以下命令:
gwmi win32_share | %{net share $_.name}在企业中的其他计算机上回滚迁移
如果迁移失败,请验证回滚源服务器之后,企业中的其他计算机是否可以访问源服务器。
疑难解答和支持
使用 cmdlet 进行 IP 配置迁移的日志文件位置
Windows Server 迁移工具部署日志文件位于 %windir%\Logs\SmigDeploy.log。其他 Windows Server 迁移工具日志文件将在以下位置创建:
%windir%\Logs\ServerMigration.log
在 Windows Server 2008 和 Windows Server 2008 R2 上,日志文件位于:%localappdata%\SvrMig\Log
在 Windows Server 2003 上:%userprofile%\Local Settings\Application Data\SvrMig\Log
如果在上述位置中无法创建迁移日志文件,则会在 %temp% 中创建 ServerMigration.log 和 SmigDeploy.log,在 %windir%\System32 中创建其他日志。
查看 Windows Server 迁移工具结果对象的内容
所有 Windows Server 迁移工具 cmdlet 都以对象形式返回结果。可以保存结果对象并查询它们,以获取关于已迁移的设置和数据的详细信息。对于其他 Windows PowerShell 命令和脚本,还可以使用结果对象作为输入。
结果对象描述
Windows Server 迁移工具 Import-SmigServerSetting 和 Export-SmigServerSetting cmdlet 在 MigrationResult 对象列表中返回结果。每个 MigrationResult 对象都包含关于 cmdlet 所处理的数据或设置的信息、操作的结果以及任何相关的错误或警告消息。下表描述了 MigrationResult 对象的属性。
属性名称 | 类型 | 定义 |
ItemType | 枚举 | 正在迁移的项目的类型。值包括 General、WindowsFeatureInstallation、WindowsFeature 和 OSSetting。 |
ID | 字符串 | 已迁移项目的 ID。值的示例包括 Local User、Local Group 和 DHCP。 |
Success | 布尔型 | 如果迁移成功,则会显示值 True;否则,将显示 False。 |
DetailsList | 列表 <MigrationResultDetails> | MigrationResultDetails 对象列表。 |
Send-SmigServerData 和 Receive-SmigServerData cmdlet 会在 MigrationDataResult 对象列表中返回结果。每个 MigrationDataResult 对象都包含关于 cmdlet 所处理的数据或共享的信息、操作的结果、任何错误或警告消息以及其他相关信息。下表描述了 MigrationDataResult 对象的属性。
属性名称 | 类型 | 定义 |
ItemType | 枚举 | 已迁移项目的类型。值包括 File、Folder、Share 和 Encrypted File。 |
SourceLocation | 字符串 | 项目的源位置,显示为路径名。 |
DestinationLocation | 字符串 | 项目的目标位置,显示为路径名。 |
Success | 布尔型 | 如果迁移成功,则会显示值 True;否则,将显示 False。 |
Size | 整数 | 项目大小(以字节为单位)。 |
ErrorDetails | 列表 <MigrationResultDetails> | MigrationResultDetails 对象列表。 |
Error | 枚举 | 已发生错误的错误枚举。 |
WarningMessageList | 列表 <String> | 警告消息列表。 |
下表描述了 MigrationResultDetails 对象内 MigrationResult 对象和 MigrationDataResult 对象公用的对象属性。
属性名称 | 类型 | 定义 |
FeatureId | 字符串 | 与该项目相关的迁移设置的名称。值的示例包括 IPConfig 和 DNS。对于数据迁移,此属性为空。 |
Messages | 列表 <String> | 详细事件消息列表。 |
DetailCode | 整数 | 与每个事件消息关联的错误或警告代码。 |
Severity | 枚举 | 事件的严重性(如果事件已发生)。值的示例包括 Information、Error 和 Warning。 |
Title | 字符串 | 结果对象的标题。值的示例包括 IP 配置的 NIC 物理地址,或本地用户迁移的用户名。 |
示例
以下示例说明如何使用变量存储结果对象的列表,然后在迁移完成之后在查询中使用该变量返回结果对象的内容。
将结果对象的列表存储为查询的一个变量的步骤
若要运行 cmdlet 并将结果保存在变量中,请使用以下格式键入一个命令,然后按 Enter。
$ VariableName = $(Cmdlet)
以下是一个示例。
$ImportResult = $(Import-SmigServerSetting -FeatureId DHCP -User all -Group -Path D:\rmt\DemoStore -force -Verbose)
此命令会运行指定了几个参数的 Import-SmigServerSetting cmdlet,然后在变量 ImportResult 中保存结果对象。
Import-SmigServerSetting cmdlet 完成其操作后,通过以下面的格式键入命令,然后按 Enter 返回包含在结果对象中的信息。
$ VariableName
在以下示例中,会将变量命名为 ImportResult。
$ ImportResult
此命令会返回结果对象中所包含的信息,这些结果对象是在步骤 1 中所示的示例中由 Import-SmigServerSetting 返回的。以下是通过调用 ImportResult 变量显示的一个输出示例。
ItemType ID Success DetailsList
-------- -- ------- -----------
OSSetting Local User True {Local User, Loc...
OSSetting Local Group True {Local Group, Lo...
WindowsFeature DHCP True {}
上述示例的每一行都是通过使用 Import-SmigServerSetting cmdlet 迁移的某个项目的一个迁移结果。列标题名称是 MigrationResult 对象的属性。可以将这些属性合并到另一个命令中来返回关于结果对象的更多详细信息,如步骤 3 及以后步骤中的示例所示。
若要在列表中显示所有结果对象的某个特定属性,请使用以下格式键入一个命令,然后按 Enter。
$<VariableName>| Select-Object -ExpandProperty <PropertyName>
以下是一个示例。
$importResult | Select-Object -ExpandProperty DetailsList
可以通过使用 Windows PowerShell cmdlet 运行更多高级查询来分析结果对象。以下是一些示例。
以下命令仅返回 ID 为 Local User 的结果对象的那些详细信息。
$ImportResult | Where-Object { $_.ID -eq "Local User" } | Select-Object -ExpandProperty DetailsList
以下命令仅返回 ID 为 Local User 的结果对象的那些详细信息,该 ID 的消息严重性等于 Warning。
$ImportResult | Where-Object { $_.ID -eq "Local User" } | Select-Object -ExpandProperty DetailsList | ForEach-Object { if ($_.Severity -eq "Warning") {$_} }
以下命令仅返回 ID 为 Local User 的结果对象的详细信息,该 ID 还具有标题 Remote Desktop Users。
$ImportResult | Where-Object { $_.ID -eq "Local Group" } | Select-Object -ExpandProperty DetailsList | ForEach-Object { if ($_.Title -eq "Remote DesktopUsers") {$_} }