尤其是如果你的 Docker 服务很喜欢打日志的话。
最近发现传家宝机器的磁盘空间不够用了,是 Avail 列显示 0 的那种不够用。虽然这个机器满打满算也就 60GB 的硬盘空间,但是上面也并没有跑什么大型服务:现在它只是一台跑着静态博客的机器——以及还跑着一个万年没更新的 Gitea 实例。1700 多天的 uptime 本可以更长——阿里云擅自重启了一次这台机器,重置了之前已经有 1000 天的 uptime 记录。
ncdu 了一下 ~, 并没有用多少磁盘空间,只有个位数 GB. 这意味着至少挂在 ~ 下的 Gitea 卷并没有多大,而且之前 Maven 和 NPM Cache 都已经清理过了,~ 下面已经没有什么可以删除的了。
那么,或许是博客不断滚动更新的 Docker 镜像占用了太多空间?祭出 docker image prune -a. 但这条指令也只是释放了 1GB 多一点的空间。
或许问题出在别处。ncdu 了一下 /var, 看着一行行早已不再运行的服务滚过,心里也是五味杂陈。/var/lib/jenkins 下还陈列着过往的各个项目;/var/lib/mysql 还保存着各种实验留下的数据;这台机器上曾经发生过许多伟大的事情,不过那些都已经结束了。
突然,ncdu 的统计数字上跳了 20GB -- /var/lib/docker 下居然存在一个 20GB 大小的东西。仔细检查之后发现这个庞然大物是 Gitea 的 Docker 日志。这个玩意居然滚了 20GB 的日志出来!
好吧,之前写 docker-compose.yml 的时候没有给日志配置限额是我的问题:
services:
gitea:
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "3"
...
然后清理掉原先的日志文件:
sudo truncate -s 0 $(docker inspect --format='' gitea)
再重新部署一下容器应用更改:
docker compose up -d
服务器硬盘空间不够的问题目前解决了。但紧接着的问题就是:怎么能搞出 20G 的日志文件的?除了单纯的「运行时间太久」?
还记得之前我说过大模型正在吞吃互联网么?看来大模型的爬虫很喜欢在 Git 服务里面对着每个项目的 PR 和 Issue 页一顿猛输出呢。但问题在于:我已经有差不多一年没有往这个 Gitea 实例上推代码了;而且这上面所有项目都没有 PR 和 Issue. 无论再怎么排列组合查询参数,都不会有任何变化的。
但是这些爬虫很显然并不能理解这个问题。它们就会一直不断地重新排列组合各种查询参数来访问一个始终是空白的页面。它们也会孜孜不倦地用同样的参数反复请求同一个页面,就像一个一直在电脑前按 F5 期待有什么事情发生的人一样。
更头大的是,Gitea 默认是不带 robots.txt 来告诉爬虫不要反复做无谓的工作的——它甚至不带一些绝对必要的阻拦,比如别让搜索引擎爬取 /api/ 或者搜索路径下的东西。
考虑到 Google 也发现了我还有个 Gitea 实例,而且从后台数据来看它也爬取了一堆排列组合,我只能先告诉 Google 不要爬取那些奇怪的东西:
User-Agent: *
Disallow: /api
Disallow: /repo/search
Disallow: /explore/search
Disallow: /*/issues
Disallow: /*/issues/
Disallow: /*/pulls
Disallow: /*/pulls/
Disallow: /*/packages
Disallow: /*/packages/
Disallow: /*/projects
Disallow: /*/projects/
Disallow: /*/activity
Disallow: /*/activity/
Disallow: /*/blame
Disallow: /*/blame/
Allow: /
然后 WAF 安排掉 GPTBot 和 Amazonbot 这两个 UA. 至少现在它们两个还是会老老实实带上自己的大名的,之后就是看它们会不会伪装成普通浏览器继续骚扰了。

























