You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于iSCSI环境下SCSI WRITE SAME与COMPARE AND WRITE功能的使用场景及触发方式的技术问询

关于iSCSI环境下SCSI WRITE SAME与COMPARE AND WRITE功能的使用场景及触发方式的技术问询

我来梳理下这两个SCSI命令的实际使用情况,以及触发方式:

一、支持这两个命令的操作系统/环境

WRITE SAME

你观察到的Linux内核主要在target侧使用是对的,但发起端并非完全不用——只是常规场景下不会自动触发,需要借助专用工具或特定存储场景:

  • FreeBSD的存储发起端在处理磁盘零填充、批量克隆相同数据块时,会主动下发WRITE SAME命令来提升效率;
  • VMware ESXi是这类命令的典型使用者,在创建精简置备虚拟机磁盘、批量同步相同扇区数据时,底层会自动调用WRITE SAME,减少不必要的数据传输;
  • 一些专用存储OS(比如NetApp ONTAP、Dell PowerStore的发起端组件)也会在存储管理操作中用到它。

COMPARE AND WRITE(你提到的WRITE COMPARE应该是这个标准SCSI命令)

这个命令主打原子性的“比较-写入”操作,多用于数据一致性要求高的场景:

  • IBM AIX的存储栈在处理数据库事务、分布式锁这类场景时会支持;
  • Windows Server 2016及以后版本的部分存储驱动,配合第三方存储工具可以触发,但普通Windows 10发起端确实很少用到;
  • 部分分布式存储系统的客户端,会用这个命令来实现数据的原子更新,避免并发写入冲突。

二、触发方式(常规IO不会直接触发,需通过以下途径)

这两个命令属于SCSI层的低级指令,常规的write()系统调用或文件管理器操作不会触达,需要借助专门工具或自定义开发:

  • 专用SCSI工具:Linux下的sg3_utils工具包是常用选择,比如:
    • 触发WRITE SAME填充零数据:sg_write_same --zero /dev/sdb
    • 触发COMPARE AND WRITE:sg_compare_and_write --offset=0x1000 --length=0x400 /dev/sdb compare_data.bin write_data.bin
  • 存储管理软件:比如VMware vSphere创建精简置备磁盘、专业磁盘克隆工具(如Clonezilla的特定模式),底层会自动下发对应命令;
  • 自定义应用开发:通过操作系统的SCSI直通接口实现,比如Linux下用ioctl配合SG_IO指令,Windows下用DeviceIoControl调用相关控制码,直接在应用中构造并发送SCSI命令包。

备注:内容来源于stack exchange,提问作者Folkert van Heusden

火山引擎 最新活动