Skipbox

GitHub Actions の「No space left on device」:ディスクを埋めているものを調べ、空け、大きいディスクに移す

GitHub Actions の「No space left on device」は、ジョブがランナーの空きより多く書き込んだという意味で、GitHub の標準の Linux ランナーの空きはおよそ 14 GB です。runner-images のメンテナーは「プライベートでも公開でも、保証する空きは 14GB だけ」と書いています。残りはイメージに入っているツールで、ubuntu-latest のあるユーザーの一覧では Android SDK が 12 GB、ツールキャッシュが 8.5 GB、GHC が 5.5 GB でした。Docker のイメージ、ディスクに展開されたキャッシュ、ビルドの成果物で 14 GB はすぐに埋まります。直すのはこの順です。何がディスクを埋めているかを見る(df -h、df -i、du、docker system df)、書き込みを減らす、使わないプリインストールのツールを消す、それでも収まらなければ大きいディスクで動かす。GitHub の大きいランナーは 75 GB からですが、使えるのは GitHub Team と Enterprise Cloud だけです。

Skipbox は、アカウント専用のマシンでジョブを動かします。ディスクは S で 80 GB、M で 160 GB、L で 320 GB で、定額、実行時間は無制限です。ジョブのあとも残すキャッシュはこのディスクにあり、ディスクが埋まってきたら古いものから減らすので、ジョブの最初に何かを消す必要はありません。

GitHub のランナーのディスク

GitHub ホストランナーの表では、標準の Linux ランナーの SSD はプライベートリポジトリでも公開リポジトリでも 14 GB です。runner-images のディスカッション #9329 では、イメージの変更で Ubuntu ランナーの空きが 31 GB 超から 17 GB 超に減ったあと、メンテナーが「プライベートでも公開でも、保証する空きは 14GB だけ」と答えています。14 GB と考えてください。

残りはイメージです。issue #10386(「Free space left: 72 MB」)で、あるユーザーが ubuntu-latest で du を取った結果です。

1. 何がディスクを埋めているかを見る

落ちるステップのあとに、if: always() を付けたステップを足します。

- name: Disk usage
  if: always()
  run: |
    df -h
    df -i /
    sudo du -xh --max-depth=1 / 2>/dev/null | sort -rh | head -15
    docker system df || true
  • df -h はファイルシステムごとの使用量です。ジョブがどこに書いているか(ワークスペース、/var/lib/docker の Docker のデータ、一時ディレクトリ)を確かめます。
  • df -i は inode です。バイトが空いていても inode(ファイル 1 つに 1 つ)が尽きると、同じエラーになります。
  • du は大きいディレクトリです。
  • docker system df は、Docker のイメージ、コンテナ、ボリューム、ビルドキャッシュが使っている量です。

2. 書き込みを減らす

  • ビルドの合間に Docker を prune する。 docker system prune は、止まったコンテナ、使っていないネットワーク、dangling なイメージ、使っていないビルドキャッシュを消します。-a で使っていないイメージすべて、--volumes で匿名ボリュームも消します。
  • 効くものだけキャッシュする。 復元したキャッシュはランナーのディスクに展開されるので、大きいアーカイブはダウンロードより多くの場所を取ります。ジョブごとに分けるか、すぐ取り直せるものは外します。
  • ビルドの成果物を片づける。 あとのステップで使わないものは、場所が要るステップの前に消します。

3. 使わないプリインストールのツールを消す

issue #2875 と #10386 から。

- name: Free disk space
  run: |
    sudo rm -rf /usr/local/lib/android /usr/local/.ghcup /opt/hostedtoolcache/CodeQL
    sudo rm -rf /usr/share/dotnet /usr/local/share/boost
    df -h /

かかるものは 2 つです。次のジョブの VM にはまた入っているので、何 GB も消す時間を毎回払います。そして $AGENT_TOOLSDIRECTORY(ツールキャッシュ全体)を消すともっと空きますが、#2875 を立てた人が書いているとおり、そこにあるはずのツールを使うステップが動かなくなります。free-disk-space のアクションは、こうした削除をまとめたものです。作者はこのスレッドのあとにツールキャッシュを消すオプションを足し、「さらに 6GB 空く」と書いています。

4. 大きいディスクで動かす

Skipbox がディスクにすること

プランごとに、アカウント専用のマシンが付き、ジョブのあとも残ります。ディスクはマシンの大きさで決まります。

  • ディスクは S で 80 GB、M で 160 GB、L で 320 GB です。
  • そこに残るのは、あなたのジョブの状態です。 Docker のイメージ、レイヤー、ビルドキャッシュ、~/.npm、pnpm のストア、~/.cache、Go・Gradle・Maven・Cargo のキャッシュ、setup-* で入れたツール。actions/cache が保存したものは、ディスクの半分までマシンのそばに残ります。
  • 埋まりきりません。 ジョブのあとでディスクが 85% を超えるまでは何も消しません。超えたら、最後に使った日が古いものから 75% まで減らします。dangling なイメージ、Docker のビルドキャッシュ、そしてパッケージのキャッシュと残したビルドを、まるごと消していきます。それでも 85% を超えているときだけ、マシンを作り直します。
  • 残すキャッシュとジョブは、同じディスクを使います。 大きなイメージや大きなビルドの成果物など、自分で何十 GB も書くジョブは M か L にします。

