
# 如何校验源端与目的端的数据一致性？
主机迁移服务提供了数据一致性校验功能，您可以在配置目的端或进行增量同步时，启用并配置该功能，对源端数据和目的端数据进行一致性校验。**该功能暂不支持BTRFS文件系统的主机。**
#### 注意事项
- 使用该功能前，建议停止源端业务（涉及数据库时需要关闭数据库程序，而不是暂停），否则源端数据一直发生变化，导致源端和目的端数据存在差异。
  ![](https://support.huaweicloud.com/sms_faq/public_sys-resources/note_3.0-zh-cn.png)
  源端存在数据一直变化的目录，如：SMS-Agent的安装目录，/var/log系统日志目录等，属于正常现象，不代表主机迁移过程中产生了数据差异。
  
- 数据一致性校验时长与需要校验的文件个数、大小成正比，部分场景可能耗时较长，业务割接耗时会增加，需要您自行评估对业务的影响。
- 该功能可能占用较多的磁盘IO，请评估对源端业务的影响。
- 在使用一致性校验功能时，如果数据范围选择"仅包含下列目录"，并且填写的目录中同时存在父目录和子目录的情况，系统将自动仅对父目录下的所有内容进行校验，以避免重复校验。 例如，在"仅包含下列目录"参数下填写了以下目录路径：
  ```
  /path,/path/test
  ```
  则系统会自动识别/path为父目录，并对/path下的所有内容（包括子目录/path/test及其内容）进行校验，而不会单独对/path/test进行重复校验。
  
 
#### 约束限制
- 该功能不适用于调整磁盘/分区的迁移场景，可能会出现因为两端对应路径无法准确映射而导致的数据校验差异。
- 该功能不适用于校验跨文件系统的文件或共享文件夹，可能会出现校验误差。
- 为保护源端业务的正常运行，每个目录最多只校验一百万个文件。
- 为防止占用过多内存，只校验路径字符串长度小于1024字节的文件。
- 对于Windows主机，一致性校验功能暂不支持对包含非ASCII字符（如中文、日文等）的路径执行校验操作。如果路径中包含此类字符，相关文件或目录将被自动跳过，不会进行校验。
 
#### 配置目的端时启用数据一致性校验
在配置目的端时，可以启用数据一致性校验，并且在全量复制完成后，自动进行数据一致性校验。详细操作请参考[设置目的端](https://support.huaweicloud.com/usermanual-sms/sms3_32_0003.html)。
#### 增量同步时启用数据一致性校验
1. 参考[同步增量数据](https://support.huaweicloud.com/usermanual-sms/sms3_32_0015.html)，打开"**同步**"窗口。
2. 勾选"**数据一致性** "功能，默认使用快速校验（即比对文件大小和修改时间）。
   
   图1增量同步时启用数据一致性校验   
   ![](https://support.huaweicloud.com/sms_faq/zh-cn_image_0000002153267688.png "点击放大")
   根据下表参数说明并结合实际需求配置校验策略。
   
   | 参数     | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   |:---|:---|
   | 启用哈希校验 | 通过计算和比较文件内容的哈希值进行校验。适合于单文件体积大且文件内容重要的场景，将增加源端CPU负载及源端磁盘IO负载，校验时间也更长。 注意： - 被运作中的软件占用的文件无法进行哈希校验。  - 勾选该选项后，必须指定校验目录，并且只校验指定目录下的文件内容。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | 数据范围   | - 排除下列目录：填写不需要进行数据校验的目录路径，最多支持填写30个路径，路径之间用英文逗号隔开。例如：/root/data,/var。不填则校验所有目录文件。  - 仅包含下列目录：只对填写的目录文件进行校验。   须知： - 请务必输入正确路径，路径错误或路径下不存在文件时，校验结果中会显示校验文件数量为0。  - 需要校验的数据量越大，则一致性校验的用时越长，建议仅对关键目录进行校验。  - 为避免校验数据量过大，以下路径将被默认排除： - Linux系统的/bin,/boot,/dev,/home,/etc,/lib,/media,/proc,/sbin,/selinux,/sys,/usr,/var,/run,/tmp目录。  - Windows系统的分区根目录，如：C:\\,O:\\。   如果默认排除的目录中有需要校验的目录，可以参考[修改默认排除的目录]进行处理。    |
   | 启用复检模式 | 只有进行过至少一次一致性校验后，才可以打开复检选项，启用复检将只对上一次校验结果中不一致的文件进行校验。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
      
   
   
3. 配置完成后，单击"**确定** "，开始增量数据同步并进行数据一致性校验。当同步及校验完成后，可以[查看校验结果]。
 
 #### 修改默认排除的目录
1. 登录源端服务器。
2. 打开SMS-Agent的**g-property.cfg** 配置文件，路径如下：
   
   - Linux系统：.../SMS-Agent/agent/config/g-property.cfg。
   
   - Windows系统：C:\\SMS-Agent-Py\*\\config\\g-property.cfg。
   
   
   
   
3. 根据实际需求修改**\[consistency_check\]** 配置项参数。目录之间用**英文逗号","** 分隔，结尾不加逗号，填写示例如下：
   
   - Linux系统：list_dir_illegal_linux = /bin,/boot,/dev,/home,/etc,/lib,...
   
   - Windows系统：list_dir_illegal_windows = C:\\SMS-Agent-Py3,C:\\SMS-Agent-Py2,...
   
   
   
   
4. 修改完成后，保存配置文件。
 
 #### 查看校验结果
当校验完成后，在任务详情窗口，选择**一致性校验结果** 页签，可以查看一致性校验结果。
图2查看校验结果   
![](https://support.huaweicloud.com/sms_faq/zh-cn_image_0000002158671282.png "点击放大")
如果校验结果中的校验文件总数为0，表示配置的校验目录路径不存在或该路径下的文件总数为零。
在源端的SMS-Agent的安装目录下（Linux为\*/SmsAgent/agent/Logs/；Windows为C://SMS-Agent-Py\*/Logs），会生成一个名为"**sms_cmp_result.log**"的日志文件，其中包含了所有校验不一致的文件。
#### 校验时间参考
下表为源端仅运行迁移业务的测试时长，仅供参考。
| 操作系统    | 系统规格 | 磁盘性能             | 校验时长（每100 G数据） |
|:---|:---|:---|:---|
| Windows | 2U4G | 5000IOPS/150MBPS | 约17分钟          |
| Linux   | 2U4G | 5000IOPS/150MBPS | 约13分钟          |
   
