golang/go · error
writing metafiles file: %v
Error message
writing metafiles file: %v
What it means
After serializing the coverage meta-files collection, WriteCoverMetaFilesFile creates the action's objdir and writes the JSON to <objdir>/<MetaFilesFileName> via sh.writeFile. If the write fails (disk full, permission denied, missing parent dir, path too long), the error is wrapped and returned.
Source
Thrown at src/cmd/go/internal/work/cover.go:168
collection.MetaFileFragments = append(collection.MetaFileFragments, metaFilesFile)
}
// Serialize it.
data, err := json.Marshal(collection)
if err != nil {
return fmt.Errorf("marshal MetaFileCollection: %v", err)
}
data = append(data, '\n') // makes -x output more readable
// Create the directory for this action's objdir and
// then write out the serialized collection
// to a file in the directory.
if err := sh.Mkdir(a.Objdir); err != nil {
return err
}
mfpath := a.Objdir + coverage.MetaFilesFileName
if err := sh.writeFile(mfpath, data); err != nil {
return fmt.Errorf("writing metafiles file: %v", err)
}
// We're done.
return nil
}
View on GitHub (pinned to b6b368adc5)
Solutions
- Check disk space and write permissions on TMPDIR and GOCACHE: 'df -h', 'touch <tmp>/x'.
- Move GOCACHE to a larger, writable local directory.
- Run 'go clean -cache' to reset a possibly corrupted objdir tree.
- On Windows, shorten module paths or enable long-path support.
Example fix
// before $ go test -coverpkg=./... ./... // error: writing metafiles file: open /tmp/.../b001/metafiles: no space left on device // after $ export GOCACHE=$HOME/.cache/go-build $ export TMPDIR=$HOME/tmp $ go test -coverpkg=./... ./...
Defensive patterns
Strategy: validation
Validate before calling
// Pre-flight: confirm TMPDIR/GOCACHE are writable with free space.
func preflightCache() error {
for _, d := range []string{os.Getenv("GOCACHE"), os.Getenv("TMPDIR")} {
if d == "" { continue }
var stat syscall.Statfs_t
if err := syscall.Statfs(d, &stat); err != nil { return err }
if stat.Bavail*uint64(stat.Bsize) < 1<<30 {
return fmt.Errorf("%s has < 1 GiB free", d)
}
}
return nil
} Prevention
- Provision GOCACHE with multi-GB free space.
- Run coverage builds on local, not network, storage.
- Watch SELinux/AppArmor denials in containerized CI.
When it happens
Trigger: Running 'go test -coverpkg' where the build objdir lives on a full or read-only filesystem, or where permission to create files is missing. The earlier sh.Mkdir succeeded, so the failure is specifically in the file write step.
Common situations: TMPDIR/GOCACHE on a small tmpfs; CI container with read-only mounted volume; SELinux denying writes; concurrent build evicting the objdir mid-write; path length limits on Windows.
Related errors
- %s: %v
- %s: failed to read .go_export section: %v
- error opening target for caching: %w
- error adding target to cache: %w
- internal error: unable to locate build action for package %q
AI-assisted analysis of golang/go@b6b368adc5 (2026-08-12).
Data as JSON: /api/errors/2c9445262e13e572.
Report an issue: GitHub.