Updated Citrix XenServer 5.5 Automatic VM Backup Scripts

I have re-written the popular Citrix XenServer 5.5 Automated Live VM Backup scripts from scratch, with some big improvements:

  • Separate backup configuration script – So you don’t need to touch the key execution and function scripts to configure backups.
  • VDI removal – Run in addition to the standard vm-uninstall command to stop snapshotted VMs allocating all your disk space
  • Logging – Enable/disable functionality with more advanced function logging and file path customisation.
  • Backup VM selection – The facility to select between all, running, none and specifically set (by VM uuid) virtual machines.
  • Quiesce snapshots – To take advantage of the quiesce snapshot functionality if the VM supports it.
  • HA disabled – High availability is disabled on exported virtual machines to stop configuration issues when re-importing.

This is a complete re-write from scratch and as such is relatively untested other than on my systems – please provide feedback regarding any successful or problematic installations.

The latest release of the updated Citrix XenServer Backup Scripts can be downloaded from http://www.andy-burton.co.uk/files/xenserver_backup/xenserver_backup.tar.gz as a tar gzip archive.

Installation instructions:

[root@xs /]# mkdir /home/backup
[root@xs /]# cd /home/backup
[root@xs backup]# wget http://www.andy-burton.co.uk/files/xenserver_backup/xenserver_backup.tar.gz
23:45:25 (12.9 MB/s) - `xenserver_backup.tar.gz' saved [3181/3181]
[root@xs backup]# tar -xzf xenserver_backup_3.0.tar.gz
[root@xs backup]# chmod 700 vm_backup.*
[root@xs backup]# ./vm_backup.sh
[root@xs backup]# nano vm_backup.log

Open and edit vm_backup.cfg to configure the backup.

Run vm_backup.sh to run the backup process, this script does not need to be modified.

The virtual machine backup functions are located in vm_backup.lib and do not need to be modified.

As usual, all comments, negative, neutral or positive are all very welcome.

For those that require it, I will write additional information and a more detailed installation procedure in due course.

Update Log:

104 thoughts on “Updated Citrix XenServer 5.5 Automatic VM Backup Scripts

  1. Pingback: Andy Burton » Blog Archive » Citrix XenServer 5.5 Automated Live VM Backup to Windows CIFS Share - PHP & MySQL Development, IT Infrastructure and Car Detailing

  2. Thank you for your script, it works great on my two XenServers. A little bit strange is that after running your script an empty file named “0″ appears in the script directory. Improvements: Cool would be an integrated rotation of the vm backups.


    • Interesting! Is there anything in the 0 file? What user/group owns it?

      The new structure with the config file is so that i can modify the executeable script to accept seperate config files. That way you can setup seperate cron jobs for different dates to run different backup processes. Is that what you were after?

      Cheers, Andy

      • The 0 file is empty. User + Group is root (-rw-r–r– 1 root root 0 Nov 30 13:03 0). Backup went through flawlessly. The 0 file appeared on different XS 5.5 (all hotfixes) machines.

        At the moment I’m rotating the xva files via “find /backup/VMs/*.xva -mtime +3 -exec rm {} \;” which is quite dangerous. I’m looking after a setting that rotates a vm backup due to a defined counter. E.g. to have 3 backups of a vm rotated. This “find … ” thing works, but won’t check if a newer backup exist, for example.

        Cheers, Torsten

  3. This worked great for me. As I am new to unix I have a small issue which keeps me incomplete with this task. I am backing up my VMs to a NAS storage. I was able to mount the share folder and export also working fine. The issue is I lost the mount information if I reboot the Xen server. I’ll need to again input the mount commands in order to get the share folder mounted.

    Please let me know how to get the share folder permanently.

    Cheers, Prakash

  4. Hi

    This worked great for me. Thanks for such an awesome script. I am using NAS storage to store my backups. I was able to mount the share folder successfully using the mount commands you have provided. But I have problem that I lost the mount information if I reboot the xen server. I am new to unix. Please advice how to eternally mount the share folder on xen server.

    Now I manually inputs the mount commands whenever I reboot the xen server to get the share folder mounted.

    Cheers, Prakash

  5. Very nice. I do have one issue though. I have one machine that was imported using XenConvert, and it appears the XVA is only including one of the drives. This machine has two. I noticed that the OS drive is in position hda and the data drive is in position 2. The data drive appears to be the only drive getting into the XVA.

    • I am in the process of setting up our shared pool so will be trying this out soon.

      From what i can gather –
      I guess that it will work through each machine individually, so to get round this, just install on all of your pool servers and mount them to the same share and then stagger the cronjob on each machine. set the backup level to ‘running’.

      I will post my findings when when i have set it up

      Will says:
      16/12/2009 at 6:31 pm


      Would this script work with on a Shared Pool?

  6. Very nice script, but unfortunately i have i big problem during the export of VM.

    Script is able to create a snapshot but not to export it into an .xva file. I give ” Permission denied: open, /media/backup_vm/ITCXTEST02-2010-01-07_11-47-15.xva.”
    I mounted an NFS share on /media/backup_vm/, and the strange thing is that i can create a directory within this share but not export snapshot.

    Have you got any advice about this issue?

  7. Hi

    This worked great for me. Thanks for such an awesome script. I use this script for disaster recovery but when I import the vm_????-??-??_??-??-??.vxa file to another xenserver, it is imported as a snapshot and I can’t start it.

    Maybe I’m wrong here…

    Thanks a lot!

    • I’m sorry, it’s my fault. I didn’t realise that the “operation” was unsuccessful.

      Best regards.

  8. Outstanding script and great work.

    Any possible suggestions to compress these files once they land? I have seen some vmware scripts that compress the files once they have been backed up and could save a ton on space. Thanks again.

  9. I am trying to get this to work without having to have the NFS backup share mounted to each xenserver, but attached to the pool, is this possible?

  10. Nice script, very usefull.

    I would just recommand to upgrade first to XS 5.5 Update 1 to fix the problem of wasted space for snapshot on some kind of storage repository.

  11. Sorry guys, I am Linux/Unix dumb. Can i run these commands from the XenServer console or do i need to ssh from my PC? Would anyone be willing to do some actual step by step instructions for us dumb folk? Thanks for an awesome much needed function!!

  12. Nice script. Thanks

    You can add the following in vm_backup.cfg to support remote backups:
    xe_remote=”-s xen.company.com -u user -pw password”

    And in vm_backup.lib, replace all occurrences of ‘xe ‘ with:
    xe $xe_remote

    xe vm-list $xe_remote power-state=running is-control-domain=false 2>>$log_path

  13. Perfect, just the one I’ve been looking for …many thx. If the script can become a little interactive for adding backup location like a USB HDD it will be great for people like me working with non-profit organisation..thx again.

  14. We have a small XenServer pool, 5 nodes at present.

    All VM storage is based on two iSCSI SANs. I am backing up the VMs, using this script, to an NFS share on another server.

    I have added the NFS share as a “NFS VHD” in XenCentre. This enables each node access to the share, although it is not neccessary for them all to have access to it.

    The script will gather a list of all running VMs across the pool and back them up to the NFS share mount via the master node.

    All you do is change the backup location to the mount location, which will be: /var/run/sr-mount/uuid, full details can be obtained by running: df -h

    Some handling on retention would be good also. As these snapshots will start to take up lots of space.


  15. It works like a charm, everything I need is there. My setup is one XenServer with 5 virtual machines on it, Linuxes and Windows 2008. Thank you very much.

  16. Nice script. Worked great. New to linux. Any tips on how to compress backup (remove “white space” from guest)?

  17. Hello.

    Very nice script.

    Im using HP XenServer version (USB dongle) and most of the filesystem is read-only. (no directory /home)

    I can make a folder in /etc/…

    Is it possible to modify the script.?

    Regards Michael

  18. To make sure that your backup destination folder is always mounted when running the script, insert this on the vm_backup.sh (just after the load functions and config lines)

    umount /backup
    mount -t nfs 192.168.x.x:/mnt/vol/nfs/vm-backup /backup
    if [ "$?" != "0" ]; then
    log_message “mount failed”

  19. LOVE THIS!!!!! I’m having trouble getting CRONTAB to actually run automatically – still need to play. Did the automout of the CIFS share in FSTAB – works wonderfully.

    Suggested additions:
    –Upon script failure (unable to write to backup folder for whatever reason), the snapshot stays with the VM rather than being delieted. Its like the script stops but doesn’t remove the parts it created. I haven’t tested that with multiple VMs yet, but if it didn’t complete the removal of the snapshot from the one machine, I’m thinking it could potentially halt the scritp completely on any failure (again, not positive on that).

    –My CIFS shares utilize “previous versions” and a “recycle bin”. This means when I replace a file with a newer version, the old one is maintained for 90 days. It would be cool if I could make these backups with the same filename and let my windows server (where they’re being backed up) handle the multiple backups (previous versions). However, in testing, the script fails with a “file already exists” type of message. Not sure how to force an overwrite. I did remove the date/time stamps from the filename so it was just {vmname} for the backup, which should always overright itself.

    Just my .02 THANK YOU SO MUCH for making this…

    If anyone has any thoughts on why my CRONTAB isn’t running at night, let me know.



  20. I’m testing the script for disaster recovery purposes. on Xenserver 5.5 sp2.

    When i double-click the XVA, and import it into another Xenserver, it starts importing the machine, but after about 10 seconds i get the error message: The file could not be imported.

    I’ve tested this on different machines. And both with the import template or import VM option. When i manually make an export, it just works fine importing the machine.



  21. If anyone here is trying to do a backup to a NAS and the format is XFS (Buffalo NAS) and you are having issues with your backup failing, the problem has to do with the mount format.

    instead of doing this:

    mount -t cifs //NAS IP/backup/Xen -o username=USERNAME,password=PASSWORD /backup

    remove the “-t cifs” because the format isn’t cifs. by removing, linux will figure it out”

    So, just use:

    mount //NAS IP/backup/Xen -o username=USERNAME,password=PASSWORD /backup

    This script works well.

    I modified vm_backup.sh and directly under the Load function, I added the following:

    umount /backup
    mount // -o username=admin,password=passowrd /backup

    You will need to change the ip address to reflect your NAS and if you didn’t change the Buffalo NAS login and password, this is the default.

    I also added the cron job per instructions with this small change:

    type: crontab -e
    0 2 * * * /home/backup/vm_backup

    Some people might not understand how to use the vi commands to add text and save, this is what you need to do as an exampe for the crontab function.

    type crontab -e to access the crontab file, or if you need to open a file, type vi “filename”

    once in the file, to insert a line, just press i and hit enter, you can then arrow up the the space created, hit “esc” then type your command as normal, otherwise, just type out what you need to do.

    when finished with the file and you want to save, hold down shift and press “q”.
    to save, just type “w”, then “q”. to quite without saving, just type “q!

    Hope this helps,


  22. Hi, in addition to my comment above I have added more functions that I think would be helpful to you guys out there!

    After the load functions I have added the following:
    1. Check if the share is mounted
    2. Delete files based on age (useful when you don’t have much space)
    3. Check the share’s available space is sufficient

    # Load functions and config

    . $dir”/vm_backup.lib”
    . $dir”/vm_backup.cfg”

    # Check to see if the destination of the backup is mounted

    umount /backup
    mount -t nfs 192.168.x.x:/share/folder /backup
    if [ "$?" != "0" ]; then
    log_message “Mount failed.”
    log_message “Backup destination mounted.”

    # Delete backup files older than 7 days
    find /backup/* -type f -mtime +7 -exec rm -f {} \;
    sleep 10

    # Check to see if available space on the backup destination folder is sufficient

    spaceleft=$(df -B M | grep backup | awk ‘{ print $3 }’ | sed ‘s/M//g’)

    # Enter the number in MB the required space for the backup
    if [ $spaceleft -lt $space_required ]; then
    log_message “Available space on the backup destination is insufficient.”
    log_message “Backup destination has sufficient space.”


    • Thanks Andy and ubay25! I am using this script with ubay25′s additions, and it is working great. I am using a nfs mount to a D-Link DNS-321 2-Bay Network Storage Enclosure I had kicking around to store the backups.

      • It’s good to know it’s working for you. Probably next on the list is to deduplicate the backups!

  23. Thanks Andy, the script works a treat. Is there a way to get the script to run automatically on a daily/weekly basis?



    • Shppyt, please read the posts. There’s a detailed instruction on how to schedule the script to run.

  24. Hi Andy,

    I just saw that XS 5.6 beta has online snapshots with VDI and memory state included now. Seems they’re getting somewhere ;)

    How exactly are the VDIs copied since they’re active during the progress? I’ve recently tried your script and restored two machines, one of which had active websites during the backup. It came up with a need to run a filecheck while the other one was fine since it was more or less just and OS install without services on it. Are we getting inconsistent data?

    Kind regards
    David Majchrzak

  25. Andy,

    I like your script but I have ran into an issue where when I restore a backup from this script, if the server had drive c and drive d, i get a double copy of drive d.

    Now, I have noticed that if I actually stop the virtual server and do an export, I have no problem restoring to any Xen 5.5 server.

    Do you have any script that I can automate with a cron job to shut down my virtual servers in 5.5 and export as backup? I trust the export as backup because I have never had an issue with restoring them.

    Also there is a bug with Xen in regards to snapshots. You have to enable Xen VSS on the server first and if you ever try to do a standard windows backup (multiple backup methods are recommended), you get a windows backup failure because VSS isn’t correct. You have to run the bat file under Xen to turn off Xen VSS and turn back on windows VSS. Real pain in the Arse!

    If you or anyone has a backup job (export) virtual servers after shutting them down, then turning them back on after backup, I would appreciate it.

  26. Thanks Andy,

    Using your script as an example, I have built a web interface to manage the backup’s for XenServers. We have a couple of XenServers running so we needed a common web interface for the management and configuring the backups.

    I have built the core using Perl / Mysql and the web interface in PHP / MySQL

    Thanks again for a great script


    IDEORIS Pty Ltd

  27. Hi Andy,

    Thank you for this very useful script!

    I changed it to accept the list of VMs to backup as an argument. Instead of using ‘backup_vms’ in the configuration, you specify it on the command line. This allows you to backup just one VM, without having to edit the configuration, by specifying its uuid. If there’s no arguments, it lists all VMs (uuid and label). Here are the changes to the code:

    case $1 in

    if [ $# != 1 ]; then
    if [ $vm_log_enabled ]; then
    log_message “Backup no VMs”
    echo -e “\nUsage: `basename $0` [all|running|list|]\n”
    if [ $? -ne 0 ]; then
    if [ $vm_log_enabled ]; then
    log_message “get_all_vms failed: $all_vms”
    exit 1
    echo “Availables VMs:”
    for uuid in $all_vms; do
    vm_label=`get_vm_label $uuid`
    echo “$uuid $vm_label”
    exit 0
    # backup a specific VM
    add_to_backup_list $1

  28. Great script! Just wondering, I have 1 vm running that I don’t want to backup. It could be running on any of the servers in the pool. How do I go about backing up using “running” but always exclude that uuid?

  29. Hi Andy,

    Great Job with this script.
    I have just started to run it on our 2 server pool to see how it handles things. I started to run it on both servers with the settings set to ‘running’ and i noticed that there were duplicates in the backup folder.
    It seems to me that the script will backup ALL running vms in a pool regardless of home server.

    This is a massive win!


  30. I decided to test importing the .xva into my test server for DR testing and my Windows 2008R2 server won’t start. The backup ends successfully, and I’ve tried several, but it just blue screens me and shutsdown. I’m attempting a 2003 box right now and see if I have the same issue.

  31. Hi,

    I’ve got a weird problem:

    When I run the script for a VM with 16GB and an installed Windows Server 2008, everything is ok and I can later import the xva file, but when I change the uuid to a VM with 8GB and Windows Server 2008, I get an error at the export, that there is insufficient space…
    “Error code: SR_BACKEND_FAILURE_44
    Error parameters: , There is insufficient space, ”

    Can somebody explain me why this happens?

    Thank you very much!

    btw: thank you And for the script!!!

  32. Hello Andy,

    Very nice script. I am just testing it. I am only missing the “coalesce leaf” command. I am not very familiar with the bash. Would it be possible to integrate the “coalesce leaf” command?

    Greetings from Germany!

    Have a nice weekend!

    Kind regards,

  33. Error:

    [2010-04-26_10-42-10] ——————————————
    [2010-04-26_10-42-10] Add to backup list: 81bfc147-4bdd-15b3-b3ff-d0825e89fbfd
    [2010-04-26_10-42-10] Backup list VMs
    [2010-04-26_10-42-10] Initialise backup of VM list
    [2010-04-26_10-42-10] Backup VM 81bfc147-4bdd-15b3-b3ff-d0825e89fbfd
    [2010-04-26_10-42-10] Get VM label 81bfc147-4bdd-15b3-b3ff-d0825e89fbfd
    [2010-04-26_10-42-11] get_vm_label succeeded: NYSERVER06
    [2010-04-26_10-42-11] Snapshotting VM 81bfc147-4bdd-15b3-b3ff-d0825e89fbfd
    [2010-04-26_10-42-11] Snapshot with quiesce 81bfc147-4bdd-15b3-b3ff-d0825e89fbfd as NYSERVER06_snapshot
    Error code: VM_SNAPSHOT_FAILED
    Error parameters: Quiesce snapshot not supported
    [2010-04-26_10-42-12] Quiesce snapshot failed:
    [2010-04-26_10-42-12] Attempting normal snapshot
    [2010-04-26_10-42-12] Snapshot 81bfc147-4bdd-15b3-b3ff-d0825e89fbfd as NYSERVER06_snapshot
    Error code: SR_BACKEND_FAILURE_44
    Error parameters: , There is insufficient space,
    [2010-04-26_10-42-19] Normal snapshot failed:
    [2010-04-26_10-42-19] snapshot_vm failed:
    [2010-04-26_10-42-19] VM 81bfc147-4bdd-15b3-b3ff-d0825e89fbfd backup failed
    [2010-04-26_10-42-19] VM Backup Ended

    Just want to clarify, does this meen there is insufficient space via local repository/local storage on that server?

    My xenserver host only has 5 GB allocated to it but it has snapshotted and exported a 50 GB machine successfully to my NAS. For that Xen Server there is only 100 GB free total and the server I am trying to backup has about 150 GB, this would meen that I either have to Pool my servers together and try this backup or add more space to this server that is equal to the amount of space on that server for this to be successful?

  34. Hi Andy

    I’m new to unix but I have got your script it work fine, when I manually run it. What I would like to do is to schedule it to run using crontab. This is what I’m running

    0 23 * * * root /vm_backup.sh

    I think the problem is that crontab does not know about the environment variable.
    My crontab file in the etc directory now looks like this


    # run-parts
    01 * * * * root run-parts /etc/cron.hourly
    02 4 * * * root run-parts /etc/cron.daily
    22 4 * * 0 root run-parts /etc/cron.weekly
    42 4 1 * * root run-parts /etc/cron.monthly

    Any guidance on this would be most appreciated

  35. Is there a way to exclude directories using vm_backup.cfg or in the actual script? I have a huge partition used for databases that total 80gb and then another for partition for photos that is closing in on 100gb. Its only the dev environment. The photos aren’t so important and I have production backups of all databases which we use to update the dev dbs on a frequent basis. The code and dir structure needs to be backed up. Please let me know if there’s a way. This backup script works but it takes about 14 hours for one VM because of the size and limitations of bandwidth on the network.

  36. Pingback: Francesco Dipietromaria WebLog

  37. As frank I would ask if you can add the coalesce leaf command to claim SR spaces taken by the deleted snapshots.

    I’ve used the script and now My SR is Full.

    thanks a lot.

  38. Will this work with XenServer 5.6 with no issues? I suspect so as the xe commands should be the same ?


    • I have wrote new function for 5.6.0 :

      ## -begin -PART1———- Past after snapshot_vm , line 287 vm_backup.lib ——————-
      ## new way for 5.6.0 by Krzysztof Mendalka, but
      host_uuid=`xe host-list hostname=$HOSTNAME | grep “uuid” | awk ‘{print $NF}’`
      host_ver=`xe host-param-get param-key=product_version param-name=software-version uuid=$host_uuid`
      if [ $host_ver = "5.6.0" ]; then
      if [ $vm_log_enabled ]; then
      log_message “Export for version 5.6.0 ”
      export_snapshot_result=`export_snapshot $snapshot $export_name`
      if [ $? -ne 0 ]; then
      if [ $vm_log_enabled ]; then
      log_message “export_snapshot failed: $export_snapshot_result”
      return 5
      if [ $vm_log_enabled ]; then
      log_message “export_snapshot succeeded: $export_snapshot_result”
      uninstall_snapshot_result=`uninstall_snapshot $snapshot`
      if [ $? -ne 0 ]; then
      if [ $vm_log_enabled ]; then
      log_message “uninstall_snapshot failed: $delete_vm_result”
      return 6
      if [ $vm_log_enabled ]; then
      log_message “uninstall_snapshot succeeded: $delete_vm_result”
      # i know should be “else”
      return 0

      ##-begin-PART2–Put at end—-of vm_backup.lib————————-
      ## Two new function for 5.6.0
      # export_snapshot
      # Export a snapshot to a destination file > XenServer 5.6
      # @use export_snapshot “uuid” “filename.xva”
      # @param string uuid
      # @param string filename
      # @return boolean

      function export_snapshot
      if [ $vm_log_enabled ]; then
      log_message “Export SnapShot $1 as $2″

      echo=`xe snapshot-export-to-template snapshot-uuid=$1 filename=”$backup_dir$2″ 2>>$log_path`

      if [ $? -ne 0 ]; then
      return 1

      echo “$echo”
      return 0

      # uninstall_snapshot
      # Uninstall (remove) a VM XenServer > 5.6.0
      # @use uninstall_snapshot “uuid”
      # @param string uuid
      # @return boolean

      function uninstall_snapshot
      if [ $vm_log_enabled ]; then
      log_message “Uninstall snapshot $1″

      echo=`xe snapshot-uninstall force=true snapshot-uuid=$1 2>>$log_path`

      if [ $? -ne 0 ]; then
      return 1

      echo “$echo”
      return 0

  39. Hi Andy,

    very nice script. It works fine, but sometimes we get this error:

    [2010-06-21_15-36-08] Quiesce snapshot failed:
    [2010-06-21_15-36-08] Attempting normal snapshot
    [2010-06-21_15-36-08] Snapshot e5427941-d14a-0bf8-b9a8-3170485dad83 as DUGW01_snapshot
    [2010-06-21_15-36-18] snapshot_vm succeeded: 0cd1fbfe-0810-b2dc-bf68-ee0e7bd23094
    [2010-06-21_15-36-18] Remove template status 0cd1fbfe-0810-b2dc-bf68-ee0e7bd23094
    [2010-06-21_15-36-18] remove_template succeeded:
    [2010-06-21_15-36-18] Disable HA 0cd1fbfe-0810-b2dc-bf68-ee0e7bd23094
    [2010-06-21_15-36-18] disable_ha succeeded:
    [2010-06-21_15-36-18] Export VM 0cd1fbfe-0810-b2dc-bf68-ee0e7bd23094 as DUGW01-2010-06-21_15-36-08.xva
    The server failed to handle your request, due to an internal error. The given message may give details useful for debugging the problem.
    message: Unix.Unix_error(13, “read”, “”)
    [2010-06-21_15-53-11] export_vm failed:
    [2010-06-21_15-53-11] VM e5427941-d14a-0bf8-b9a8-3170485dad83 backup failed

    After that, the VM (Windows 2003 R2 Server) with this UUID crashes with a BlueScreen. We have to remove the snapshots and after that, we can restart this vm.

    Any idea what it is?

    Greetz from Duisburg, Germany

  40. Hello i am trying to do some snapshots to /backup which is cifs attached storage. But have following problem:

    Error code: VM_SNAPSHOT_FAILED
    Error parameters: Quiesce snapshot not supported
    [2010-06-22_16-11-08] Quiesce snapshot failed:
    [2010-06-22_16-11-09] Attempting normal snapshot
    [2010-06-22_16-11-09] Snapshot 8b5d4665-d519-9ed9-e443-06615a24a9ed as ClearOS_5 .1_-_Vmavdd.com_snapshot
    The SR backend does not support the operation (check the SR’s allowed operations )
    sr: 34e12e12-5b33-1c7b-2c87-a271911ce101 (Local storage)
    [2010-06-22_16-11-10] Normal snapshot failed:
    [2010-06-22_16-11-10] snapshot_vm failed:
    [2010-06-22_16-11-11] VM 8b5d4665-d519-9ed9-e443-06615a24a9ed backup failed
    [2010-06-22_16-11-11] VM Backup Ended

    I have googled a bit but unable to resolve it myself.
    Help me please.

  41. Great script!
    Does anyone know how to mask the password in the vm_backup.sh when backing up to a cifs share?

Leave a Reply to Krzysztof Mendalka Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>