diff --git a/src/main/resources/Documentation/rest-api.md b/src/main/resources/Documentation/rest-api.md
index c75730a..abad4b6 100644
--- a/src/main/resources/Documentation/rest-api.md
+++ b/src/main/resources/Documentation/rest-api.md
@@ -21,6 +21,16 @@
 - gerritVersion - JSON String with the version of running Gerrit server
 - cpuInfo - JSON Object with all the CPU information collected by [jHardware](https://github.com/profesorfalken/jHardware)
 - memInfo - JSON Object with all the Memory information collected by [jHardware](https://github.com/profesorfalken/jHardware)
+- diskInfo - JSON Object describing the disk information. Here a possible output:
+```
+{
+    "diskFree": 106969321472,
+    "diskTotal": 235089907712,
+    "diskUsable": 95003811840,
+    "path": "/home/pakkio/g2.14-stable/data"
+}
+
+```
 
 NOTE: API must be authenticated with the credentials of a user with the
 'Collect Server Data' capability.
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/support/SitePathsWrapper.scala b/src/main/scala/com/googlesource/gerrit/plugins/support/SitePathsWrapper.scala
new file mode 100644
index 0000000..a74118a
--- /dev/null
+++ b/src/main/scala/com/googlesource/gerrit/plugins/support/SitePathsWrapper.scala
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.googlesource.gerrit.plugins.support
+
+import java.io.File
+import java.nio.file.Path
+
+import com.google.gerrit.server.config.SitePaths
+import com.google.inject.{Inject, Injector, Key, Provider}
+
+class SitePathsWrapper @Inject()(val injector: Injector)  {
+  def getAsPath(folder: String): Path = {
+    val sitePaths = injector.getInstance(Key.get(classOf[SitePaths]))
+    val field = sitePaths.getClass.getDeclaredField(folder)
+    val value = field.get(sitePaths)
+    if (value.isInstanceOf[File]) {
+      value.asInstanceOf[File].toPath
+    } else {
+      value.asInstanceOf[Path]
+    }
+  }
+}
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/support/commands/DiskInfoCommand.scala b/src/main/scala/com/googlesource/gerrit/plugins/support/commands/DiskInfoCommand.scala
new file mode 100644
index 0000000..78f3b68
--- /dev/null
+++ b/src/main/scala/com/googlesource/gerrit/plugins/support/commands/DiskInfoCommand.scala
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.googlesource.gerrit.plugins.support.commands
+
+import java.nio.file.Files
+
+import com.google.inject.Inject
+import com.googlesource.gerrit.plugins.support.{SitePathsWrapper, GerritSupportCommand}
+
+class DiskInfoCommand @Inject()(val sitePathsFolder: SitePathsWrapper) extends GerritSupportCommand {
+
+  case class DiskInfo(path: String, diskFree: Long, diskUsable: Long, diskTotal: Long)
+
+  def getResult = {
+    val dataPath = sitePathsFolder.getAsPath("data_dir")
+    val store = Files.getFileStore(dataPath)
+    DiskInfo(dataPath.toString, store.getUnallocatedSpace,
+      store.getUsableSpace, store.getTotalSpace
+    )
+  }
+}
\ No newline at end of file
diff --git a/src/test/scala/com/googlesource/gerrit/plugins/support/GerritSupportTest.scala b/src/test/scala/com/googlesource/gerrit/plugins/support/GerritSupportTest.scala
index dddabcf..9331c7b 100644
--- a/src/test/scala/com/googlesource/gerrit/plugins/support/GerritSupportTest.scala
+++ b/src/test/scala/com/googlesource/gerrit/plugins/support/GerritSupportTest.scala
@@ -17,11 +17,14 @@
 package com.googlesource.gerrit.plugins.support
 
 import java.io.File
+import java.nio.file.Paths
 import java.util.zip.ZipFile
 
 import com.google.gson.{Gson, JsonPrimitive}
 import com.googlesource.gerrit.plugins.support.FileMatchers._
 import com.googlesource.gerrit.plugins.support.commands._
+import org.mockito.Matchers.any
+import org.mockito.Mockito
 import org.scalatest.{FlatSpec, Matchers}
 
 import scala.collection.JavaConverters._
@@ -55,6 +58,16 @@
     memInfo.getAsJsonObject should haveValidFields
   }
 
+  "disk-info command" should "return a json object with some fields" in {
+    val wrapper = Mockito.mock(classOf[SitePathsWrapper])
+    Mockito.when(wrapper.getAsPath(any[String])).thenReturn(Paths.get("/tmp"))
+
+    val diskInfo = new DiskInfoCommand(wrapper).execute.content
+
+    diskInfo should not be null
+    diskInfo.getAsJsonObject should haveValidFields
+  }
+
   "Bundle builder" should "create an output zip file" in {
     val zipFile = new SupportBundleBuilder(tmpPath.toPath, new Gson).build(Seq())
 
