Virtual Time Freeze
Here’s how to get control of a VM’s virtual clock.
I often install 180-day eval editions of software. Every 180 days I flatten my VMs and reinstall my VM guest software. But, my tests are usually only two or three days long. How can I configure the VM so that when I fully reset it (i.e., revert to snapshot) that it doesn't realize how many "days" have passed? I want it to think that it's just been installed, like Day 1. Is that possible?
Good question, Jeremy. Many of us that use VMs for periodic software testing run into the same problem. By default, VMs always attempts to synchronize with their physical host system's clock. This is usually a good thing, but sometimes administrators need complete control of a VM's virtual system clock. To isolate the VM's virtual clock from the physical host system's clock, you will first need to add these entries to a virtual machine's associated .vmx configuration file while the VM is powered off:
tools.syncTime = "FALSE"
time.synchronize.continue = "FALSE"
time.synchronize.restore = "FALSE"
time.synchronize.resume.disk = "FALSE"
time.synchronize.shrink = "FALSE"
To make the changes, navigate to the folder containing the virtual machine's configuration file and open the configuration (.vmx) file using a text editor such as Notepad. Once you have added the lines shown above, save the .vmx file. Note that the line tools.syncTime may already be present in the .vmx file, so you will just need to make sure that it is set to False. The lines starting with time.synchronize.continue should be added after the tools.syncTime line. For more information on VMware time synchronization, the document "Time Keeping in VMware Virtual Machines" is a very good read.
With these entries in the VM's .vmx file, each time you create a snapshot of the VM, the date and time of the VM's virtual clock will be preserved. So if you need to use the VM a week later and revert to the previous snapshot, the VM will resume running and with its system clock set to the date and time of the snapshot.
Tech Help—Just An
Got a Windows, Exchange or virtualization question
or need troubleshooting help? Or maybe you want a better
explanation than provided in the manuals? Describe
your dilemma in an e-mail to the MCPmag.com editors
at [email protected];
the best questions get answered in this column and garner
the questioner with a nifty Redmond T-shirt.
When you send your questions, please include your
full first and last name, location, certifications (if
any) with your message. (If you prefer to remain anonymous,
specify this in your message, but submit the requested
information for verification purposes.)
In VMware Workstation, you can create a snapshot by clicking the VM menu, selecting Snapshot, and then clicking Take Snapshot. In VMware Server, snapshots are created by clicking the Snapshots menu and then clicking Take Snapshot. To revert a VM to a previous snapshot in VMware workstation, click the VM menu, select Snapshot, and then click Revert to Snapshot. With VMware Server, you can revert to a snapshot by clicking the Snapshot menu and then selecting Revert to Snapshot.
To summarize, after preparing a new VM, installing the guest OS and applications and disabling time synchronization with the physical host, all you need to do is create a snapshot of the VM. When the snapshot completes, power down the VM. When you need to use the VM again, just open the earlier snapshot.
Now, suppose that you haven't used a VM in three months and want to make the VM think it is starting the minute after it was last shut down. You can force the VM's virtual clock to start at a pre-set time (such as one minute after the date/time stamp on the VM's virtual hard disk file) by adding the rtc.startTime value to the VM's .vmx configuration file. When present, the value associated with rtc.startTime sets the VM's clock to a specified Unix timestamp. For example, to make a VM think the date is Jan. 2, 2007 and the time is 4:24 p.m. Eastern time (GMT -5), you enter the following in the .vmx file:
rtc.startTime = 1167773040
If you're from this planet (like me) and can't convert current times to Unix timestamps in your head, try using the online Unix Timestamp Converter. Keep in mind that if you add the rtc.startTime value, you also need to add the lines (listed earlier) to disable time synchronization to the .vmx file as well.
While my planet of origin may be under debate, there is no debate on the usefulness of having full control of a VM's virtual clock.