Azure两台VM挂载共享Premium SSD后无法互相查看对方写入数据问题
Azure共享磁盘跨机文件不可见问题的核心原因
你当前遇到的跨机无法查看写入内容的问题,本质是单机文件系统的设计限制,和磁盘挂载参数无关:
- 你使用的NTFS是单节点文件系统,没有集群元数据同步能力,两台虚拟机挂载同一块磁盘后,各自的操作系统会独立缓存文件系统元数据,节点A写入的内容不会主动同步到节点B的系统缓存中,因此节点B看不到新增内容。
- 该用法存在数据损坏风险:如果两台虚拟机同时写入磁盘,会出现元数据冲突,直接导致文件系统损坏,所有数据丢失。
双机共享磁盘实现真实数据共享的可行方案
Azure共享磁盘本身仅提供多节点挂载的块设备能力,上层需要配套集群感知的文件系统,才能实现安全的文件级共享,Windows Server 2019场景下推荐用以下方案:
- 部署Windows故障转移集群(WSFC)+ 集群共享卷(CSV)
这是Azure官方针对Windows虚拟机共享磁盘场景的推荐方案,CSV是原生支持多节点访问的集群文件系统,会自动同步所有节点的文件系统元数据,既可以解决跨机无法查看写入内容的问题,又可以避免元数据冲突导致的数据损坏。 - 该方案的读写路径直接访问块存储,没有SMB协议的额外网络开销,性能远高于域内共享文件夹和Azure Files的SMB访问,完全可以解决你当前遇到的应用写入高延迟、卡顿的问题。
共享磁盘相关PowerShell配置说明
创建共享磁盘的必填参数
创建共享磁盘时必须指定maxSharesCount参数,该参数定义磁盘最多可挂载的虚拟机数量,双机场景设置为2即可,示例命令如下:
# 定义共享磁盘配置 $diskConfig = New-AzDiskConfig -SkuName Premium_LRS -Location "对应区域编码" -DiskSizeGB 1024 -CreateOption Empty -MaxSharesCount 2 # 创建磁盘 New-AzDisk -ResourceGroupName "你的资源组名称" -DiskName "共享数据盘名称" -Disk $diskConfig
挂载共享磁盘到虚拟机的操作
挂载磁盘不需要特殊的共享相关参数,只需保证两台虚拟机挂载同一块磁盘时使用的LUN号一致即可,示例命令如下:
# 获取虚拟机和磁盘对象 $vm = Get-AzVM -ResourceGroupName "你的资源组名称" -Name "目标虚拟机名称" $disk = Get-AzDisk -ResourceGroupName "你的资源组名称" -Name "共享数据盘名称" # 挂载数据盘,LUN号两台虚拟机保持一致 Add-AzVMDataDisk -VM $vm -Name "共享数据盘名称" -CreateOption Attach -ManagedDiskId $disk.Id -Lun 0 # 生效配置 Update-AzVM -VM $vm -ResourceGroupName "你的资源组名称"
性能优化补充建议
如果对延迟要求极高,可以将Premium SSD更换为Ultra Disk,Ultra Disk可以提供亚毫秒级的读写延迟,同时支持动态调整IOPS和吞吐量,更适合高性能共享存储场景。
内容的提问来源于stack exchange,提问作者Marek Piotrowski
相关产品推荐
相关产品推荐

