文章目录
错误现象
有多个android项目,编译成功一个后,其它几个接连失败,
报错信息如下:
go build command-line-arguments: mkdir /tmp/go-build710589343/command-line-arguments: no space left on device
File "/usr/lib/python2.7/tempfile.py", line 339, in mkdtemp
_os.mkdir(file, 0700)
OSError: [Errno 28] No space left on device: '/tmp/make-target-files-0jy9g2'
分析
内存排查
以为是内存不足了,使用free -h查看内存情况:
bash
$ free -h
total used free shared buff/cache available
Mem: 125G 782M 15G 7.0M 109G 124G
Swap: 8.0G 31M 8.0G
不是内存不足的问题。
/tmp分区
使用du -h /tmp查看/tmp分区占用情况:
du: cannot read directory '/tmp/systemd-private-7eaeee3a2a7d40ad984e0b30dae6abb4-systemd-resolved.service-TajIYX': Permission denied
4.0K /tmp/systemd-private-7eaeee3a2a7d40ad984e0b30dae6abb4-systemd-resolved.service-TajIYX
4.0K /tmp/hsperfdata_nobody
4.0K /tmp/jna--1040220445
du: cannot read directory '/tmp/systemd-private-7eaeee3a2a7d40ad984e0b30dae6abb4-systemd-timesyncd.service-fhFdwp': Permission denied
4.0K /tmp/systemd-private-7eaeee3a2a7d40ad984e0b30dae6abb4-systemd-timesyncd.service-fhFdwp
4.0K /tmp/.font-unix
4.0K /tmp/hsperfdata_alfnoso
du: cannot read directory '/tmp/snap-private-tmp': Permission denied
4.0K /tmp/snap-private-tmp
4.0K /tmp/.X11-unix
7.4G /tmp/sprd-pac-aFEymK
4.0K /tmp/.ICE-unix
2.7G /tmp/sprd-pac-bfqMYm
4.0K /tmp/nsjail.1001.root
4.0K /tmp/.XIM-unix
4.0K /tmp/nsjail.1001.tmp
4.0K /tmp/.Test-unix
......
2.6G /tmp/make-target-files-MXuUZh
13G /tmp
13个G,不算很大。
使用df -i /tmp查看tmp分区占用磁盘的比率:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 7602176 270479 7331697 4% /
占用4%,说明磁盘空间是够的。
磁盘
使用df -h查看所有分区使用情况:
Filesystem Size Used Avail Use% Mounted on
udev 63G 0 63G 0% /dev
tmpfs 13G 7.1M 13G 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 114G 108G 0 100% /
tmpfs 63G 0 63G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 63G 0 63G 0% /sys/fs/cgroup
/dev/sdc 1.8T 1.5T 208G 89% /work
/dev/sdb2 974M 225M 682M 25% /boot
/dev/sda 2.7T 2.0T 577G 78% /home
tmpfs 13G 0 13G 0% /run/user/1001
发现/根分区满了。/dev/mapper/ubuntu--vg-ubuntu--lv 114G 108G 0 100% /
解决
临时方案
临时解决方法是清除/tmp目录下文件
bash
rm -rf /tmp/*
长远方案
移动tmp
如果根分区仍然紧张,且 /work(208 GB 可用)或 /home(577 GB 可用)空间充足,可把临时目录迁移过去:
以 /work 为例
bash
sudo mkdir -p /work/tmp
sudo rsync -a /tmp/ /work/tmp/
sudo mv /tmp /tmp.old
sudo ln -s /work/tmp /tmp
或者直接修改环境变量,让 Bash 使用自定义临时目录:
bash
mkdir -p $HOME/tmp
echo 'export TMPDIR=$HOME/tmp' >> \~/.bashrc
source \~/.bashrc
这样即使根分区满了,临时文件也会写入用户目录。
查看/根目录下的大文件,可以删除或移动它
比如发现有个swap.img
ls -lh /swap.img
-rw------- 1 root root 8.0G Mar 3 2023 /swap.img
它是用于挂载/swap分区用的,
内存有128G,是否还需要swap分区?

对于拥有 128 GB RAM 的系统,如果不需要休眠且日常负载不出现内存耗尽,可以完全不配置 swap,或仅保留一个小的 swap 文件(4‑8 GB)作为安全垫。
如需休眠或担心极端内存峰值,则应配置相应大小的 swap(至少等于 RAM,或根据实际需求适当缩小)。
若决定 不使用 swap,只需 swapoff -a 并在 /etc/fstab 中删除或注释对应行即可。
这里选择不关闭swap,而是移动/swap的挂载位置,以下是移动步骤:
- 关闭当前 swap
bash
sudo swapoff /swap.img
- 在新位置创建 swap 文件(以 /work/swapfile 为例,大小 8 GB)
bash
sudo fallocate -l 8G /work/swapfile # 或 dd if=/dev/zero of=/work/swapfile bs=1M count=8192
sudo chmod 600 /work/swapfile
sudo mkswap /work/swapfile
- 启用新 swap
bash
sudo swapon /work/swapfile
修改 /etc/fstab
编辑文件,将原来的行
/swap.img none swap sw 0 0
改为
/work/swapfile none swap sw 0 0
保存后即可。
- 删除旧的 swap 镜像(确认新 swap 正常后)
bash
sudo rm -f /swap.img
- 检查
bash
free -h # 查看 swap 是否在新位置
swapon -s # 列出已启用的 swap
这样就释放了8个G的空间,另外就是可以查看系统中安装的应用,哪些是可以卸载的,卸载后也可以释放部分空间。
防止再次满盘的方法:

Docker安装Ubuntu搭建Android SDK编译环境
ubuntu18编译Android8的Failed to contact Jack server问题
linux下docker安装ubuntu
linux opensuse使用mtk烧录工具flashtool
作者:帅得不敢出门