VMware ESXi: Shared Disk Between VMs

In some cases (as a rule in clustering scenarios) it may be necessary to share the same disk (vmdk or RMD) between 2 (or more) virtual machines (VMs) on VMWare ESXi. The most optimal way is to use the vmdk disk physically located on the shared storage or locally on the ESXi host. If you want to use the shared drive on different ESXi hosts, you can only use the shared VMFS (datastore) or SAN/iSCSI storage. A shared disk is a VMDK file that two or more virtual machines can read and write at the same time.

Virtual disks, which must be available simultaneously in several VMWare virtual machines, use the Multi-writer technology (available in VMware ESXI 5.5 and higher). In most cases, this mode of operation of shared disks is used in cluster solutions Oracle RAC and Microsoft MSCS cluster.

The main limitations of shared VMWare disks in Multi-Writer mode:

  • You won’t be able to perform the online migration of such VMs (neither vMotion nor Storage vMotion). You can migrate between ESXi hosts only powered off virtual;
  • If you try to write data to such a vmdk from the guest operating system, for example, create a folder, this folder will be visible only on the host that created it. Those, the Multi-Writer VMDK technology is needed just for clustering, and it’s impossible to use it as a shared disk with automatic file synchronization;
  • You cannot expand such a VMDK disk online.

By default, VMware vSphere doesn’t allow multiple virtual machines to open the same virtual machine disk (VMDK) in read&write mode. This protects data stored on a virtual disk from damage caused by multiple write programs on non-cluster file systems.

The Multi-Writer option ensures that a cluster-enabled application (Oracle RAC, Microsoft MSCS) when writing from two or more virtual machines doesn’t cause data loss.

READ ALSO  Converting Thick Provision Lazy Zeroed Disk to Thin on VMware ESXi

Suppose the shared external storage (connected to each ESXi host using iSCSI or Fibre Channel SAN) has already presented to all VMWare ESXi hosts, which are running the two VMs (node1 and node2) you want to add a shared virtual drive. On both virtual machines, you need to add a new SCSI controller.

VMware: Shared Disk Between Virtual Machines

In the vSphere Client inventory select first virtual machine (Node 1), right click on it and select Edit Settings.

vmware shared disk

To add a new virtual device select the SCSI controller in the dropdown list and press Add button.

As a type of SCSI controller, select LSI Logic SAS (be sure to create a new SCSI controller, don’t use a SCSI 0 controller).

Now you need to choose the desired SCSI Bus sharing mode:

  • Virtual – if you want to share a virtual disk between VMs on the same ESXi host;
  • Physical – used when you need to share vmdk file between VMs on different ESXi hosts.

vmware shared disk between virtual machines

Press OK. Next, you need to add a new virtual drive on the first VM (New Device > New Hard Disk > Add) with the following disk settings:

  • VM Storage Policy: optional;
  • Location: you need to select a shared datastore name, that will store the vmdk file;
  • Disk Provisioning: select Thick provision eager zeroed (another disk provisioning modes are not suitable). Note. You can convert thick provision lazy zeroed disk to thin.
  • Sharing: Multi-writer;
  • Virtual Device Node: select created earlier SCSI controller;
  • Disk mode: Independent – Persistent – in this mode, you can’t create snapshots for a virtual drive you want to share;

shared disk vmware

In the same way, you need to add a new SCSI controller to another virtual machine (Node 2). After that in the settings of the second virtual machine you need to add a new disk (Existing Hard Disk).

READ ALSO  How to Choose an External Hard Drive?

shared vmdk

In the menu that appears, select the VMFS Datastore, which stores the shared disk you created earlier. In the submenu, select the name of the first virtual machine and in the middle pane select the desired vmdk disc file.

esxi shared storage

You also need to select the Sharing mode – Multi-Writer for this disk

If you want to use more than one shared disk on VMware, keep in mind that each of them does not require the addition SCSI controller. One controller can serve up to 16 different drives.

Make sure that you use the same SCSI device address for a shared vmdk disk on both virtual machines. Therefore, if you added SCSI Controller 1 when creating a SCSI controller, you should select it. For example, if you have a new address SCSI(1:0) on VM (node1) for a new disk (this means the first disk on the second SCSI controller), you should use the same address SCSI(1:0) for the shared disk on the second VM (node2). It is important!

vmware disk sharing

Note. In ESXi versions, prior to ESXi vSphere 6.0 update 1, MultiWriter mode for vmdk is also supported, but you cannot enable it from the vSphere Client interface. You can add a multi-writer flag by shutdown the VM and manually editing the vmx file of the virtual machine, adding the following line to the end of the file:

SCSI1:0.sharing = “multi-writer”

vmware shared vmdk

You can also add this parameter in the VM properties: Options > General > Configuration Parameters: Scsi1:0:sharing “multi-writer”.

After changing the virtual machines settings, connect to the console of the guest OS virtual machine. In this case, the VMs running Windows Server, so you can remotely connect to them using RDP (how to enable RDP remotely or using the RDCMan manager). Start the Computer Management console and expand Storage > Disk Management section. Right click and select Rescan Disk.

READ ALSO  Managing "Logon as a service" Group Policy

vmware shared storage

The system detects the new disk and offers to initialize it. Select the desired partition table (MBR or GPT), create a new partition and format it. Similar operations must be performed on the second VM. After these settings, both VMs use shared disk. Now you can proceed to set up a cluster solution based on Oracle RAC and Microsoft Cluster Services (MSCS).

When trying to migrate a VM with a connected vmdk disk in MultiWriter mode, an error will appear:

