diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckConfig.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckConfig.java
index d866586..6f98b21 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckConfig.java
@@ -17,11 +17,13 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.BLOCKEDTHREADS;
 import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.CHANGES_INDEX;
+import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.GITSPACE;
 import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.QUERYCHANGES;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.server.config.AllProjectsName;
@@ -46,10 +48,10 @@
   private static final String QUERY_DEFAULT = "status:open";
   private static final int LIMIT_DEFAULT = 10;
   private static final int ACTIVE_WORKERS_THRESHOLD_DEFAULT = 80;
+  private static final int GIT_SPACE_MIN_DISK_FREE_PCT_DEFAULT = 10;
   private static final String USERNAME_DEFAULT = "healthcheck";
   private static final String PASSWORD_DEFAULT = "";
   private static final String FAIL_FILE_FLAG_DEFAULT = "data/healthcheck/fail";
-  private static final boolean HEALTH_CHECK_ENABLED_DEFAULT = true;
   private final AllProjectsName allProjectsName;
   private final AllUsersName allUsersName;
 
@@ -59,6 +61,9 @@
   private static final Set<String> HEALTH_CHECK_DISABLED_FOR_REPLICAS =
       ImmutableSet.of(CHANGES_INDEX, QUERYCHANGES);
 
+  private static final ImmutableList<String> HEALTH_CHECKS_DISABLED_BY_DEFAULT =
+      ImmutableList.of(GITSPACE);
+
   @Inject
   public HealthCheckConfig(
       PluginConfigFactory configFactory,
@@ -128,6 +133,11 @@
     return repos;
   }
 
+  public int getMinFreeDiskPercent(String healthCheckName) {
+    return config.getInt(
+        HEALTHCHECK, healthCheckName, "minFreeDiskPercent", GIT_SPACE_MIN_DISK_FREE_PCT_DEFAULT);
+  }
+
   public String getUsername(String healthCheckName) {
     return getStringWithFallback("username", healthCheckName, USERNAME_DEFAULT);
   }
@@ -144,8 +154,13 @@
     if (isReplica && HEALTH_CHECK_DISABLED_FOR_REPLICAS.contains(healthCheckName)) {
       return false;
     }
-    return config.getBoolean(
-        HEALTHCHECK, checkNotNull(healthCheckName), "enabled", HEALTH_CHECK_ENABLED_DEFAULT);
+
+    String notNullHealthcheckName = checkNotNull(healthCheckName);
+    boolean defaultValue =
+        HEALTH_CHECKS_DISABLED_BY_DEFAULT.stream()
+            .noneMatch(hc -> hc.equals(notNullHealthcheckName));
+
+    return config.getBoolean(HEALTHCHECK, notNullHealthcheckName, "enabled", defaultValue);
   }
 
   public String[] getListOfBlockedThreadsThresholds() {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckSubsystemsModule.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckSubsystemsModule.java
index 5d106af..9178537 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckSubsystemsModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckSubsystemsModule.java
@@ -22,6 +22,7 @@
 import com.googlesource.gerrit.plugins.healthcheck.check.BlockedThreadsCheck;
 import com.googlesource.gerrit.plugins.healthcheck.check.ChangesIndexHealthCheck;
 import com.googlesource.gerrit.plugins.healthcheck.check.DeadlockCheck;
+import com.googlesource.gerrit.plugins.healthcheck.check.GitSpaceCheck;
 import com.googlesource.gerrit.plugins.healthcheck.check.HealthCheck;
 import com.googlesource.gerrit.plugins.healthcheck.check.HttpActiveWorkersCheck;
 import com.googlesource.gerrit.plugins.healthcheck.check.JGitHealthCheck;
@@ -41,6 +42,7 @@
     bindChecker(DeadlockCheck.class);
     bindChecker(BlockedThreadsCheck.class);
     bindChecker(ChangesIndexHealthCheck.class);
+    bindChecker(GitSpaceCheck.class);
 
     DynamicSet.bind(binder(), OnlineUpgradeListener.class).to(ChangesIndexHealthCheck.class);
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/api/HealthCheckStatusEndpoint.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/api/HealthCheckStatusEndpoint.java
index 6819ae1..58ab01b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/api/HealthCheckStatusEndpoint.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/api/HealthCheckStatusEndpoint.java
@@ -24,7 +24,6 @@
 import com.googlesource.gerrit.plugins.healthcheck.check.HealthCheck.Result;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.IOException;
 import java.io.InputStream;
 import java.util.Map;
 import javax.servlet.http.HttpServletResponse;
@@ -51,19 +50,19 @@
     }
     HealthCheck.StatusSummary globalHealthCheckStatus = healthChecks.run();
 
