VI3, NFS and Windows VMs

See the second update for the correct way of setting this up 🙂

You may be like me, and have a test lab running VI3.  You may also only be running Microsoft VMs for whatever reason.  I happen to be because that’s all I deal with as I work for a MS Consulting company.  Anyways, whenever I wanted to create a new machine I needed to have the ISO copied out to the ESX storage device.  This was always a pain because I’d have to use WinSCP or Filezilla to copy it from a host virtual machine to the storage device.  Plus there was the fact that I was now using 2x the space on the storage device because it’s accessible to ESX and it’s stored in a VM.  Lame.

With VI3 you can use NFS shares as storage devices.  Downside is, is that by default Windows only uses CIFS (or SMB) sharing.  However, with Windows 2003 R2 (you may be able to do it in Win2k3 too) you can install the Unix NFS tools which allows for the creation of NFS shares.

From the Windows machine you want the NFS share(s) located on, you need to open Add/Remove Programs from the Control Panel and then Add the following Windows components.  Under Other Network File and Print Services select to install all of the Microsoft Services for NFS.  I don’t think if you need all of them, but it’s working with them all (feel free to leave feedback if you play).

After you install those, it will require a reboot.  Once you’re back up, open up the Microsoft Services for NFS in the Administrator Tools.  Right click on the root (Microsoft Services for NFS) and select the user name mapping you want.  I set mine to AD lookup, but I’m using anonymous read only access on the share anyways.

If the CIFS share has already been created, you will need to create the NFS share from the command line.  This can be done with the following command:  nfsshare -o anon=yes

=drive:path.  Obviously replace

with the name you like and drive:path with the location for the share. 

If the CIFS share hasn’t already been created, then you will see a NFS Sharing tab when you attempt to create the share.

Once the share has been created, within your VirtualCenter client (or host based VI Client), select the host, go to configuration tab, and then Storage (SCSI, SAN, and NFS).  Select Add Storage and select the Network File System option.  Enter the info for the server you just set this up on and the folder (/

).  Now you have a mounted storage device for your share.  Yay!

As mentioned before, this NFS mount point can be a virtual machine on the host.  I haven’t restarted the host yet, so I’m not sure how nicely it plays with that though.

Resources used for this:
http://levelsofdetail.kendeeter.com/2007/01/setting_up_an_nfs_server_on_wi.html
http://support.microsoft.com/kb/324089

**Update**

Ugh, so just doing the above doesn’t work.  At least it didn’t list the contents of the iso directory.  No good.  Further research comes up with one possible solution, but it’s ugly.

Add anonymous login read access to the share and ntfs permissions on the share.  This seems to work, but I’m not really a fan of it.  For some reason, user mapping doesn’t seem to be working.  You should be able to do user mapping by grabbing the /etc/passwd and /etc/group files from your VI3 host and then importing them into the Microsoft Services for NFS User Name Mapping section (right click and define the location for these two files). 

I’ve mapped the local admin to the root account.  I get no love though as soon as I disable anonymous access on the NFS share.  Boo.  What really makes me angry is that I want to host templates on this Windows NFS share.  That would require me to enable read/write access to the anonymous user.  Needless to say, something I’m really not comfortable with.  Maybe I can fix this stupid user mapping issue, and then I won’t have to worry.

Oh yeah, be sure to enable the NFS client firewall rule on your host…

**Update #2**  This is the way to get this setup
Alright, I’m retarded as to why I couldn’t get this figured out.  The real steps to get this going:

  1. Enable NFS Client through the firewall in VI3.  This is done from the host level, configuration, security profile.
  2. Install Microsoft Services for NFS.  From Add/Remove Programs in the Control Panel open up Windows Components and add all of the Microsoft Services for NFS found under Other Network File and Print Services.  Yes, you need them all.
  3. Reboot if required.
  4. Using WinSCP or Filezilla, get the /etc/passwd file from your VI3 host.
  5. Open up the Microsoft Services for NFS in the Administrator Tools.  Do not right click on the root (Microsoft Services for NFS) and delete the user name mapping server.  Be sure it is set to localhost.  Don’t worry about setting the domain unless you want to do additional user name mapping.
  6. Right click on User Name Mapping and select the Use Password and Group files and point to the path of the passwd file.
  7. Right click on User Maps under User Name Mapping and select create maps.
    • On the windows account side, change to the local host (if it’s not already selected) and click the List Windows Users button.
    • On the Unix account side, click the List Unix Users button.
    • Select the local Administrator on the Windows side and the root account on the Unix side.  ESX does everything as root, so don’t worry about selecting multiple mappings. (You can definitely map to a domain account, but DO NOT map to the domain admin account as this is usually disabled.)
  8. Create the NFS shares.  Ensure that the user you mapped to on the windows side (local Administrator) has the required (Windows) Share and NTFS permissions.
    • Right click on a folder and go to Sharing and Security.  Go to the NFS Sharing tab and select Share this folder and give it a name.  DO NOT allow anonymous access.  Instead select the permissions button.  Give the access required and be sure to check “Allow Root Access”.  As mentioned before, ESX does everything as root, so this box must be checked.
  9. Within VirtualCenter client (or host based VI Client) select the host, go to the configuration and then storage.  Select Add Storage and select the Network File System option.  Enter the info for the server you just set this up on and the folder (/).  Now you have a mounted storage device for your share.  Yay!
  10. Verify the storage device by double clicking on it.  If you can view stuff in the folder on windows, you will be able to view it on the ESX host.