"disk quota exceeded" in /tmp on ubuntu-latest (Ubuntu 26.04)
ubuntu-latest is moving from Ubuntu 24.04 to 26.04 between October 19 and November 19, 2026 (what else changes). Ubuntu itself now mounts /tmp as a tmpfs, a file system in memory (Ubuntu 26.04 release notes). The first 26.04 runner images kept that default, so a job that wrote a few gigabytes to /tmp failed there, while the same job on 24.04, where /tmp is on the runner's disk, passed (runner-images #14777).
What it looks like
The tmpfs is half the runner's memory, about 7.8G (df shows 7.9G), and it has a per-user quota. GitHub measured that the runner user hits the quota at about 6.3G. So the error is a quota error, not "no space", and the disk around it has plenty free:
compile: writing output: write $WORK/b4822/_pkg_.a: disk quota exceeded OSError: [Errno 122] Disk quota exceeded error: unable to write file projects/hipblaslt/library/src/... failed to write to /tmp/lez/target/debug/deps/...: Disk quota exceeded (os error 122)
These are from Go (its build directory, and a GOCACHE made with mktemp, in lnd's case), pip staging large wheels, a git clone into a temporary directory (ROCm), and a Rust build under /tmp. pip sometimes reports it as an incomplete-download. Another symptom has nothing to do with size: a hard link from /opt/hostedtoolcache into /tmp crosses file systems and throws EXDEV: cross-device link not permitted.
Which images
GitHub changed the image on October 20 to keep /tmp on the root disk as on 24.04 (runner-images #14814, which masks tmp.mount and adds a test that /tmp is not a tmpfs), and on October 30 to empty /tmp at boot as before (#15185). In the reports we read, the failing jobs ran on images 20261012.163.1 and 20261018.50.1, and the same job passed on 20261025.179.1. A new image reaches all runners over several days, so an older one could still turn up during the move.
Fix: keep temporary files on the runner's disk
Make this the first step of the job:
- run: echo "TMPDIR=$RUNNER_TEMP" >> "$GITHUB_ENV"
RUNNER_TEMP is on the work disk on every runner, and it is emptied after each job. Python's tempfile (so pip and uv), Go's os.TempDir, Rust's std::env::temp_dir, Node's os.tmpdir() and mktemp all follow TMPDIR. Go's own build directory can also be moved with GOTMPDIR. A script that writes to /tmp/... by name still needs to be changed to use $TMPDIR or $RUNNER_TEMP.
The step is worth keeping even on fixed images: it costs nothing, and the same tmpfs is the default on a self-hosted runner or a developer machine with Ubuntu 26.04. For EXDEV, copy the file when linking fails, or make the link inside the same temporary directory.
Telling it apart
- Look at "Set up job": the Runner Image group shows the image and its version. Until November 19 a re-run can land on 24.04 and pass, so a green re-run proves nothing.
- A step with
df -hT /tmpshowstmpfsand about 7.9G on the affected images, and the root file system on the others. - "No space left on device" on the root disk is a different problem: the runner's disk is full, and freeing it (removing unused tools or Docker images) is the fix.
Other 26.04 failures
- libpcre3 and libpcre3-dev on Ubuntu 26.04: Ubuntu 26.04 has no PCRE1, so
libpcre3-devis gone from apt and programs built for 24.04 cannot loadlibpcre.so.3; installlibpcre2-devwhere the software supports it. - setup-beam's "not found in version list" on Ubuntu 26.04: the Erlang/OTP build list for 26.04 starts at OTP 26.0, so OTP 24 and 25 stop at setup, and a setup-beam older than v1.24.1 fails for every OTP.
- C and C++ builds that fail with GCC 15 on Ubuntu 26.04: the default gcc goes from 13 to 15, so C is compiled as C23, six old warnings are errors, and C++ headers no longer pull in
<cstdint>for you. - "cannot open shared object file" on Ubuntu 26.04: libxml2 is
libxml2.so.16and ICU is 78, so a cache saved on 24.04, or a binary built for it, cannot findlibxml2.so.2orlibicudata.so.74. - "client version ... is too old" on Ubuntu 26.04: Docker 29 refuses clients below API 1.40, so older Testcontainers fails with "Could not find a valid Docker environment".
- "coreutils: unknown program": most core tools are uutils.
See failed jobs from IntelliJ IDEA
Pipeline Inbox for GitHub Actions Workflows, a plugin by Lesstep for JetBrains IDEs 2024.1 or later, lists the runs of all your repositories in an IDE tool window, with their jobs and steps, and your current branch's runs are in the status bar. Reading is free; re-running failed jobs, cancelling, running workflows and reviewing deployments are Pro (US$1.50 a month, with a 30-day trial).
Get it on JetBrains Marketplace
GitHub and GitHub Actions are trademarks of GitHub, Inc.; Ubuntu is a trademark of Canonical Ltd.; IntelliJ IDEA is a trademark of JetBrains s.r.o. This page is not affiliated with, sponsored or endorsed by GitHub, Inc., Canonical or JetBrains.
More: "The ubuntu-latest label will migrate to Ubuntu 26" · C and C++ builds that fail with GCC 15 on Ubuntu 26.04 · GitHub Actions plugins for IntelliJ IDEA compared · 日本語