-    Map<String, Object> result = globalHealthCheckStatus.subChecks;
-    result.put("ts", globalHealthCheckStatus.ts);
-    result.put("elapsed", globalHealthCheckStatus.elapsed);
+    Map<String, Object> result = globalHealthCheckStatus.subChecks();
+    result.put("ts", globalHealthCheckStatus.ts());
+    result.put("elapsed", globalHealthCheckStatus.elapsed());
     return Response.withStatusCode(getHTTPResultCode(globalHealthCheckStatus), result);
   }
 
   private int getHTTPResultCode(HealthCheck.StatusSummary checkStatus) {
-    return checkStatus.result == Result.FAILED
+    return checkStatus.result() == Result.FAILED
         ? HttpServletResponse.SC_INTERNAL_SERVER_ERROR
         : HttpServletResponse.SC_OK;
   }
 
-  private boolean failFlagFileExists() throws IOException {
+  private boolean failFlagFileExists() {
     File file = new File(failedFileFlagPath);
     try (InputStream targetStream = new FileInputStream(file)) {
       return true;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/GitSpaceCheck.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/GitSpaceCheck.java
new file mode 100644
index 0000000..d8d4b59
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/GitSpaceCheck.java
@@ -0,0 +1,68 @@
+// Copyright (C) 2025 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.healthcheck.check;
+
+import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.GITSPACE;
+
+import com.google.common.flogger.FluentLogger;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.gerrit.metrics.MetricMaker;
+import com.google.gerrit.server.config.GerritServerConfig;
+import com.google.gerrit.server.config.SitePaths;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.healthcheck.HealthCheckConfig;
+import java.io.File;
+import java.nio.file.Path;
+import org.eclipse.jgit.lib.Config;
+
+@Singleton
+public class GitSpaceCheck extends AbstractHealthCheck {
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
+  private final Path gitPath;
+
+  @Inject
+  public GitSpaceCheck(
+      @GerritServerConfig Config gerritConfig,
+      SitePaths site,
+      ListeningExecutorService executor,
+      HealthCheckConfig config,
+      MetricMaker metricMaker) {
+    super(executor, config, GITSPACE, metricMaker);
+
+    this.gitPath = site.resolve(gerritConfig.getString("gerrit", null, "basePath"));
+  }
+
+  protected File getGitDirectory() {
+    return gitPath.toFile();
+  }
+
+  @Override
+  protected Result doCheck() throws Exception {
+    int minFreeDiskPercent = config.getMinFreeDiskPercent(GITSPACE);
+    long total = getGitDirectory().getTotalSpace();
+
+    if (total <= 0) {
+      logger.atWarning().log(
+          "Cannot determine total disk space for Git directory: %s", getGitDirectory());
+      return Result.FAILED;
+    }
+
+    long usable = getGitDirectory().getUsableSpace();
+    int freePercent = (int) ((usable * 100.0) / total);
+
+    return freePercent < minFreeDiskPercent ? Result.FAILED : Result.PASSED;
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/GlobalHealthCheck.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/GlobalHealthCheck.java
index 4e4cef7..8112896 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/GlobalHealthCheck.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/GlobalHealthCheck.java
@@ -93,7 +93,7 @@
 
   @Override
   protected Result doCheck() {
-    return run().result;
+    return run().result();
   }
 
   public static boolean hasAnyFailureOnResults(Map<String, MemoizedStatusSummary> results) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheck.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheck.java
index db07320..4a26f02 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheck.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheck.java
@@ -36,24 +36,13 @@
     DISABLED;
   }
 
-  public class StatusSummary {
+  public record StatusSummary(Result result, long ts, long elapsed, Map<String, Object> subChecks) {
     public static final StatusSummary INITIAL_STATUS =
         new StatusSummary(Result.PASSED, System.currentTimeMillis(), 0L, Collections.emptyMap());
-    public final Result result;
-    public final long ts;
-    public final long elapsed;
-    public final transient Map<String, Object> subChecks;
 
     public static final Set<Result> failingResults =
         new HashSet<>(Arrays.asList(Result.FAILED, Result.TIMEOUT));
 
-    public StatusSummary(Result result, long ts, long elapsed, Map<String, Object> subChecks) {
-      this.result = result;
-      this.ts = ts;
-      this.elapsed = elapsed;
-      this.subChecks = subChecks;
-    }
-
     public Boolean isFailure() {
       return failingResults.contains(this.result);
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheckNames.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheckNames.java
index d8f1621..26ce70e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheckNames.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheckNames.java
@@ -16,6 +16,7 @@
 
 public interface HealthCheckNames {
   String JGIT = "jgit";
+  String GITSPACE = "gitspace";
   String PROJECTSLIST = "projectslist";
   String QUERYCHANGES = "querychanges";
   String AUTH = "auth";
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 1883724..bf07650 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -49,17 +49,19 @@
 
 The following check names are available:
 
-- `querychanges`: check the ability to query changes
-- `jgit` : check connectivity to the filesystem and ability to open a JGit ref and object
-- `projectslist` : check the ability to list projects with their descriptions
-- `auth`: check the ability to authenticate with username and password
-- `activeworkers`: check the number of active worker threads and the ability to create a new one
-- `httpactiveworkers`: check the number of active HTTP worker threads and the ability
+- `querychanges`: check the ability to query changes. `Enabled` by default.
+- `jgit` : check connectivity to the filesystem and ability to open a JGit ref and object. `Enabled` by default.
+- `gitspace`: Checks that sufficient disk space is available on the volume where Git repositories are stored. `Disabled`
+   by default.
+- `projectslist` : check the ability to list projects with their descriptions. `Enabled` by default.
+- `auth`: check the ability to authenticate with username and password. `Enabled` by default.
+- `activeworkers`: check the number of active worker threads and the ability to create a new one. `Enabled` by default.
+- `httpactiveworkers`: check the number of active HTTP worker threads and the ability. `Enabled` by default.
    to create a new one
-- `deadlock` : check if Java deadlocks are reported by the JVM
-- `blockedthreads` : check the number of blocked threads
+- `deadlock` : check if Java deadlocks are reported by the JVM. `Enabled` by default.
+- `blockedthreads` : check the number of blocked threads. `Enabled` by default.
 - `changesindex` : check if the lucene based changes indexes (open and closed) are operable
-   (examines index lock files)
+   (examines index lock files). `Enabled` by default.
 
 Each check name can be disabled by setting the `enabled` parameter to **false**,
 by default this parameter is set to **true**
@@ -87,6 +89,11 @@
 
   Default: All-Projects, All-Users
 
+- `healthcheck.gitspace.minFreeDiskPercent` : Minimum acceptable percentage of free disk space
+   before the check fails.
+
+   Default: 10
+
  - `healthcheck.auth.username` : Username to use for authentication
 
    Default: healthcheck
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ActiveWorkersCheckTest.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ActiveWorkersCheckTest.java
index 5c57004..4ca7d82 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ActiveWorkersCheckTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ActiveWorkersCheckTest.java
@@ -42,7 +42,7 @@
     Injector injector = testInjector(new TestModule(new Config(), metricRegistry));
 
     ActiveWorkersCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.PASSED);
+    assertThat(check.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -55,7 +55,7 @@
     Injector injector = testInjector(new TestModule(gerritConfig, metricRegistry));
 
     ActiveWorkersCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.PASSED);
+    assertThat(check.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -69,7 +69,7 @@
     Injector injector = testInjector(new TestModule(gerritConfig, metricRegistry));
 
     ActiveWorkersCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.FAILED);
+    assertThat(check.run().result()).isEqualTo(Result.FAILED);
   }
 
   @Test
@@ -85,7 +85,7 @@
     HealthCheckConfig healthCheckConfig =
         new HealthCheckConfig("[healthcheck \"" + ACTIVEWORKERS + "\"]\n" + "  threshold = 50");
     ActiveWorkersCheck check = createCheck(injector, healthCheckConfig);
-    assertThat(check.run().result).isEqualTo(Result.FAILED);
+    assertThat(check.run().result()).isEqualTo(Result.FAILED);
   }
 
   @Test
@@ -101,7 +101,7 @@
     HealthCheckConfig healthCheckConfig =
         new HealthCheckConfig("[healthcheck \"" + ACTIVEWORKERS + "\"]\n" + "  threshold = 50");
     ActiveWorkersCheck check = createCheck(injector, healthCheckConfig);
-    assertThat(check.run().result).isEqualTo(Result.PASSED);
+    assertThat(check.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -122,7 +122,7 @@
     Injector injector = testInjector(new TestModule(gerritConfig, metricRegistry));
 
     ActiveWorkersCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.FAILED);
+    assertThat(check.run().result()).isEqualTo(Result.FAILED);
   }
 
   private Injector testInjector(AbstractModule testModule) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/BlockedThreadsCheckTest.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/BlockedThreadsCheckTest.java
index 737b4a7..f1f6fbb 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/BlockedThreadsCheckTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/BlockedThreadsCheckTest.java
@@ -63,7 +63,7 @@
   public void shouldPassCheckWhenNoThreadsAreReturned() {
     BlockedThreadsCheck objectUnderTest = createCheck();
     when(beanMock.getThreadInfo(null, 0)).thenReturn(new ThreadInfo[0]);
-    assertThat(objectUnderTest.run().result).isEqualTo(Result.PASSED);
+    assertThat(objectUnderTest.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -111,8 +111,8 @@
             failingThreadInfo.toArray(new ThreadInfo[0]),
             successThreadInfo.toArray(new ThreadInfo[0]));
 
-    assertThat(createCheck().run().result).isEqualTo(Result.FAILED);
-    assertThat(createCheck().run().result).isEqualTo(Result.PASSED);
+    assertThat(createCheck().run().result()).isEqualTo(Result.FAILED);
+    assertThat(createCheck().run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -191,7 +191,7 @@
 
   private void checkResult(Result expected) {
     BlockedThreadsCheck objectUnderTest = createCheck();
-    assertThat(objectUnderTest.run().result).isEqualTo(expected);
+    assertThat(objectUnderTest.run().result()).isEqualTo(expected);
   }
 
   private void mockThreads(int running, int blocked, String prefix) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ChangesIndexHealthCheckIT.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ChangesIndexHealthCheckIT.java
index 33d3277..2a18dd3 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ChangesIndexHealthCheckIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ChangesIndexHealthCheckIT.java
@@ -22,8 +22,6 @@
 import com.google.gerrit.acceptance.TestPlugin;
 import com.google.gerrit.acceptance.UseLocalDisk;
 import com.google.gerrit.acceptance.config.GerritConfig;
-import com.google.gerrit.server.config.SitePaths;
-import com.google.inject.Inject;
 import java.io.IOException;
 import java.nio.file.DirectoryStream;
 import java.nio.file.Files;
@@ -39,7 +37,6 @@
     httpModule = "com.googlesource.gerrit.plugins.healthcheck.HttpModule")
 @Sandboxed
 public class ChangesIndexHealthCheckIT extends AbstractHealthCheckIntegrationTest {
-  @Inject SitePaths sitePaths;
 
   @Test
   @UseLocalDisk
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/DeadlockCheckTest.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/DeadlockCheckTest.java
index a73ca15..23c87e9 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/DeadlockCheckTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/DeadlockCheckTest.java
@@ -39,7 +39,7 @@
     Injector injector = testInjector(new TestModule(new MetricRegistry()));
 
     DeadlockCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.PASSED);
+    assertThat(check.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -47,7 +47,7 @@
     Injector injector = testInjector(new TestModule(createMetricRegistry(0)));
 
     DeadlockCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.PASSED);
+    assertThat(check.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -56,7 +56,7 @@
     Injector injector = testInjector(new TestModule(createMetricRegistry(1)));
 
     DeadlockCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.FAILED);
+    assertThat(check.run().result()).isEqualTo(Result.FAILED);
   }
 
   @Test
@@ -65,7 +65,7 @@
     Injector injector = testInjector(new TestModule(createMetricRegistry(5)));
 
     DeadlockCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.FAILED);
+    assertThat(check.run().result()).isEqualTo(Result.FAILED);
   }
 
   private Injector testInjector(AbstractModule testModule) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/GitSpaceCheckTest.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/GitSpaceCheckTest.java
new file mode 100644
index 0000000..ff21a6a
--- /dev/null
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/GitSpaceCheckTest.java
@@ -0,0 +1,121 @@
+// Copyright (C) 2025 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.healthcheck;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.*;
+
+import com.google.common.util.concurrent.MoreExecutors;
+import com.google.gerrit.metrics.DisabledMetricMaker;
+import com.google.gerrit.server.config.SitePaths;
+import com.googlesource.gerrit.plugins.healthcheck.check.AbstractHealthCheck;
+import com.googlesource.gerrit.plugins.healthcheck.check.GitSpaceCheck;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import org.eclipse.jgit.lib.Config;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class GitSpaceCheckTest {
+  private File mockFile;
+  private Path tempSitePath;
+
+  private static Path createTempSitePath() throws IOException {
+    Path tmp = Files.createTempFile("gerrit_", "_site");
+    Files.deleteIfExists(tmp);
+    return tmp;
+  }
+
+  @Before
+  public void setUp() throws IOException {
+    mockFile = mock(File.class);
+    tempSitePath = createTempSitePath();
+  }
+
+  @After
+  public void tearDown() throws IOException {
+    if (tempSitePath != null && Files.exists(tempSitePath)) {
+      Files.delete(tempSitePath);
+    }
+  }
+
+  private GitSpaceCheck createGitSpaceCheck(String configContent) throws IOException {
+    HealthCheckConfig config = new HealthCheckConfig(configContent);
+    SitePaths sitePaths = new SitePaths(tempSitePath);
+    return new GitSpaceCheck(
+        new Config(),
+        sitePaths,
+        MoreExecutors.newDirectExecutorService(),
+        config,
+        new DisabledMetricMaker()) {
+      @Override
+      protected File getGitDirectory() {
+        return mockFile;
+      }
+    };
+  }
+
+  private GitSpaceCheck createGitSpaceCheck() throws IOException {
+    Config config = new Config();
+    config.setBoolean("healthcheck", "gitspace", "enabled", true);
+    return createGitSpaceCheck(config.toText());
+  }
+
+  @Test
+  public void shouldPassWhenUsableDiskAboveThreshold() throws Exception {
+    GitSpaceCheck gitSpaceCheck = createGitSpaceCheck();
+    when(mockFile.getTotalSpace()).thenReturn(100L);
+    when(mockFile.getUsableSpace()).thenReturn(20L);
+
+    assertThat(gitSpaceCheck.run().result()).isEqualTo(AbstractHealthCheck.Result.PASSED);
+  }
+
+  @Test
+  public void shouldFailWhenUsableDiskBelowThreshold() throws Exception {
+    GitSpaceCheck gitSpaceCheck = createGitSpaceCheck();
+    when(mockFile.getTotalSpace()).thenReturn(100L);
+    when(mockFile.getUsableSpace()).thenReturn(5L);
+
+    assertThat(gitSpaceCheck.run().result()).isEqualTo(AbstractHealthCheck.Result.FAILED);
+  }
+
+  @Test
+  public void shouldComplyWithNonDefaultThreshold() throws Exception {
+    Config config = new Config();
+    config.setBoolean("healthcheck", "gitspace", "enabled", true);
+    config.setInt("healthcheck", "gitspace", "minFreeDiskPercent", 50);
+    config.toText();
+
+    GitSpaceCheck gitSpaceCheck = createGitSpaceCheck(config.toText());
+
+    when(mockFile.getTotalSpace()).thenReturn(100L);
+    when(mockFile.getUsableSpace()).thenReturn(5L);
+    assertThat(gitSpaceCheck.run().result()).isEqualTo(AbstractHealthCheck.Result.FAILED);
+
+    when(mockFile.getUsableSpace()).thenReturn(60L);
+    assertThat(gitSpaceCheck.run().result()).isEqualTo(AbstractHealthCheck.Result.PASSED);
+  }
+
+  @Test
+  public void shouldFailWhenTotalSpaceIsZero() throws Exception {
+    GitSpaceCheck gitSpaceCheck = createGitSpaceCheck();
+    when(mockFile.getTotalSpace()).thenReturn(0L);
+
+    assertThat(gitSpaceCheck.run().result()).isEqualTo(AbstractHealthCheck.Result.FAILED);
+  }
+}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckConfigTest.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckConfigTest.java
index 264db94..48b3e85 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckConfigTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckConfigTest.java
@@ -16,6 +16,16 @@
 
 import static com.google.common.truth.Truth.assertThat;
 import static com.googlesource.gerrit.plugins.healthcheck.HealthCheckConfig.DEFAULT_CONFIG;
+import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.ACTIVEWORKERS;
+import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.AUTH;
+import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.BLOCKEDTHREADS;
+import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.CHANGES_INDEX;
+import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.DEADLOCK;
+import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.GITSPACE;
+import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.HTTPACTIVEWORKERS;
+import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.JGIT;
+import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.PROJECTSLIST;
+import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.QUERYCHANGES;
 
 import org.junit.Test;
 
@@ -85,4 +95,34 @@
     assertThat(config.healthCheckEnabled("barCheck")).isEqualTo(true);
     assertThat(config.healthCheckEnabled("bazCheck")).isEqualTo(true);
   }
+
+  @Test
+  public void shouldHonourDefaultEnabledValue() {
+    HealthCheckConfig config = new HealthCheckConfig("[healthcheck \"fooCheck\"]");
+
+    assertThat(config.healthCheckEnabled(GITSPACE)).isEqualTo(false);
+
+    assertThat(config.healthCheckEnabled(JGIT)).isEqualTo(true);
+    assertThat(config.healthCheckEnabled(PROJECTSLIST)).isEqualTo(true);
+    assertThat(config.healthCheckEnabled(QUERYCHANGES)).isEqualTo(true);
+    assertThat(config.healthCheckEnabled(AUTH)).isEqualTo(true);
+    assertThat(config.healthCheckEnabled(ACTIVEWORKERS)).isEqualTo(true);
+    assertThat(config.healthCheckEnabled(HTTPACTIVEWORKERS)).isEqualTo(true);
+    assertThat(config.healthCheckEnabled(DEADLOCK)).isEqualTo(true);
+    assertThat(config.healthCheckEnabled(BLOCKEDTHREADS)).isEqualTo(true);
+    assertThat(config.healthCheckEnabled(CHANGES_INDEX)).isEqualTo(true);
+  }
+
+  @Test
+  public void shouldOverrideDisabledByDefault() {
+    HealthCheckConfig config =
+        new HealthCheckConfig(
+            """
+             [healthcheck "%s"]
+                enabled=true
+            """
+                .formatted(GITSPACE));
+
+    assertThat(config.healthCheckEnabled(GITSPACE)).isEqualTo(true);
+  }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HttpActiveWorkersCheckTest.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HttpActiveWorkersCheckTest.java
index 0bda74e..60c233a 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HttpActiveWorkersCheckTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HttpActiveWorkersCheckTest.java
@@ -52,7 +52,7 @@
         new HealthCheckConfig(
             "[healthcheck \"" + HTTPACTIVEWORKERS + "\"]\n" + "  threshold = " + thresholdPerc);
     HttpActiveWorkersCheck check = createCheck(injector, healthCheckConfig);
-    assertThat(check.run().result).isEqualTo(Result.PASSED);
+    assertThat(check.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -72,7 +72,7 @@
         new HealthCheckConfig(
             "[healthcheck \"" + HTTPACTIVEWORKERS + "\"]\n" + "  threshold = " + thresholdPerc);
     HttpActiveWorkersCheck check = createCheck(injector, healthCheckConfig);
-    assertThat(check.run().result).isEqualTo(Result.FAILED);
+    assertThat(check.run().result()).isEqualTo(Result.FAILED);
   }
 
   @Test
@@ -90,7 +90,7 @@
     Injector injector = testInjector(new TestModule(new Config(), metricRegistry));
 
     HttpActiveWorkersCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.PASSED);
