WSL2のUbuntuで /tmp の容量が足りない場合は、まず /tmp が tmpfs なのか、通常の ext4 上にあるのかを確認します。
df -h /tmp
findmnt /tmp
/tmp が tmpfs の場合
tmpfsなら、一時的に容量を増やせます。
例えば8GBにする場合:
sudo mount -o remount,size=8G /tmp
確認:
df -h /tmp
再起動後も有効にしたい場合は /etc/fstab に設定します。
tmpfs /tmp tmpfs defaults,size=8G,mode=1777 0 0
fstabが未設定でも問題ない
/etc/fstab を開いて、
# UNCONFIGURED FSTAB FOR BASE SYSTEM
しか書かれていなくても異常ではありません。
単にfstabがまだ使われていないだけなので、その下に追記できます。
# UNCONFIGURED FSTAB FOR BASE SYSTEM
tmpfs /tmp tmpfs defaults,size=8G,mode=1777 0 0
反映:
sudo mount -a
確認:
df -h /tmp
ただし、現在 /tmp がext4上にある場合、この設定を追加すると「容量を増やす」のではなく、/tmpを新たにtmpfsへ変更することになります。
/tmp がext4の場合
/tmp がルートファイルシステムと同じext4上なら、
df -h /
でWSL全体の空き容量を確認します。
容量不足なら、不要ファイルを削除するか、Windows側からWSL2の仮想ディスクを拡張します。
例えば:
wsl --shutdown
wsl --manage Ubuntu --resize 2TB
tmpfsの上限は?
size=8G と指定した場合、/tmp の論理的な上限は8GBです。
ただし、tmpfsは通常のディスクではなく、
RAM
+
Swap
を使います。
そのため、実際に使える容量はWSL2全体のメモリ状況に影響されます。
例えば .wslconfig が、
[wsl2]
memory=8GB
swap=4GB
なら、WSL2全体として利用できるメモリ資源は概ね、
RAM 8GB
+
Swap 4GB
の範囲になります。
ここからUbuntu本体や他のプロセスもメモリを使います。
つまり、
/tmp size=16G
と設定すること自体はできても、実際に16GB全部を安全に使えるとは限りません。
size未指定時のtmpfs
Linuxのtmpfsは、size= を指定しない場合、既定では物理RAMの50%程度が上限になります。
そのため、
df -h /tmp
で想定より小さく見える場合は、tmpfsの既定上限が原因のことがあります。
現在のメモリとSwapを確認する
WSL2側では、
free -h
で確認できます。
例えば、
Mem: 8.0Gi
Swap: 4.0Gi
なら、tmpfsを大きくしすぎると、他のプロセスとメモリを取り合うことになります。
実運用では、WSL2へ8GB割り当てているなら、
/tmp 4GB~8GB程度
など、ある程度余裕を残した方が安全です。
まとめ
WSL2の /tmp 容量不足では、まず、
df -h /tmp
findmnt /tmp
を確認します。
判断は次の通りです。
| 状態 | 対処 |
|---|---|
/tmp がtmpfs |
size= を増やす |
| fstabが未設定 | そのまま設定を追記してよい |
/tmp がext4 |
WSL全体のディスク容量を確認 |
| tmpfsを大きくしたい | RAM+Swapとのバランスを見る |
tmpfsの size= はあくまで最大値です。
実際に使える容量は、WSL2へ割り当てたRAM・Swap・他プロセスの使用量に左右される
と考えると分かりやすいでしょう。
