juicedata/juicefs · error
no quota for inode %d path %s
Error message
no quota for inode %d path %s
What it means
Raised by baseMeta.checkDirUsage (pkg/meta/quota.go:938) during `juicefs quota check` when doGetQuota returns no quota record for the given inode (directory quota key). It means the quota check was asked to verify a directory that has no quota set in the metadata engine. The check aborts for that path because there is nothing to compare usage against.
Source
Thrown at pkg/meta/quota.go:938
}
}
return nil
}
func (m *baseMeta) handleQuotaCheck(ctx Context, qtype uint32, key uint64, dpath string, strict, repair bool, quotas map[string]*Quota) error {
if qtype == UserQuotaType || qtype == GroupQuotaType {
return m.checkUGUsage(ctx, repair, quotas)
}
return m.checkDirUsage(ctx, qtype, key, dpath, strict, repair, quotas)
}
func (m *baseMeta) checkDirUsage(ctx Context, qtype uint32, key uint64, dpath string, strict, repair bool, quotas map[string]*Quota) error {
q, err := m.en.doGetQuota(ctx, qtype, key)
if err != nil {
return err
}
if q == nil {
return fmt.Errorf("no quota for inode %d path %s", key, dpath)
}
var sum Summary
if st := m.GetSummary(ctx, Ino(key), &sum, true, strict); st != 0 {
return st
}
usedInodes := int64(sum.Dirs+sum.Files) - 1
usedSpace := int64(sum.Size) - align4K(0) // quota ignore root dir
if q.UsedInodes == usedInodes && q.UsedSpace == usedSpace {
logger.Infof("quota of %s is consistent", dpath)
quotas[dpath] = q
return nil
}
logger.Warnf(
"%s: quota(%s, %s) != summary(%s, %s)", dpath,View on GitHub (pinned to c9a67b23e8)
Solutions
- Verify the directory actually has a quota: run `juicefs quota list` or `juicefs quota get <path>`; if absent, set one with `juicefs quota set` before checking.
- Re-run the check against the correct quota'd path (check for typos / wrong mount root).
- If the quota was intentionally removed, ignore the error — check was started for a stale target.
- Retry if removal raced with the check; run check again when no quota mutations are in flight.
Example fix
// before: quota check on a dir without quota fails $ juicefs quota check /mnt/jfs/data // after: ensure the quota exists first $ juicefs quota set /mnt/jfs/data --capacity 100G $ juicefs quota check /mnt/jfs/data
Defensive patterns
Strategy: validation
Validate before calling
// ensure a quota exists before running quota check
q, err := meta.GetQuota(ctx, meta.DirQuotaType, uint64(ino))
if err != nil { return err }
if q == nil { return fmt.Errorf("no quota on inode %d; set one with `juicefs quota set` first", ino) } Prevention
- Run `juicefs quota list` before check to confirm the target has a quota.
- Avoid removing quotas concurrently with quota check runs.
- Script quota checks to call `quota set` first when a quota is missing and expected.
When it happens
Trigger: Running `juicefs quota check <path>` (or the internal handleQuotaCheck path) for a directory inode whose dir-quota record was deleted concurrently (e.g. `juicefs quota remove`) or never existed, so doGetQuota returns (nil, nil).
Common situations: Quota removed by another admin while a check was running; typo in the path so it resolves to an un-quota'd directory; stale cached inode/path mapping after the quota was deleted; running check on a path with only a user/group quota but no directory quota.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- quota of %s is inconsistent, please repair it with --repair
- clean %s quotas: %w
- set %s quota: %w
- scan global user group usage: %w
- load user/group quotas: %w
AI-assisted analysis of juicedata/juicefs@c9a67b23e8 (2026-09-06).
Data as JSON: /api/errors/e555bcda3076530b.
Report an issue: GitHub.