# VMware VMFS

VMware VMFS (Virtual Machine File System) is VMware, Inc.'s clustered file system used by the company's flagship server virtualization suite, vSphere. It was developed to store virtual machine disk images, including snapshots. Multiple servers can read/write the same filesystem simultaneously while individual virtual machine files are locked. VMFS volumes can be logically "grown" (non-destructively increased in size) by spanning multiple VMFS volumes together.

## Version history

There are six (plus one for vSAN) versions of VMFS, corresponding with ESX/ESXi Server product releases.
* VMFS0 can be reported by ESX Server v6.5 as a VMFS version when a datastore is unmounted from a cluster/host.
* VMFS1 was used by ESX Server v1.x. It did not feature the cluster filesystem properties and was used only by a single server at a time. VMFS1 is a flat filesystem with no directory structure.
* VMFS2 is used by ESX Server v2.x and (in a limited capacity) v3.x. VMFS2 is a flat filesystem with no directory structure.
* VMFS3 is used by ESX Server v3.x and vSphere 4.x. Notably, it introduces directory structure in the filesystem.
* VMFS5 is used by vSphere 5.x. Notably, it raises the extent limit to 64 TB and the file size limit to 62 TB, though vSphere versions earlier than 5.5 are limited to VMDKs smaller than 2 TB.
* VMFS6 is used by vSphere 6.5. It supports 512 emulation (512e) mode drives.
* VMFS-L is the underlying file system for VSAN-1.0. Leaf level VSAN objects reside directly on VMFS-L volumes that are composed from server side direct attached storage (DAS). File system format is optimized for DAS. Optimizations include aggressive caching with for the DAS use case, a stripped lock down lock manager and faster formats.

## Features

* Allows access by multiple ESXi servers at the same time by implementing per-file locking. SCSI reservations are only implemented when logical unit number (LUN) metadata is updated (e.g. file name change, file size change, etc.)
* Add or delete an ESXi server from a VMware VMFS volume without disrupting other ESXi servers.
* With ESX/ESXi4, VMFS volumes can also be expanded using LUN expansion.
* Optimize virtual machine I/O with adjustable volume, disk, file and block sizes.
* Recover virtual machines faster and more reliably in the event of server failure with Distributed Journaling.
* While present in previous versions automatic unmap was added to VMFS 6 allowing for automatic space reclamation requests which previously were manually actioned.

## Limitations

* Can be shared with up to 64 ESXi Servers.
* Maximum filesystem size is 50 TB as of VMFS3, and 62 TB as of VMFS5.
* Maximum LUN size of 2 TB as of VMFS3 and 64 TB as of VMFS5.
* In VMFS3 and VMFS5 prior to vSphere 5.1, the maximum number of hosts which can share a read-only file is 8. This affects the scalability of linked clones sharing the same base image. In vSphere 5.1, this limit is increased to 32 with the introduction of a new locking mechanism.
* VMFS3 limits files to 262,144 (2$^{18}$) blocks, which translates to 256 GB for 1 MB block sizes (the default) up to 2 TB for 8 MB block sizes.
* VMFS5 uses 1 MB blocks throughout (with block suballocation for small files), and has a file size limit of 62 TB, though the VMDK size is restricted to 2 TB - 512 B in ESXi versions earlier than 5.5 due to a limitation in the version of SCSI emulated.
* There is also a limit of approximately 30,720 files (using MBR) on a single VMFS3 datastore. This has been raised to 130,690 files (using GPT) on VMFS5

## Open-source implementations
### fluidOps Command Line Tool

A Java open source VMFS driver enables read-only access to files and folders on partitions formatted with the Virtual Machine File System (VMFS) is developed and maintained by Fluid Operations. It allows features like offloaded backups of virtual machines hosted on VMware ESXi hosts up to VMFSv3.

### glandium VFS FUSE Mount

vmfs-tools supports more VMFS features and read only VMFS mounts through the standard Linux VFS and the FUSE framework. Developed by Christophe Fillot and Mike Hommey and available as source code download at the glandium.org vmfs-tools page or the Debian vmfs-tools and Ubuntu vmfs-tools packages.