diff --git a/lib/backend.py b/lib/backend.py
index 4e40cb7381ff96b53be86e1ddbe0ed389b0939bb..6122acd5749e66f2ff6a89915b3e919541dcaf1d 100644
--- a/lib/backend.py
+++ b/lib/backend.py
@@ -522,6 +522,17 @@ def VerifyNode(what, cluster_name):
       used_minors = str(err)
     result[constants.NV_DRBDLIST] = used_minors
 
+  if constants.NV_NODESETUP in what:
+    result[constants.NV_NODESETUP] = tmpr = []
+    if not os.path.isdir("/sys/block") or not os.path.isdir("/sys/class/net"):
+      tmpr.append("The sysfs filesytem doesn't seem to be mounted"
+                  " under /sys, missing required directories /sys/block"
+                  " and /sys/class/net")
+    if (not os.path.isdir("/proc/sys") or
+        not os.path.isfile("/proc/sysrq-trigger")):
+      tmpr.append("The procfs filesystem doesn't seem to be mounted"
+                  " under /proc, missing required directory /proc/sys and"
+                  " the file /proc/sysrq-trigger")
   return result
 
 
diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index a0722825d42a9c8e47ef275bfbb68f521f0fb289..3d0d8aaa094f18699787506bd5e8cf7a8617d94c 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -915,6 +915,7 @@ class LUVerifyCluster(LogicalUnit):
   ENODERPC = (TNODE, "ENODERPC")
   ENODESSH = (TNODE, "ENODESSH")
   ENODEVERSION = (TNODE, "ENODEVERSION")
+  ENODESETUP = (TNODE, "ENODESETUP")
 
   ETYPE_FIELD = "code"
   ETYPE_ERROR = "ERROR"
@@ -1108,6 +1109,10 @@ class LUVerifyCluster(LogicalUnit):
           test = minor not in drbd_map
           _ErrorIf(test, self.ENODEDRBD, node,
                    "unallocated drbd minor %d is in use", minor)
+    test = node_result.get(constants.NV_NODESETUP,
+                           ["Missing NODESETUP results"])
+    _ErrorIf(test, self.ENODESETUP, node, "node setup error: %s",
+             "; ".join(test))
 
   def _VerifyInstance(self, instance, instanceconfig, node_vol_is,
                       node_instance, n_offline):
@@ -1277,6 +1282,7 @@ class LUVerifyCluster(LogicalUnit):
       constants.NV_INSTANCELIST: hypervisors,
       constants.NV_VERSION: None,
       constants.NV_HVINFO: self.cfg.GetHypervisorType(),
+      constants.NV_NODESETUP: None,
       }
     if vg_name is not None:
       node_verify_param[constants.NV_VGLIST] = None
diff --git a/lib/constants.py b/lib/constants.py
index 8febfdce96ff6e37bc199c4c18fae92403aaa5c4..e374983e410bed01060c485e40f8d88099bccf99 100644
--- a/lib/constants.py
+++ b/lib/constants.py
@@ -518,6 +518,7 @@ NV_NODENETTEST = "node-net-test"
 NV_VERSION = "version"
 NV_VGLIST = "vglist"
 NV_DRBDLIST = "drbd-list"
+NV_NODESETUP = "nodesetup"
 
 # Allocator framework constants
 IALLOCATOR_VERSION = 2