问题现象
深信服挂载NAS LUN作为后端存储时会发生数据块重用问题:
经深信服官方检查发现该问题可能是由于ATS不可靠引起:
感谢深信服官方提供的ATS测试脚本。
实际测试中发现当NAS I/O延迟较低时完全无法复现该异常。
后续通过FIO将I/O延迟提升至1500+后,才会频繁发生ATS操作无法保证原子性的情况。
测试环境
DS 1621+ x 1 ISCSI存储
Centos 9.4 x 2 增加读写压力
Centos 8.2 x 9 进行ATS可靠性测试
DS 1621+ 配置
DSM 7.2.2 update2
SAN Manager 1.0.11-0319
HDD 4T x 5 存储池
M.2. 380G x 2 SSD缓存
环境拓补图
异常现象
存储压力
LUN 压力
发生问题时,从Centos挂载端查看测试历史数据,会发现本应递增的数值出现了回退现象:
解决方法
目前研究发现该异常是由于lio模块的latency_control_cache功能引起。请尝试在业务压力较低时,通过以下方式手动关闭查看是否可以解决该问题。
如果已经发生数据块重用问题,还请联系深信服官方对存储的文件系统进行修复
注意: 重启NAS、重启ISCSI套件或重启ISCSI Target后该功能会自动开启,需要重新手动关闭
例如LUN的名字是 LUN-1,通过以下命令查询LUN uuid
cat /volume1/\@iSCSI/LUN/iscsi_lun.conf | grep name=LUN-1 -A 1
通过LUN uuid查看latency_control_cache是否有启用:
cat /sys/kernel/config/target/core/fileio_0/LUN_[LUN uuid]/attrib/latency_control_cache
e.g.
cat /sys/kernel/config/target/core/fileio_0/LUN_dea3e21b-29db-4be0-bcc2-263bef9ab9dd/attrib/latency_control_cache
通过以下命令关闭LUN-1的latency_control_cache功能,并检查是否有关闭成功:
echo 0 > /sys/kernel/config/target/core/fileio_0/LUN_[LUN uuid]/attrib/latency_control_cache
e.g.
echo 0 > /sys/kernel/config/target/core/fileio_0/LUN_dea3e21b-29db-4be0-bcc2-263bef9ab9dd/attrib/latency_control_cache
完整操作截图:
确认正常工作后可以建立该命令的开机任务计划,后续自动运行。
在控制面板 -> 任务计划 -> 新增触发的任务并选择用户定义的脚本
用户账户调整为 root 事件为 开机
在任务设置的运行脚本中填写调整latency_control_cache的指令并确定