+    assertThat(check.run().result()).isEqualTo(Result.PASSED);
   }
 
   private MetricRegistry createHttpMetricRegistry(Integer value) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/JGitHealthCheckTest.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/JGitHealthCheckTest.java
index 02b914c..ecc471f 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/JGitHealthCheckTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/JGitHealthCheckTest.java
@@ -75,7 +75,7 @@
     JGitHealthCheck check =
         new JGitHealthCheck(
             executor, DEFAULT_CONFIG, getWorkingRepositoryManager(), disabledMetricMaker);
-    assertThat(check.run().result).isEqualTo(Result.PASSED);
+    assertThat(check.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -83,7 +83,7 @@
     JGitHealthCheck jGitHealthCheck =
         new JGitHealthCheck(
             executor, DEFAULT_CONFIG, getFailingGitRepositoryManager(), disabledMetricMaker);
-    assertThat(jGitHealthCheck.run().result).isEqualTo(Result.FAILED);
+    assertThat(jGitHealthCheck.run().result()).isEqualTo(Result.FAILED);
   }
 
   @Test
@@ -97,7 +97,7 @@
                 + "  project = Not-Existing-Repo");
     JGitHealthCheck jGitHealthCheck =
         new JGitHealthCheck(executor, config, getWorkingRepositoryManager(), disabledMetricMaker);
