news 2026/8/20 17:36:32

hcsshim存储方案选型指南:vSMB、vPMem、Plan9与SCSI如何选择?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
hcsshim存储方案选型指南:vSMB、vPMem、Plan9与SCSI如何选择?

hcsshim存储方案选型指南:vSMB、vPMem、Plan9与SCSI如何选择?

【免费下载链接】hcsshimWindows - Host Compute Service Shim项目地址: https://gitcode.com/gh_mirrors/hc/hcsshim

hcsshim 是微软开源的Windows Host Compute Service(HCS)Go 语言接口库,负责在 Windows 上创建和运行容器与虚拟机。无论你使用 Docker 还是 containerd,只要涉及 Hyper-V 隔离容器,数据文件如何进入虚拟机,都由 hcsshim 的存储方案决定。本文面向新手和运维人员,用通俗语言讲清vSMB、vPMem、Plan9 与 SCSI 四种存储方式的原理、优缺点与选型场景,帮你快速做出正确决策。

一、四种存储方案分别是什么?

先记住一句话:vSMB 和 Plan9 负责"文件共享",vPMem 和 SCSI 负责"磁盘挂载"。它们的用途完全不同,搞清楚这点,选型就成功了一半。

vSMB:Windows 容器的事实标准 🪟

vSMB(Virtual SMB)本质是把宿主机目录或文件,通过虚拟化的 SMB 协议共享给虚拟机。这是WCOW(Windows 容器)挂载数据的默认方式。在 internal/uvm/vsmb.go 中可以看到,它支持只读共享(ShareReadCacheIo)与可写共享,还支持"单文件映射"(allowedFiles),性能在四种方案中名列前茅。

vPMem:性能怪兽,只读专属 ⚡

vPMem(虚拟持久内存)把镜像 VHD 直接映射到虚拟机的内存地址空间,读取几乎不经过模拟设备,是性能最高的方案,专门用于挂载 LCOW(Linux 容器)的只读镜像层

但它的"特权"也意味着限制:

  • 数量有限:一个 UVM 最多挂载十几个设备(源码中通过VPMemDeviceCount配置);
  • 大小受限:超出vpmemMaxSizeBytes会直接报ErrMaxVPMemLayerSize
  • 仅支持只读:写操作(scratch 层)与它无缘;
  • ARM64 平台不支持。

Plan9:Linux 文件共享的"兜底方案" 🐧

Plan9 共享源自贝尔实验室的 Plan 9 文件系统协议,在 internal/uvm/plan9.go 中实现。当vSMB 不可用或需要映射目录给 Linux 容器时,hcsshim 会回退到 Plan9。它支持只读/可写、目录映射与单文件映射(需 Windows 19H1 以上),但性能明显低于 vSMB,属于"能用但别当主力"的方案。

SCSI:全能选手,可写层之王 💾

SCSI 虚拟磁盘挂载是最灵活的方式:支持分区挂载、磁盘加密、文件系统格式化、热插拔,且数量上限远高于 vPMem。LCOW 默认配置4 个 SCSI 控制器,WCOW 则固定 1 个(见 internal/uvm/create.go)。容器运行时的可写层(scratch VHD)和无法用 vPMem 的大镜像层,都靠它兜底。

二、一张表看懂四种方案怎么选

对比维度vSMBvPMemPlan9SCSI
适用系统WCOW / LCOWLCOWLCOWWCOW / LCOW
典型用途文件/目录共享只读镜像层文件共享兜底可写层、大镜像
读写能力可读可写只读可读可写可读可写
性能最高较低
数量上限较多最少(约16个)较多最多(多控制器)
特殊能力单文件映射内存级直读单文件映射分区/加密/格式化

三、按容器类型给出的选型建议

WCOW(Windows 容器):优先 vSMB

Windows 容器的数据共享,hcsshim 在 internal/uvm/share.go 中无条件优先尝试 vSMB,失败才回退到 Plan9。因此普通场景无需干预,只有需要严格隔离共享文件(通过NoWritableFileShares禁止可写共享)时,才需要调整 UVM 创建参数。

