From f599c94a1304ac6c8384f5078187bad45c4c4c87 Mon Sep 17 00:00:00 2001 From: neingeist Date: Thu, 7 Jul 2016 17:25:35 +0200 Subject: [PATCH] add a script to check libvirt domains for TRIM readiness --- libvirt-check-trim.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 libvirt-check-trim.py diff --git a/libvirt-check-trim.py b/libvirt-check-trim.py new file mode 100644 index 0000000..8c844ea --- /dev/null +++ b/libvirt-check-trim.py @@ -0,0 +1,39 @@ +# Check if all libvirt domains are prepared for TRIM/fstrim + +from __future__ import division, print_function + +from lxml import objectify +import libvirt +import sys + + +conn = libvirt.openReadOnly(None) +if not conn: + print('Failed to open connection to the hypervisor!') + sys.exit(1) + +for domain in conn.listAllDomains(): + print('== {}'.format(domain.name())) + + xml = domain.XMLDesc() + tree = objectify.fromstring(xml) + + # every disk should be scsi + discard=unmap + for disk in tree.devices.disk: + if disk.get('device') != 'disk': + continue + + disk_desc = disk.target.get('dev') + + if disk.target.get('bus') != 'scsi': + print('{} target should be scsi'.format(disk_desc)) + if disk.driver.get('discard') != 'unmap': + print('{} driver should have discard=unmap'.format(disk_desc)) + + # every scsi controller should be model='virtio-scsi' + for controller in tree.devices.controller: + if controller.get('type') != 'scsi': + continue + + if controller.get('model') != 'virtio-scsi': + print('scsi controller should be a virtio model')