-    assertThat(jGitHealthCheck.run().result).isEqualTo(Result.FAILED);
+    assertThat(jGitHealthCheck.run().result()).isEqualTo(Result.FAILED);
   }
 
   private GitRepositoryManager getFailingGitRepositoryManager() {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ProjectsListHealthCheckTest.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ProjectsListHealthCheckTest.java
index c47d685..9c83dd6 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ProjectsListHealthCheckTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ProjectsListHealthCheckTest.java
@@ -60,7 +60,7 @@
     ProjectsListHealthCheck jGitHealthCheck =
         new ProjectsListHealthCheck(
             executor, DEFAULT_CONFIG, getWorkingProjectList(0), mockOneOffCtx, disabledMetricMaker);
-    assertThat(jGitHealthCheck.run().result).isEqualTo(Result.PASSED);
+    assertThat(jGitHealthCheck.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -68,7 +68,7 @@
     ProjectsListHealthCheck jGitHealthCheck =
         new ProjectsListHealthCheck(
             executor, DEFAULT_CONFIG, getFailingProjectList(), mockOneOffCtx, disabledMetricMaker);
-    assertThat(jGitHealthCheck.run().result).isEqualTo(Result.FAILED);
+    assertThat(jGitHealthCheck.run().result()).isEqualTo(Result.FAILED);
   }
 
   @Test
@@ -80,7 +80,7 @@
             getWorkingProjectList(DEFAULT_CONFIG.getTimeout() * 2),
             mockOneOffCtx,
             disabledMetricMaker);
-    assertThat(jGitHealthCheck.run().result).isEqualTo(Result.TIMEOUT);
+    assertThat(jGitHealthCheck.run().result()).isEqualTo(Result.TIMEOUT);
   }
 
   private Provider<ListProjects> getFailingProjectList() {
