VMFS(Virtual Machine File System)是VMWare为其VMWare ESX Server和VMWare Infrastructure产品开发的集群文件系统。它主要用来存储虚拟机的磁盘镜像,设计的初衷是为了让多个主机合作维护存储在共享磁盘上的文件系统,而不需要一个coordinator的角色。
VMFS会将共享的磁盘分成四个不同的资源池:inode,指针块,数据块和子块。Inode和指针块在VMFS中的作用和在传统的UNIX文件系统中的作用类似,分别用来存储文件的元数据以及指向包含实际文件数据的数据块的指针。数据块和子块都用于存储文件的数据,区别是块的大小。在每个资源池中,资源都被组织成集群(cluster),每个集群的头部维护了该集群包含的资源的元数据,比如每个资源的引用数量,哪些资源已经被分配了。
前面提到,VMFS采用了两种不同的资源类型来存储文件数据:数据块和子块。在VMFS中文件大小满足双峰分布,虚拟机磁盘镜像文件通常有几个GB那么大,而配置文件和日志文件通常只有几个KB。因此,VMFS使用1MB的数据块来存储大文件,减少元数据开销和外部碎片;而对于小文件,VMFS使用更小的子块来存储,减少内部碎片。
VMFS使用分布式锁管理来支持多个主机并发访问文件和资源。大多数集群文件系统使用IP网络来进行同步(RPC?),而VMFS完全依靠磁盘的锁来同步所有的文件访问。为了保护临界区的读-改-写,VMFS使用基于SCSI-2的逻辑单元号预留技术(LUN reservations)保证访问锁数据结构的原子性(这段不是很懂)。为了利用SAN的可靠性,在VMFS中访问同步状态(锁的状态)和访问文件