【MacOS】系统数据占用超大存储空间,原因、定位、清理方式记录
问题
定位数据
df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk2s1s1 460Gi 15Gi 4.5Gi 77% 412k 47M 1% /
devfs 206Ki 206Ki 0Bi 100% 714 0 100% /dev
/dev/disk2s6 460Gi 3.0Gi 4.5Gi 41% 3 47M 0% /System/Volumes/VM
/dev/disk2s2 460Gi 13Gi 4.5Gi 75% 1.8k 47M 0% /System/Volumes/Preboot
/dev/disk2s4 460Gi 699Mi 4.5Gi 14% 345 47M 0% /System/Volumes/Update
/dev/disk1s2 500Mi 6.0Mi 481Mi 2% 1 4.9M 0% /System/Volumes/xarts
/dev/disk1s1 500Mi 5.8Mi 481Mi 2% 31 4.9M 0% /System/Volumes/iSCPreboot
/dev/disk1s3 500Mi 2.4Mi 481Mi 1% 91 4.9M 0% /System/Volumes/Hardware
/dev/disk2s5 460Gi 422Gi 4.5Gi 99% 10M 47M 18% /System/Volumes/Data
map auto_home 0Bi 0Bi 0Bi 100% 0 0 - /System/Volumes/Data/home
/dev/disk2s3 460Gi 2.0Gi 4.5Gi 31% 110 47M 0% /Volumes/Recovery
/dev/disk4s1 414Mi 412Mi 1.4Mi 100% 104 4.3G 0% /Volumes/Amazon Q
/dev/disk3s1 5.0Gi 948Mi 4.1Gi 19% 34 43M 0% /System/Volumes/Update/SFR/mnt1
/dev/disk2s1 460Gi 15Gi 4.5Gi 77% 426k 47M 1% /System/Volumes/Update/mnt1
cd /System/Volumes/Data
ls -al
cd ./private
ls -al
total 0
drwxr-xr-x 6 root wheel 192 6 12 10:00 .
drwxr-xr-x 22 root wheel 704 2 5 00:57 ..
drwxr-xr-x 77 root wheel 2464 6 11 21:23 etc
drwxr-xr-x 2 root wheel 64 2 5 00:57 tftpboot
drwxrwxrwt 45055 root wheel 1441760 6 13 07:01 tmp
drwxr-xr-x 34 root wheel 1088 3 11 10:48 var
发现目标:/System/Volumes/Data/private/tmp目录占用超大存储空间
进入tmp,发现tmp下的文件全都是go-build文件
出现大量go-build文件的原因:
文件用途
/System/Volumes/Data/private/tmp/go-buildXXXXXX
是Go语言编译过程中生成的临时构建目录,其中XXXXXX
为随机编号。这些目录包含以下内容:
大量出现的原因
大量此类目录的产生通常与以下场景相关:
频繁的Go工具链操作
每次运行go build
、go test
或go run
时,工具链会创建新的临时目录。默认行为不会自动清理历史构建目录。
并行编译
当多个Go进程同时运行时(如CI/CD流水线或IDE后台操作),每个进程会生成独立的构建目录。
测试缓存机制
go test
默认会保留测试二进制文件,用于加速后续测试运行。可通过-count=1
禁用缓存。
管理建议
手动清理
直接删除/private/tmp/go-build*
目录是安全的,但需注意:
- 确保没有正在运行的Go编译进程
- 需管理员权限(因在系统保护区域)
环境变量配置
设置GOTMPDIR
可更改临时目录位置:
export GOTMPDIR=$HOME/.gotmp
定期维护
macOS系统会自动清理/tmp
目录,但/private/tmp
可能需要手动维护。可配置cron任务定期清理。
IDE设置调整
使用Goland/VSCode等IDE时,调整以下设置:
- 减少后台检查频率
- 配置自定义
GOTMPDIR
- 禁用不必要的实时检测功能
注意:这些临时文件通常不会影响系统性能,但可能占用磁盘空间。长期不清理可能累积数GB文件。
数据清理方案
1. 不切换GOTMPDIR目录
/System/Volumes/Data/private/tmp目录下的文件全部是今天和昨天的,两天之内产生了200G+的数据量。无法利用上macOS系统3天自动清理/tmp
目录的能力
当前GO环境变量GOTMPDIR=“”
2. 直接删除/private/tmp/go-build*是安全的
➜ tmp rm -rf ./go-build*
zsh: argument list too long: rm
报错原因:表明你要删除的文件数量过多,超出了系统对命令行参数长度的限制。
解决方案:使用 find 命令逐条删除(推荐)
find . -name "go-build*" -exec rm -rf {} +
-name “go-build*”:匹配所有 go-build 开头的文件/目录。
-exec rm -rf {} +:对匹配到的文件执行删除操作。
+比 ; 更高效,能减少 fork 次数。
TIPS:用命令删除没有open后手动删除快(狗头🐶)