Convert KVM VMs to Citrix XenServer

Attach External Hard Drive or External Storage

For the purposes of this task you will want to attach some sort of removable storage. An easy way to determine what the device the storage shows as run the following before attaching the storage:


make note of the last /dev/sd# device you see. Now plugin your external storage and run the same command, you should see a new entry there that should be your path you will want to use in the next step (ex: /dev/sdd1)


Next we will mount the external storage to /mnt

mount /dev/sdd1 /mnt


List the LV Info

On the KVM host you wish to copy the VM from list the lv information


You should see a path like /dev/KVM/vmname.

Convert Raw LVM to VHD

Using the qemu-img utility you will need to run the following:

qemu-img convert -O vpc /dev/vg_name/lv_name /mnt/vmname

You can also convert to other formats as listed belelow:

Disk Format
QEMU -O Argument
Disk Format
QEMU -O Argument
qcow2 (Xen/KVM) qcow2
QED (KVM) qed
raw raw
VDI (vbox) vdi
VHD (Hyper-V/Citrix Xen) vpc
VMDK (VMWare/eSXI) vmdk

Once the disk is converted and on your external storage you will want to exit the /mnt directory and unmount

cd /
umount /mnt


Import to Citrix XenServer

Attach the external drive and mount it similarly to how you did in step 1, however you will need to check and see what device this shows up as, it will likely be /dev/sdb1. Mount this to the /mnt location.


Next we will need to identify the UUID of the storage repository in Xen we are going to use by UUID:

xe sr-list

Using the UUID from above create a global variable using the following:

RESTORE=$(xe vdi-create sr-uuid=<UUID of SR from above> name-label=<vmname> virtual-size=<size of drive +1 gb>GiB)

This will create an object named restore in your storage repository. Next we will want to import the VHD

xe vdi-import filename=/mnt/<vmanme> format=vhd --progress uuid=$RESTORE

Once the import completes you will want to create a new VM in Xen but not start it. After the VM creates you will want to remove the delete the hard drive associated with the VM on the storage tab. Once you do this click “attach disk” and select the disk you imported. Once this is attached you can start the VM and you should be good to go. Note on Windows systems and some linux systems you may need to update the network settings. Once this is done install Guest Tools, reboot and you’re all set.

Uploading Hyper-V VHDs to Azure

I recently had a project I was working on in which some inherited Azure VMs were missing the Azure agent and nobody knew the passwords for them. After a quick support call to MS it became apparent I would have to delete the VMs and preserve the disks, download disks, load into hyper-v and manually reset the password. In doing this I learned a few gotchas such as not being able to convert the VHD into a bootable Azure disk unless uploading through the Azure Powershell CLI. Here’s my quick how to upload disks guide.

Installing Azure Powershell

First we will need to install the Azure Powershell Module. This can be accomplished by running Powershell as administrator and entering the following:

Install-Module Azure

When prompted press choose A for yes to all. 

Note: If there is any conflict you may need to add the -AllowClobber to the end of the command above.


Login To Azure and Get Publish Settings File

First you will need to log into Azure by entering the following in Powershell


At this point you will be prompted to log into Azure. 


The next step will be to get an Azure Publishing Settings file. You can do this by entering the cmdlet below and then importing the file with the following cmdlet:


Import-AzurePublishSettingsFile -PublishSettingsFile “<path to file>”


Select Your Subscription and view Storage Accounts

At this step we will choose which subscription to use (if you have more than one) and list storage accounts so that we know where to upload the disks to. 

Warning: If you attempt to upload the VHD through the web GUI instead of using this method it will be created as a block blob not a page blob which prevents you from being able to convert it to a bootable disk for use in the gallery. The only way to do this correctly at the time of this writing is through the Powershell API.


Select-AzureSubscription -SubscriptionId <enter yours here>



Uploading The Azure VHD and Converting It

At this point we are setup for the part we’ve all been waiting for. Make sure your VHD is not thin provisioned and that the VM has the Azure Agent installed and has been sys prepped (if using as a template).

Add-AzureVhd -LocalFilePath “<file path to your VHD>” -Destination “<URL of storage location with your filename after the last />”

This will create an MD5 hash and upload the disk. 


