Wednesday, December 10, 2014

Move VM between datastores in ESXi

After installing my new (faster) 1TB drive in my ESXi server, I wanted to move some VMs to it.  In my mind, this logically seemed like a very simple process.  After spending 10 minutes navigating around in vSphere, I realized it wasn't.

I started searching Google for the easiest process for this and I did find a few solutions.  After I performed one, I realized it did not maintain the minimal file size of my 'thin' provisioned disk.  My disk was now inflated to its full size on the new disk.  I did not want this, I wanted to maintain the 'thin' provisioning, so I searched again.

I finally came upon a response on serverfault from 'ohaal' with step by step instructions on how to copy VMs between datastores and maintain thin provisioned disks (I believe these may have been replicated from another blog but it no longer appears to resolve).

Look for 'Step by step guide using vmkfstools in the CLI' or just see the copied walkthrough below.  I do not take credit for this, I simply wanted to replicate it in case it disappears.

I have confirmed this works on ESXi 5.1.  Additionally I do not have any snapshots to worry about.

Step by step guide using vmkfstools in the CLI

  1. Power off VM
  2. (Optional) Consolidate snapshots if needed.
  3. Remove VM from vCenter inventory
    • Right click VM and click "Remove from Inventory" enter image description here
  4. Enable SSH on the ESXi machine
    • In the vSphere client go to: Configuration -> Security profile -> Properties (next to Services) -> SSH (in the list) -> Options -> Start
  5. Log in via SSH as root
  6. Prepare a directory on the destination datastore
    • mkdir "/vmfs/volumes/destination_datastore/Some VM"
  7. Clone the .vmdk files using thin provisioning
    • vmkfstools -i "/vmfs/volumes/source_datastore/Some VM/Some VM.vmdk" -d thin "/vmfs/volumes/destination_datastore/Some VM/Some VM.vmdk"
  8. Copy any remaining files (avoiding overwriting the .vmdk files)
    • find "/vmfs/volumes/source_datastore/Some VM" -maxdepth 1 -type f -print0 | grep -v ".vmdk" | while read file; do cp "$file" "/vmfs/volumes/destination_datastore/Some VM"; done
  9. If you did not consolidate snapshots in step 2, there may be snapshot .vmdk delta files, we also need to copy these (this may take some time):
    • find "/vmfs/volumes/source_datastore/Some VM" -maxdepth 1 -type f -print0 | grep [0123456789][0123456789][0123456789][0123456789][0123456789][0123456789] | grep ".vmdk" | while read file; do cp "$file" "/vmfs/volumes/destination_datastore/Some VM"; done
  10. Once done cloning and copying all necessary files, add the VM from the new datastore back to inventory
    • In the vSphere client go to: Configuration->Storage->Data Browser, right click the destination datastore which you moved your VM to and click "Browse datastore". enter image description here
  11. Browse to your VM and right click the .vmx file, then click "Add to inventory" enter image description here
  12. Boot up the VM to see if it works, when asked whether you copied or moved it, just answer that you copied it. (I'm not sure what this means, but I think it has to do at least with the MAC address of the vNIC being changed.)   Choose "I _moved it" to maintain the MAC Address.enter image description here
  13. If the VM boots up fine, you can remove the VM from the old datastore.
    • rm -rf "/vmfs/volumes/source_datastore/Some VM"

My ESXi Whitebox Server

Just like many IT enthusiasts, I built a whitebox server to play around with various IT related technologies.  I wanted something that was capable of running VMware ESXi so I could run a small IT enterprise in a virtual environment, but would also not break the bank.  I ended up installing ESXi 5.1 on a USB2.0 thumb drive that I had laying around and threw in some drives for datastores.

At this point I am running anywhere from 3-8 VMs at any given time depending on what I am testing out.  It is a mix of Linux and Microsoft Operating Systems, along with a few 'turn key' virtual appliances (Security Onion, Web Security Dojo, and more).

Here is a breakdown of the hardware I am using:

AMD FX-8150 (8-core)
4x 8GB Corsair Vengeance LP (always been a fan)
Hard Drive
3x 250GB Western Digital (random drives I had around)
1x 1TB Seagate Barracuda ST1000DM003
Cheapest Rosewill case for mATX, Corsair CX430
Syba SY-PEX24028 PCI-Express Dual Gigabit NIC

I am using one of the ports on the Syba NIC configured in promiscuous mode to monitor network traffic sent by a 'Mirror' port on a TP-Link TL-SG108E 8-port switch.

My implementation of ESXi is basic, no frills.  I wanted something where I could spin up an OS and roll with it.  And this works perfect for me.

Annoying 'Log in to sync Facebook' Android notification

Ever since I upgraded my Samsung Galaxy S Vibrant to the S4, I have been getting these notifications to 'Log in to sync Facebook with your other applications'.  The weird thing is that I already had the Facebook app and have been using it.  I dealt with it for awhile until recently.  After searching online I found out how to disable it and wanted to share.

Open Settings > More > Application Manager
Swipe over until you are looking at 'All' applications
Scroll down and look for SNS - It will have a Facebook icon
Select SNS and then choose to Force stop and Turn off

What the annoying notifications look like for reference: