apache/cassandra · warning

Only {} free in the system data volume. Consider adding more

Error message

Only {} free in the system data volume. Consider adding more capacity or removing obsolete snapshots

What it means

A warning logged during configuration application (applySimpleConfig in DatabaseDescriptor) when the volume backing local_system_data_file_directory has less than 1 GiB of unallocated space. It is not an exception; Cassandra continues startup, but the system data volume (schema tables, local system keyspace data) may fill up and cause failures. Cassandra surfaces it early because running out of space on system data directories can prevent the node from operating.

Source

Thrown at src/java/org/apache/cassandra/config/DatabaseDescriptor.java:917

        if (dataFreeBytes < 64 * ONE_GIB) // 64 GB
            logger.warn("Only {} free across all data volumes. Consider adding more capacity to your cluster or removing obsolete snapshots",
                        FBUtilities.prettyPrintMemory(dataFreeBytes));

        if (conf.local_system_data_file_directory != null)
        {
            if (conf.local_system_data_file_directory.equals(conf.commitlog_directory))
                throw new ConfigurationException("local_system_data_file_directory must not be the same as the commitlog_directory", false);
            if (conf.local_system_data_file_directory.equals(conf.accord.journal_directory))
                throw new ConfigurationException("local_system_data_file_directory must not be the same as the accord.journal_directory", false);
            if (conf.local_system_data_file_directory.equals(conf.saved_caches_directory))
                throw new ConfigurationException("local_system_data_file_directory must not be the same as the saved_caches_directory", false);
            if (conf.local_system_data_file_directory.equals(conf.hints_directory))
                throw new ConfigurationException("local_system_data_file_directory must not be the same as the hints_directory", false);

            long freeBytes = tryGetSpace(conf.local_system_data_file_directory, FileStore::getUnallocatedSpace);

            if (freeBytes < ONE_GIB)
                logger.warn("Only {} free in the system data volume. Consider adding more capacity or removing obsolete snapshots",
                            FBUtilities.prettyPrintMemory(freeBytes));
        }

        if (conf.commitlog_directory.equals(conf.accord.journal_directory))
            throw new ConfigurationException("accord.journal_directory must not be the same as the commitlog_directory", false);
        if (conf.commitlog_directory.equals(conf.hints_directory))
            throw new ConfigurationException("hints_directory must not be the same as the commitlog_directory", false);
        if (conf.commitlog_directory.equals(conf.saved_caches_directory))
            throw new ConfigurationException("saved_caches_directory must not be the same as the commitlog_directory", false);

        if (conf.accord.journal_directory.equals(conf.hints_directory))
            throw new ConfigurationException("hints_directory must not be the same as the accord.journal_directory", false);
        if (conf.accord.journal_directory.equals(conf.saved_caches_directory))
            throw new ConfigurationException("saved_caches_directory must not be the same as the accord.journal_directory", false);

        if (conf.hints_directory.equals(conf.saved_caches_directory))
            throw new ConfigurationException("saved_caches_directory must not be the same as the hints_directory", false);

View on GitHub (pinned to 88fd0f6a0e)

Solutions

  1. Free space on the volume backing local_system_data_file_directory (delete obsolete snapshots via nodetool clearsnapshot, remove old files).
  2. Resize/move the volume, or point local_system_data_file_directory at a larger filesystem in cassandra.yaml and restart.
  3. Monitor disk usage with alerting so the volume never drops below 1 GiB free.

Example fix

// cassandra.yaml before
local_system_data_file_directory: /var/lib/cassandra  # 800MB free
// after
local_system_data_file_directory: /data/cassandra/system  # volume with >1GiB free
Defensive patterns

Strategy: validation

Validate before calling

import org.apache.cassandra.io.util.FileUtils;
// before starting the node:
java.io.File dir = new java.io.File(conf.local_system_data_file_directory);
long free = dir.toPath().getFileSystem(dir.toPath()).getStores().stream()
    .filter(s -> dir.getAbsolutePath().startsWith(s.toString()))
    .mapToLong(s -> { try { return s.getUnallocatedSpace(); } catch (Exception e) { return Long.MAX_VALUE; } })
    .sum();
if (free < 1024L * 1024 * 1024) throw new IllegalStateException("local_system_data volume has <1GiB free: " + free);

Prevention

When it happens

Trigger: Starting a node whose local_system_data_file_directory points at a filesystem with fewer than 1 GiB free, as measured via FileStore.getUnallocatedSpace during config application (called from applyAll/toolInitialization at startup).

Common situations: Small root partitions in containers/VMs; the system data directory defaulting to the OS root disk; leftover snapshots or old commitlog/hint files consuming space; clusters provisioned with undersized disks.

Related errors


AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10). Data as JSON: /api/errors/cec0e04b4a5793ae. Report an issue: GitHub.