juicedata/juicefs · error
root required
Error message
root required
What it means
Returned by objbench for the change owner/group test case: the test path is backed by a local file system or jfs:// and the benchmark was not started as root (uid != 0), so chown-style ownership changes cannot be performed and root is required for this check.
Source
Thrown at cmd/objbench.go:1096
r, err := blob.Get(ctx, key, 0, -1)
if err != nil {
return fmt.Errorf("failed to get multipart upload file: %v", err)
}
cnt, err := io.ReadAll(r)
if err != nil {
return fmt.Errorf("failed to get multipart upload file: %v", err)
}
if !bytes.Equal(cnt, bytes.Join(content, nil)) {
return fmt.Errorf("the content of the multipart upload file is incorrect")
}
return nil
}
return utils.ErrNotSUP
})
funFSCase("change owner/group", func() error {
if (strings.HasPrefix(blob.String(), "file://") || strings.HasPrefix(blob.String(), "jfs://")) && os.Getuid() != 0 {
return errors.New("root required")
}
if err := fi.Chown(key, "nobody", groupName); err != nil {
return fmt.Errorf("failed to chown object %s", err)
}
if objInfo, err := blob.Head(ctx, key); err != nil {
return fmt.Errorf("failed to head object %s", err)
} else if info, ok := objInfo.(object.File); ok {
if info.Owner() != "nobody" {
return fmt.Errorf("expect owner nobody but got %s", info.Owner())
}
if info.Group() != groupName {
return fmt.Errorf("expect group %s but got %s", groupName, info.Group())
}
}
return nil
})
funFSCase("change permission", func() error {View on GitHub (pinned to c9a67b23e8)
Solutions
- Run `juicefs objbench` with sudo/root when testing file:// or jfs:// backends
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at cmd/objbench.go:1096 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of juicedata/juicefs@c9a67b23e8 (2026-09-06).
Data as JSON: /api/errors/6b774d92a17fe8bf.
Report an issue: GitHub.