実行時間は無制限です。4 vCPU で月 20,000分なら、GitHub の請求は 参考値:2026年11月10日の為替レート・1ドル=158.22円。米ドルの料金を、このレートで円に換算した概算です。、Skipbox の S は 6,000 円です。

移行は runs-on を 1行書き換えるだけ

jobs:
  build:
    runs-on: skipbox-8x16 # ubuntu-latest から書き換える
    steps:
      - uses: actions/checkout@v4
      # 「Free disk space」のステップは外せる
      - run: docker build -t app .

skipbox-8x16 はプラン M で動きます。runs-on: skipbox は S とトライアルで動きます。

  1. Skipbox に GitHub でログインする
  2. Skipbox の GitHub アプリを入れて、使うリポジトリを選ぶ
  3. runs-on を書き換えて push する

セキュリティ

  • マシンはアカウントごとの専用です。ほかの会社のジョブと同じマシンで動くことはありません。
  • ジョブが終わるたびに、ランナーの認証情報、プロセスとコンテナ、ホームディレクトリの認証情報のファイルを消します。「毎回クリーン」なら、ジョブごとに新しいマシンで動きます。
  • 書き込み権限のない人のコード(フォークからのプルリクエストなど)は、使い捨ての VM で動きます。キャッシュは読めますが、書き換えられません。

くわしくはジョブの分離のしくみにあります。

ディスクが足りなくなるジョブで試す

カード不要で、7日間かジョブの合計 3,000分まで無料です。トライアルは runs-on: skipbox で、S と同じ 80 GB のマシンです。ジョブをそこに移し、プリインストールのツールを消すステップを外して動かしてください。

よくある質問

GitHub Actions のランナーのディスクはどのくらい?

GitHub のドキュメントでは、標準の Linux ランナーの SSD はプライベートリポジトリでも公開リポジトリでも 14 GB です。runner-images のメンテナーも、保証する空きはどちらも 14 GB だけだと書いています。ディスクそのものはもっと大きいのですが、残りはランナーのイメージに入っているツールで埋まっているので、14 GB と考えてください。

GitHub Actions で No space left on device が出たら?

まず何が埋めたのかを見ます。df -h でファイルシステムごとの使用量、df -i で inode、sudo du -xh --max-depth=1 / で大きいディレクトリ、docker system df で Docker のイメージとビルドキャッシュです。そのうえで、書き込みを減らし(ビルドの合間に Docker を prune する、効くものだけキャッシュする)、使わないプリインストールのツール(Android SDK、GHC、CodeQL、.NET)を消し、それでも足りなければディスクの大きいランナーで動かします。

ubuntu-latest で何を消せばディスクが空く?

ジョブが使わないツールです。GitHub の runner-images の issue では、/usr/local/lib/android(あるユーザーの一覧で 12 GB)、/usr/local/.ghcup、/opt/hostedtoolcache/CodeQL、/usr/share/dotnet、/usr/local/share/boost を消しています。$AGENT_TOOLSDIRECTORY を消すとツールキャッシュごと空きますが、そこにツールがある前提のセットアップのステップが動かなくなります。何 GB も消すのは、毎回の実行で時間がかかります。

GitHub の大きいランナーはディスクも大きい?

大きいです。2 vCPU で 75 GB、4 vCPU で 150 GB、8 vCPU で 300 GB、64 と 96 vCPU で 2,040 GB まで。ただし使えるのは GitHub Team と GitHub Enterprise Cloud の組織だけで、分課金です。

Skipbox のジョブはディスクをどのくらい使える?

アカウント専用のマシンのディスクは、S で 80 GB、M で 160 GB、L で 320 GB です。ジョブのあとも残すキャッシュも同じディスクにあり、ジョブのあとで 85% を超えていれば、最後に使った日が古いものから 75% まで減らします。セルフホストランナーのディスクのように埋まりきることはありません。自分で何十 GB も書くジョブは M か L にします。

試すのにお金はかかる?

かかりません。カード不要で、7日間かジョブの合計 3,000分まで無料です。S と同じマシンで動きます。ディスクが足りなくなるジョブを runs-on: skipbox にして、プリインストールのツールを消すステップを外してください。

2026年11月13日 更新

常に warm なキャッシュで CI/CD を高速化するなら

専用ランナーを定額で。実行時間は無制限

フル稼働なら GitHub の 1/12 の費用。定額だから一日中動かせる。GitHub の 7倍のキャッシュ容量。

  • カード不要
  • GitHub でログイン
  • いつでも解約