
# 磁盘检测
- 规格：
  - 只检测DN、CN、GTM、CM（CMA、CMS）的数据盘、日志盘以及DN的表空间所在盘。
   

- 检测规则：
  - 检测通过读写临时文件实现，针对文件会有四个操作：open（打开文件），write（写文件），read（读文件），unlink（删除文件）。其中open、write、read任意一个操作失败或者执行超时，就会判定磁盘发生故障或处于hang状态，并触发仲裁。相反，unlink操作失败或执行超时，则不会作为触发仲裁的条件。
  
  - 非DIRECT读写：每隔1秒采用非DIRECT的方式向磁盘中写入1B的数据，如果读写失败，通过错误码判断失败的原因，其中如果是EIO（IO错误）、EROFS（文件系统只读）、ENOSPC（磁盘空间不足）、EACCES（权限不足）这些原因，会判定故障，其他类型错误暂不处理。
  
  - DIRECT读写：默认每隔5秒（可配）采用DIRECT的方式向磁盘中写入512B（如果被检测磁盘为条带化，则写入256KB）的数据，如果写入操作阻塞超过20s（如果无法判断被检测磁盘是否为条带化，则超时时间为60s，写入数据的大小为256KB）没有返回，则判定磁盘处于I/O hang。
   

- 高负载下磁盘hang
  - 简介：CM定时从数据库获取物理I/O指标（I/O文件读写访问次数、I/O文件读写流量）。CM检测到磁盘hang后，先判断I/O指标是否达到高负载标准（I/O文件读写访问次数10次/秒或I/O文件读写流量256kB/秒），如果达到高负载标准，则不继续进行磁盘hang的处理动作。
  
  - 约束：
    - 高负载场景定义：达到I/O文件读写访问次数10次/秒 或 I/O文件读写流量256kB/秒，认为处于高负载。
    
    - 高负载场景，不进行磁盘hang处理。非高负载场景，进行磁盘hang处理，RTO满足60s。
    
    - 获取不到I/O指标场景，则进行磁盘hang的处理，RTO满足60s。
     
   

- 说明：
  - 写入的数据大小可配置，配置的写入大小需要根据磁盘的对齐规则进行对齐，如果配置时没对齐，cm会自动向上对齐。在磁盘LVM条带化场景，为保障写入检测能覆盖到所有磁盘，建议写入大小根据磁盘数量和数据分块大小动态调整。
  
  - I/O hang超时时间可配置，需要根据磁盘性能进行配置，性能差的磁盘，超时时间可以适当配置长一些，进而减少业务I/O对磁盘检测的影响，相应的，hang场景RTO将会变长。配置成0则关闭hang检测。
  
  - 写入大小过大、检测周期过短时，可能对磁盘IO有一定的争抢，进而影响数据库性能。
   
 
