GitHub Actions のストレージ空き容量を限界まで拡張する
- Actions スタート時点でいきなり 27GB 前後の空き容量の状態から 63GB 前後まで空き容量を増やせる
name: Container deploy
on:
release:
types: [published]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
REGISTRY: ghcr.io
IMAGE_NAME: pinto0309/test
jobs:
docker-deploy:
runs-on: ubuntu-22.04
permissions:
contents: read
packages: write
steps:
- name: Git checkout
uses: actions/checkout@v3
- name: Enable buildx
uses: docker/setup-buildx-action@v2
- name: Check space before cleanup
run: df -h
- name: Clean space as per https://github.com/actions/virtual-environments/issues/709
run: |
docker images
sudo rm -rf "/opt/ghc" || true
sudo rm -rf "/usr/share/dotnet" || true
sudo rm -rf "$AGENT_TOOLSDIRECTORY" || true
sudo rm -rf "/usr/local/lib/android" || true
sudo rm -rf "/usr/local/share/boost" || true
docker rmi $(docker image ls -q --filter "reference=node*")
docker rmi $(docker image ls -q --filter "reference=debian*")
docker rmi $(docker image ls -q --filter "reference=alpine*")
docker rmi $(docker image ls -q --filter "reference=ubuntu:20.04")
- name: apt-get remove cleanup
run: |
sudo apt purge -y \
ansible* \
aria2* \
aspnetcore* \
azure-cli* \
cabal* \
clang* \
dotnet-* \
firefox* \
gfortran-* \
ghc* \
google-chrome-stable* \
google-cloud-sdk* \
heroku* \
imagemagick* \
javascript* \
kubectl* \
llvm* \
mono* \
mysql* \
nginx* \
node* \
npm* \
nuget* \
php* \
postgresql* \
powershell* \
rpm* \
ruby* \
sqlite3* \
subversion \
temurin* \
tmux* \
vim* \
yarn*
sudo apt-get autoremove -y >/dev/null 2>&1 || true
sudo apt-get autoclean -y >/dev/null 2>&1 || true
- name: Check space after cleanup
run: df -h
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
flavor: |
latest=false
prefix=
suffix=
tags: |
type=schedule,pattern=nightly,enable=true,priority=1000
type=ref,event=branch,enable=true,priority=600
type=ref,event=tag,enable=true,priority=600
type=ref,event=pr,prefix=pr-,enable=true,priority=600
type=raw,value=latest,enable=${{ github.event.release.target_commitish == 'main' }}
- name: Build and push Docker image
uses: docker/build-push-action@3b5e8027fcad23fda98b2e3ac259d8d67585f671
with:
context: .
push: true
provenance: false
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
- Before
Filesystem Size Used Avail Use% Mounted on /dev/root 84G 57G 27G 69% / tmpfs 3.4G 172K 3.4G 1% /dev/shm tmpfs 1.4G 1.2M 1.4G 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sdb15 105M 6.1M 99M 6% /boot/efi /dev/sda1 14G 4.1G 9.0G 31% /mnt tmpfs 695M 12K 695M 1% /run/user/1001
- After
Filesystem Size Used Avail Use% Mounted on /dev/root 84G 21G 63G 26% / tmpfs 3.4G 172K 3.4G 1% /dev/shm tmpfs 1.4G 1.2M 1.4G 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sdb15 105M 6.1M 99M 6% /boot/efi /dev/sda1 14G 4.1G 9.0G 31% /mnt tmpfs 695M 12K 695M 1% /run/user/1001
bazelとherokuが原因でapt purgeがエラーとなり、実行されていないことに気が付きました。
この2つのパッケージはaptでインストールされていません。
- https://github.com/actions/runner-images/blob/main/images/linux/scripts/installers/heroku.sh
- https://github.com/actions/runner-images/blob/main/images/linux/scripts/installers/bazel.sh
herokuを除外、bazelをnpmで削除(sudo npm uninstall bazel)することで空きスペースが53Gが58Gに増えました。
Free space:
Filesystem Size Used Avail Use% Mounted on
/dev/root 84G 26G 58G 31% /
tmpfs 3.4G 172K 3.4G 1% /dev/shm
tmpfs 1.4G 1.1M 1.4G 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sdb15 105M 6.1M 99M 6% /boot/efi
/dev/sda1 14G 4.1G 9.0G 31% /mnt
tmpfs 694M 12K 694M 1% /run/user/1001
さらに不要なパッケージを削除することで63Gまで空きスペースを増やすことに成功しました。
- /opt 配下はすべて削除
- jvm, swift, julia, kotlinc, miniconda, phantomjs, sbt, sqlpackageのローカルインストールのディレクトリを削除
- ブラウザ(firefox, edge)および、ブラウザのドライバーをすべて削除
- dockerのイメージはすべて削除(docker image prune --all --force)
- rustを削除
- apt purge で削除するパッケージに追加
firefox, mono-complete , nuget , apache2 , moby-engine, moby-cli , moby-buildx , moby-compose, microsoft-edge-stable, mongodb*, nginx , postgresql* , libpq-dev , r-base , sphinxsearch
ランナーにインストールされるパッケージはこちらを参考に削除しました。
コードはこちら
結果
Free space:
Filesystem Size Used Avail Use% Mounted on
/dev/root 84G 21G 63G 25% /
tmpfs 3.4G 172K 3.4G 1% /dev/shm
tmpfs 1.4G 1.1M 1.4G 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda15 105M 6.1M 99M 6% /boot/efi
/dev/sdb1 14G 4.1G 9.0G 31% /mnt
tmpfs 694M 12K 694M 1% /run/user/1001
ありがとうございます! 最初のコメントのスクリプトを見直しますー
2024.2ごろ?からRunnerのVMが変更になったようで、利用できるスペースが約10Gほど減少してしまいました。/
のサイズが73Gに減少したほか、/mnt
が74Gに増加など、かなり変更があります。
- Before
Filesystem Size Used Avail Use% Mounted on /dev/root 84G 57G 27G 69% / tmpfs 3.4G 172K 3.4G 1% /dev/shm tmpfs 1.4G 1.2M 1.4G 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sdb15 105M 6.1M 99M 6% /boot/efi /dev/sda1 14G 4.1G 9.0G 31% /mnt tmpfs 695M 12K 695M 1% /run/user/1001
- After
Filesystem Size Used Avail Use% Mounted on /dev/root 73G 53G 21G 72% / tmpfs 7.9G 172K 7.9G 1% /dev/shm tmpfs 3.2G 1.1M 3.2G 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda15 105M 6.1M 99M 6% /boot/efi /dev/sdb1 74G 4.1G 66G 6% /mnt tmpfs 1.6G 12K 1.6G 1% /run/user/1001
うれしいことに/mnt
が74Gに増加したので、以前のテクニックを使わなくても約66Gの容量を使えます!(3Gも増加します!)
ただし、/mnt
はパーミッションの関係でrunnerがすぐには使えないため、sudo
、もしくはパーミッションを変更する必要があります。
sudo chown runner /mnt
cd /mnt
(実は、/mnt
の容量増えていることに気が付いたのがこれを書いていた時なので、、、)
ただ、それだけでは面白くないので、/
の空きスペースを限界まで拡張するGitHub Actions Disk Space Challengeをやります。
不要と思われるファイルやパッケージの削除を限界まで進めました。
これにより、/
も約66Gの空きを確保できました。
前回に追加して、*-devパッケージやfont, icon, kernel-hedars...など自分の用途(meta-tensorflow-liteのビルド)に特化しています。runnerが成功するためだけですので、削除の方法もあやしいです。一歩間違えば、runnerが動作しません。
以下がActionsの設定ファイルです。
-
Before
Filesystem Size Used Avail Use% Mounted on /dev/root 84G 57G 27G 69% / tmpfs 3.4G 172K 3.4G 1% /dev/shm tmpfs 1.4G 1.2M 1.4G 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sdb15 105M 6.1M 99M 6% /boot/efi /dev/sda1 14G 4.1G 9.0G 31% /mnt tmpfs 695M 12K 695M 1% /run/user/1001
-
After
Filesystem Size Used Avail Use% Mounted on /dev/root 73G 7.3G 66G 11% / tmpfs 7.9G 172K 7.9G 1% /dev/shm tmpfs 3.2G 1.1M 3.2G 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda15 105M 6.1M 99M 6% /boot/efi /dev/sdb1 74G 4.1G 66G 6% /mnt tmpfs 1.6G 12K 1.6G 1% /run/user/1001
/
で66G、`/mnt'で66Gで合計132Gの空きが確保できました!
参考情報
VMの仕様が変わった(RAMの容量が増えたりデフォルトでインストールされているパッケージが変わった)のは実は気づいていたのですが、職場のほうの環境だけ修正してこっちのネタはアップデートしていなかったですね。。。ありがとうございます!