LCOW(Linux 容器):vPMem + SCSI 黄金组合

LCOW 的镜像层挂载逻辑在 internal/layers/lcow.go 中非常清晰:先尝试 vPMem,如果设备满了或镜像超过大小限制,自动降级为 SCSI。这套"自动降级"机制意味着:

  • 常规小镜像 → 走 vPMem,享受最快启动速度;
  • 大镜像或层数多 → 自动落到 SCSI,不中断部署;
  • scratch 可写层 → 一律 SCSI,并支持加密与 ext4/xfs 自动格式化。

安全隔离场景:留意可写共享开关

如果容器涉及敏感数据,建议在创建 UVM 时开启NoWritableFileShares(对应 internal/uvm/create.go 中的选项),从源头禁止一切可写的 vSMB 与 Plan9 共享,只保留只读数据通道。

四、常见问题速查

问:为什么我的大镜像启动慢?大概率是镜像超出了 vPMem 大小上限,被降级到了 SCSI。可以适当调大VPMemSizeBytes(需为 4096 的倍数),或接受 SCSI 带来的轻微性能损失。

问:vPMem 挂载失败报错怎么办?检查两个原因:一是设备数量达到MaxVPMEMCount上限,二是镜像文件过大触发ErrMaxVPMemLayerSize。前者减少并行挂载,后者换更大的 vPMem 配置或改用 SCSI。

问:Linux 容器里文件共享很慢,正常吗?正常。这通常说明走了 Plan9 而非 vSMB。保持默认配置、升级宿主机系统版本,可让 hcsshim 优先选择性能更好的 vSMB 路径。

五、总结

选型的本质是回答三个问题:要共享文件还是挂载磁盘?要只读还是可写?追求性能还是容量?文件共享选 vSMB(兜底 Plan9),只读镜像层选 vPMem(兜底 SCSI),可写与大容量一律 SCSI。理解了这套组合拳,Windows 容器与 Linux 容器在 Hyper-V 隔离模式下的存储瓶颈,就不再是黑盒。

想深入源码验证这些结论,可以克隆项目仓库:git clone https://gitcode.com/gh_mirrors/hc/hcsshim,重点阅读 internal/uvm/vsmb.go、internal/uvm/vpmem.go、internal/uvm/plan9.go 与 internal/uvm/scsi/ 四个核心目录。

【免费下载链接】hcsshimWindows - Host Compute Service Shim项目地址: https://gitcode.com/gh_mirrors/hc/hcsshim

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/20 17:36:13

gruf 从 1.x 升级到 2.x:Breaking Changes 与迁移指南

gruf 从 1.x 升级到 2.x:Breaking Changes 与迁移指南 【免费下载链接】gruf gRPC Ruby Framework 项目地址: https://gitcode.com/gh_mirrors/gr/gruf 如果你正在使用 gruf 搭建 gRPC 服务,那么 gruf 1.x 升级 2.x 一定是你绕不开的一道坎。gruf…

作者头像 李华
网站建设 2026/8/20 17:32:40

shadow-rs Hook 机制实战:如何向构建产物注入自定义常量与函数

shadow-rs Hook 机制实战:如何向构建产物注入自定义常量与函数 【免费下载链接】shadow-rs A build-time information stored in your rust project.(binary,lib,cdylib,dylib,wasm) 项目地址: https://gitcode.com/gh_mirrors/sh/shadow-rs shadow-rs 是一款…

作者头像 李华
网站建设 2026/8/20 17:30:51

湘潭大学25年算法设计与分析考点回忆(软件工程)

1,贪心,贪心选择性质和最优子结构及二者关系2,代码填空矩阵连乘(书上原代码),一个简单的贪心,要知道代码怎么写3,分治法,主方法求复杂度,递归方程求解&#x…

作者头像 李华
网站建设 2026/8/20 17:28:11

基于SpringBoot的智慧社区服务系统设计与实现(源码+讲解视频+LW)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

作者头像 李华