To convert the disk we will want to run the following:

Add-AzureDisk -Diskname ‘<name your disk something relevant>’ -MediaLocation ‘<URL where your disk lives in azure storage>’ -Label ‘<label>’ -OS <Choose Windows or Linux>

Upgrading Citrix XenServer 6.x to 7

I know it’s been a little bit, I intended to blog about this a month ago but life and work sometimes get busy. Nonetheless here goes!  I know it’s been a little bit, I intended to blog about this a month ago but life and work sometimes get busy. Nonetheless here goes!


Step 1: Install Citrix XenCenter 7

Before you begin the upgrade process it’s crucial to install the new version of Citrix XenCenter as you will not be able to connect to or manage hosts post upgrade with the old client, however the new XenCenter client is backwards compatible. Both the XenCenter installer and XenServer ISO are available for download at the following link here. During the install of the client, the old XenCenter will be automatically removed and replaced by the new one.


Step 2: Start Pool Upgrade

If you are running a standalone XenServer host, the process is quite simple, you can skip the next paragraph as the steps will pertain to a multi-node Citrix XenServer pool.

When performing upgrades to a XenServer pool you will want to start by upgrading the pool master first. There are 2 options when performing the upgrade, you can choose to have the upgrade automatically move through the pool a host at a time, or you can choose to manually upgrade each host. For the purposes of this article I will cover the steps for the manual upgrade as most Xen admins will take the conservative approach that will give them the most control during the upgrade process. Citrix recommends backing up the pool database which can be accomplished by running xe pool-dump-database. You will want to live migrate or shutdown all running VMs on the given host you are about to upgrad.

Next we will choose the Tools menu and select Rolling Pool upgrade, and follow the steps in the wizard selecting the manual upgrade mode. You can then connect the ISO to the host via virtual media to the LOM/OOB interface (iDrac for Dell) or burn the ISO to disk for XenServer7 and insert the CD and connect to the host with a monitor and keyboard. Your server will reboot and you will need to choose the boot option to boot from disk or virtual media.


Step 3: Installing XenServer 7 on the Host

Upon booting from the disk you will be greeted by the screen shown below, press enter and continue.

boot from disk

You will be prompted to select your keymap, choose the relevant one for your language and keyboard type then press enter:

Screenshot from 2016-07-27 21-09-27

Select OK and press enter on the next screen to start the upgrade process:

Screenshot from 2016-07-27 21-09-43

Choose to accept the EULA and press enter:

Screenshot from 2016-07-27 21-10-13

Choose to upgrade from the existing XenServer and select OK:

Screenshot from 2016-07-27 21-10-25

Next you will receive a notice that the installer will collect a backup of your current installation, go ahead and continue:

Screenshot from 2016-07-27 21-10-49

Next we will need to choose the location of our installer, if you are using virtual media or burned a CD/DVD choose local media:

Screenshot from 2016-07-27 21-11-02

Next you will be prompted as to whether or not you would like to install any supplemental packs, if you have any that you are currently dependent on you may do so, if not choose no and proceed with the install (supplemental packs can also be installed after the fact)

Screenshot from 2016-07-27 21-11-21

Next we will be asked if we want to verify the installation source, you can safely skip this or if you’d like you can choose to verify (if you are using a method other than local install you should verify the install source):

Screenshot from 2016-07-27 21-11-35

Next the moment we’ve all been waiting for, choose install XenServer and go get a cup of coffee, this will take 10-15 minutes to complete.

Screenshot from 2016-07-27 21-11-50

Once this is complete your host has been fully upgraded and you should be able to see and manage it within XenCenter. If this is a standalone XenServer you are done upgrading hosts. If you are using a XenServer pool you will need to rinse and repeat this action across the other hosts in the pool.

Step 4: Update XenServer Tools

Once all of your hosts are upgraded you can now perform the XenServer Tools upgrade, this will greatly improve performance on Windows boxes, as Disk IO is not optimized until the new tools are installed and performance may be untenable and/or horrific until this is done. Please note for Windows upgrades it will take at least 2 sometimes 3 reboots for the upgrade to fully complete. For Linux systems you may need a reboot, however there are no performance issues with Linux guests running the same tools as the previous version of XenServer.