diff --git a/daemons/ensure-dirs.in b/daemons/ensure-dirs.in
index 272d40755fb4191b1bb64aee3bb3744d42e7a680..ff6d744e03758d044d389da179550e58029e72a2 100644
--- a/daemons/ensure-dirs.in
+++ b/daemons/ensure-dirs.in
@@ -98,14 +98,17 @@ _ensure_datadir() {
   _ensure_file ${DATADIR}/queue/lock 0600 "$(_fileset_owner masterd)"
 
   if ! [[ -z "${full_run}" ]]; then
-    for file in $(_gather_files ${DATADIR}/queue 0600 @GNTMASTERUSER@ \
-                  @GNTMASTERDGROUP@); do
-      _ensure_file "${file}" 0600 "$(_fileset_owner masterd)"
+    local queue_owner="$(_fileset_owner masterd)"
+    local ssconf_owner="$(_fileset_owner noded)"
+
+    _gather_files ${DATADIR}/queue 0600 @GNTMASTERUSER@ @GNTMASTERDGROUP@ | \
+    while read path; do
+      _ensure_file "$path" 0600 "$queue_owner"
     done
 
-    for file in $(_gather_files ${DATADIR} 0600 root \
-                  @GNTMASTERDGROUP@ -name 'ssconf_*'); do
-      _ensure_file "${file}" 0444 "$(_fileset_owner noded)"
+    _gather_files ${DATADIR} 0600 root @GNTMASTERDGROUP@ -name 'ssconf_*' | \
+    while read path; do
+      _ensure_file "$path" 0444 "$ssconf_owner"
     done
   fi
 }
diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index b8b53d7c681bd99d8303f2bdfded391c671fbc19..37bdda47c8b26fa2b0d2336725ee4fe12d9c6321 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -40,6 +40,7 @@ import socket
 import tempfile
 import shutil
 import operator
+import itertools
 
 from ganeti import ssh
 from ganeti import utils
@@ -2029,12 +2030,16 @@ class LUVerifyCluster(LogicalUnit):
 
     node_disks = {}
     node_disks_devonly = {}
+    diskless_instances = set()
+    diskless = constants.DT_DISKLESS
 
     for nname in nodelist:
+      node_instances = list(itertools.chain(node_image[nname].pinst,
+                                            node_image[nname].sinst))
+      diskless_instances.update(inst for inst in node_instances
+                                if instanceinfo[inst].disk_template == diskless)
       disks = [(inst, disk)
-               for instlist in [node_image[nname].pinst,
-                                node_image[nname].sinst]
-               for inst in instlist
+               for inst in node_instances
                for disk in instanceinfo[inst].disks]
 
       if not disks:
@@ -2081,6 +2086,11 @@ class LUVerifyCluster(LogicalUnit):
       for ((inst, _), status) in zip(disks, data):
         instdisk.setdefault(inst, {}).setdefault(nname, []).append(status)
 
+    # Add empty entries for diskless instances.
+    for inst in diskless_instances:
+      assert inst not in instdisk
+      instdisk[inst] = {}
+
     assert compat.all(len(statuses) == len(instanceinfo[inst].disks) and
                       len(nnames) <= len(instanceinfo[inst].all_nodes)
                       for inst, nnames in instdisk.items()
diff --git a/qa/ganeti-qa.py b/qa/ganeti-qa.py
index 1089567fbdb528b373426b9c2308a7a79505032b..019bcd6fdce1adbe52362b602b20fa10fbe2ddbd 100755
--- a/qa/ganeti-qa.py
+++ b/qa/ganeti-qa.py
@@ -226,6 +226,8 @@ def RunCommonInstanceTests(instance):
 
   RunTestIf("tags", qa_tags.TestInstanceTags, instance)
 
+  RunTestIf("cluster-verify", qa_cluster.TestClusterVerify)
+
   RunTestIf("rapi", qa_rapi.TestInstance, instance)
 
   # Lists instances, too
@@ -430,7 +432,6 @@ def main():
         snode = qa_config.AcquireNode(exclude=pnode)
         try:
           instance = RunTest(func, pnode, snode)
-          RunTestIf("cluster-verify", qa_cluster.TestClusterVerify)
           RunCommonInstanceTests(instance)
           RunGroupListTests()
           if qa_config.TestEnabled('instance-convert-disk'):