Virtual machine is configured to use a device that prevents the operation: Device ‘SCSI controller X’ is an SCSI controller engaged in bus-sharing.

To resolve this issue: turn off the VM and perform cold vMotion.

In a similar way, you can provide simultaneous access from different VMs to the same raw LUN via Raw Device Mapping (RDM) mode. In this case, the RDM disk is added to node1 as usual, and when adding a disk to node2 instead of selecting the LUN number, you need to select the mapping VMDK file for the RDM disk on the VMFS Datastore.

Cyril Kardashevsky
Latest posts by Cyril Kardashevsky (see all)

20 comments

      1. I think …. that the MSCS requires SCSI locking / reservations in order to function properly, it does not support simultaneous writes I have tried using the multi-writer flag with a MSCS setup and it failed the pre-deployment validation testing.

        1. MSCS cluster supports the usage of shared Virtual disks on ESXi. But there are certain limitations: the model of the virtual SCSI adapter, the number of nodes, the versions of guest Windows etc.

          For more information, see the document:
          Setup for Failover Clustering and Microsoft Cluster Service
          pubs.vmware.com/vsphere-60/topic/com.vmware.ICbase/PDF/vsphere-esxi-vcenter-server-60-setup-mscs.pdf

  1. Trying to follow these guidelines but it just doesn’t work. Every time I create the virtual disk and go to the second machine and try to add it the second machine says it’s lazily zeroed and not shareable. (it’s thick, eagerly zeroed and says so on the first machine)

    1. You probably have the new SCSI controller configured for Physical. If you switch it over to Virtual, you should be able to see it as eagerly zeroed and able to change the sharing options. I’m assuming you’re trying to share a drive between two VMs running on the same ESXi host.

  2. I got this to work, to a point. Newly Created files/or changes in general on one server are not seen on the other server unless I disconnect/reconnect the shared disk. Any tips on that?

    1. Since both servers don’t know of each other, both servers assume, that they have unique access to the disk. Any changes made by server 1 will therefore not be known to server 2, esp it’s cache, and vice versa.
      Using the disk from both servers at the same time will result in a corrupted file system. You have to switch the disk offline at one of the servers.

      You can use it for shared data for a kind of “leightweight cluster”, though: Either server 1 or server 2 as the disk online, and you could export the disk as SMB share. If the active server fails or needs some OS patches, you could switch over to server 2.

  3. If I do that for 2 or more disks, the order of the disks, as seen in “computer management — storage — disk management” seems to be random, esp. after a server reboot.

    Does someone here have an idea, how to know, wich disk no. in “disk mgmt” is wich VM storage?

    1. you have to build out the FOC in windows or swl in order to make this work. putting a “TEST” folder on one vm and it will take a considerable amount of time to show on the other vm if at all until you reboot usually. the FOC in windows or sql will fix that issue.

  4. i am a little disappointed to understand after the fact that this isn’t at all what my client wanted, and i am probably not alone to think that this would have been kind to start this article with sort of “this is for fun purpose only as it will not be able to share anything between two machine”. I am now looking for alternative.

  5. I’m not sure what Victor is talking about. I had a little difficulty making sure I got all the settings correct, but I’ve attached a shared disk to two VMs, and the VMs can run simultaneously, and they can see the same data. I don’t know what the “for fun purpose only” point was, I assume he had some similar difficulties that I did, but I don’t know how he got it to attach the disk but not see the same data. I’m using this for CAD users to have VMs just big enough to install their apps, but then instead of having dedicated storage per VM that goes to waste, have a large shared disk that they can treat as a scratch space before saving their data to our company production data storage.

  6. hello,
    I have followed this guide exactly but cannot see the same data on the disk. I can see the disk and can read/write files etcc, but the data does not show up on the other VM. Any ideas?
    Thanks
    JD

  7. I understand that this is not a shared drive, but shared data storage. On one ESXi host, I have 2 datastores, and one is nearly full. The other is has space. Currently 2 machines are taking up most of the space on the first datastore. It would solve my problem if I could combine these 2 datastores, or make the machines use both. This seems like it would solve my problem, but do I really need to reformat the drives? That’s a lot of work lost.

    We also have another ESXi host with a large datastore, so I’d like to combine that too, if I could, so I can migrate machines between hosts when necessary. I guess I’d choose Physical instead of Virtual in that case.

    Am I getting it right, though – I would have to reformat the virtual drives on all the VMs?

  8. hi there, thanks for your sharing Infos.
    i Setup 1 Disk with Multiwriter.
    On both VM’s i got this to work.
    I have sync Problems, if i write something on the disk i can’t see it on the other VM until i reboot the VM. Do i Need to make a configuration? thanks alot, adrian

  9. Thank you so much for posting this! I’ve been having a terrible time creating a CSV volume and apparently, it centered around the idea that both nodes were riding on the same ESXi host. Because of that, I needed to switch my RMD shared drive to “virtual” instead of physical. All the documentation I read was countered to this. So, THANK YOU for taking the time to mention this aspect in your article. I was getting to the end of my rope on this one!

  10. Thank you for this post. However I was looking a solution to use with Windows files (IIS cluster). This is not the case for that, as the servers are not aware what other server is writing. To be clear, you write some file with SERVER1, and it doesn’t show up on the SERVER2. You have to OFFLINE -> ONLINE the disk or reboot the server.

    Do you have a solution for this?

  11. Guys, any update for the above issue.?
    I was able to add a shared disk on 2 VM’s with multi writer but when i add/delete any file from VM1 its not visible on VM2. Any idea’s how to overcome this without rebooting or making the disk offline and then online?

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.