thanos-io/thanos · error

open storage dir

Error message

open storage dir

What it means

os.OpenRoot failed on the receive data directory after creating it. This obtains a rooted-handle for safe tenant-scoped file access; failure indicates the directory vanished, permission issues, or an unsupported filesystem.

Solutions

  1. Re-check data dir permissions after creation errors
  2. Ensure the filesystem supports openat2/O_PATH semantics (or run a newer kernel)
  3. Confirm nothing deletes the data dir concurrently
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at cmd/thanos/receive.go:217 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of thanos-io/thanos@35b8b99117 (2026-09-07). Data as JSON: /api/errors/e3cd05ccc843ad5e. Report an issue: GitHub.

Appendix: source

Thrown at cmd/thanos/receive.go:217

			bkt, err = client.NewBucket(logger, confContentYaml, comp.String(), nil)
			if err != nil {
				return err
			}
			bkt = objstoretracing.WrapWithTraces(objstore.WrapWithMetrics(bkt, extprom.WrapRegistererWithPrefix("thanos_", reg), bkt.Name()))
		} else {
			level.Info(logger).Log("msg", "no supported bucket was configured, uploads will be disabled")
		}
	}

	var dataDir *os.Root
	if enableIngestion {
		if err := os.MkdirAll(conf.dataDir, 0o755); err != nil {
			return errors.Wrapf(err, "create data dir in %v", conf.dataDir)
		}

		dataDir, err = os.OpenRoot(conf.dataDir)
		if err != nil {
			return errors.Wrap(err, "open storage dir")
		}

		// Create TSDB for the default tenant.
		if err := createDefautTenantTSDB(logger, conf.defaultTenantID, dataDir); err != nil {
			return errors.Wrapf(err, "create default tenant tsdb in %v", conf.dataDir)
		}
	}

	relabelConfig, err := conf.relabelCfg.RelabelConfig(nil)
	if err != nil {
		return errors.Wrap(err, "get relabel configuration")
	}

	var cache = storecache.NoopMatchersCache
	if conf.matcherCacheSize > 0 {
		cache, err = storecache.NewMatchersCache(storecache.WithSize(conf.matcherCacheSize), storecache.WithPromRegistry(reg))
		if err != nil {
			return errors.Wrap(err, "failed to create matchers cache")

View on GitHub (pinned to 35b8b99117)