Friday, January 28, 2011

Is there a way to clone an existing VM on an ESXi server without having to re-import it?

I have imported a VM into an ESXi server using the VMware "Converter stand alone utility". However, this process is a little tedious. Since I eventually want several copies of this VM (or, to be more accurate, several more-or-less identical instances of this VM) to be running at the same time, is there a way to clone the already imported VM? Or do I have to re-import for each instance I want?

  • [Editing my own answer]

    Summary:

    • the Converter took me about 15 minutes to run from WS6 to ESXi
    • the Converter took about 45 minutes to run from ESXi to itself
    • logging in with a command prompt and then copying as per the "unsupported" instructions worked, but took about 20 minutes to copy the VM, and I was unable to correctly start the result

    My conclusion: just use the Converter repeatedly.

    Thanks all for the ideas.

    (Update, much later: here are the details for how to create a copy of a VM without running the converter repeatedly.)

  • There is a "ghetto-esx-linked-clones" script that will make Linked Clones rather than full clones. Linked clones are great for VMs that you intend to use for short-term testing, since the clones only store differences relative to the original VM. Running this script requires enabling SSH access to the ESXi host.

    http://communities.vmware.com/docs/DOC-9202?tstart=7450

    From
  • Unless I'm sorely mistaken, you should be able to run the Virtual Infrastructure Client, connect to your ESXi server, right click on any stopped virtual machine and choose "Clone" which will duplicate the existing VM into another VM.

    lepole : only when you are running on vCenter
    David Mackintosh : I can confirm, ESXi 3.5 does not let you clone VMs from the VIC.
    Kevin Kuphal : Thanks for confirming. I am sorely mistaken :)
  • From memory the vCentre Server ( vmware.com/products/vi/vc/features.html ) will let you convert a machine into a template and then deploy multiple copies of that template into virtual machines. I believe there is a 60 day trial available ( vmware.com/tryvmware/index.php?p=vsphere&lp=1 ).

    Rob Bergin : Only if you have Virtual Center - if you are running "Free ESX 3i" then you are limited in functionality.
    Antitribu : if it is a one hit the trial may work for that.
    From Antitribu
  • You need console (or SSH) access to the ESXi server, and then you can copy your VMs around using standard UNIX commands (cp).

    To get console access:

    • go to the server console
    • type ALT-F1
    • type "unsupported" without quotes (no echo)
    • type your password (no echo, again)

    Now you are at the server's command prompt; if you want to enable SSH access, edit /etc/inetd.conf and remove che comment symbol ("#") from the SSH line.

    David Mackintosh : While correct, there must be more to it than this; I couldn't get the copy of the VM to start properly. It would always PXE then stop with a claim of "no operating system".
    Massimo : That's strange, I've always been able to copy VMs this way. Are you copying all the VM directory or just the VMX and/or VMDK files? Try copying the full VM directory to another location, importing the copied VM into ESXi and then starting it.
    From Massimo
  • Actually it's easier to just goto the host machine in VIC under summary tab and browse the datastore. Then create a folder for the new vm, copy the vmdk file from your source vm by copy and paste within the datastore browser and then create a custom VM for the new vmdk file. Make sure your VM and folder names match and it takes 1/10th of the time to do.

    Example for me was:

    7gig VM:

    Converter: 13mins Direct: 3mins Copy via Datastore browser: 1min

    I made copies of 17 VM's in Under 20 mins which saved a ton of time from converter.

    warren : thanks - this is just what I was about to ask for :)
  • No need to use the converter to clone a VM.

    Simply browse to the datastore:

    • Click on the host > Configuration tab
    • Right-click on the datastore with the VM you want to clone > Browse Datastore
    • Create a new folder in the store
    • Right click on the VM folder and select Copy (must be done in the right pane of the Datastore Browser)
    • Paste the VM to a new sub folder (otherwise the VM will overwrite itself)
    • Once copied, rename and move the folder if desired
    • Select the .vmx file within the cloned VM and select 'Add to Inventory'
    GruffTech : couldn't have said it better myself.
    From Leon Roy
  • Leon Roy's advice worked great!

  • Leon Roy's advice worked for me. But I think there is something to consider: vmdk-files stored directly in the directory of the vm are linked with a relative path to the vmx-file whereas vmdks that are stored outside this directory are linked with an absolute path. So if one of the vmdks used by the VM is not situated in the same directory as the VM itself, you have to change the fileName value for that file in the vmx-file before re-adding it to the inventory. Otherwise, if you add the copied VM, it would use the original not the copy of the vmdk.

0 comments:

Post a Comment