个人服务器用久了,磁盘里常常会留下很多旧东西:试用过的项目、已经不用的工具、构建缓存、日志文件、旧的依赖目录。它们单独看都不一定大,但时间一长,就会把空间慢慢占满。
清理这类服务器,重点不是马上删除文件,而是先弄清楚每一类文件还在不在用。只要顺序对,清理并不复杂;顺序不对,就可能删掉正在运行的服务,甚至把远程登录的通道也弄坏。
下面是一套比较稳妥的清理思路。它适合小型个人服务器,也适合长期用来跑脚本、网站或自托管服务的机器。
一、先看整体情况
清理前,先看磁盘还有多少空间:
df -hT /
这条命令可以看到根分区的总大小、已用空间和剩余空间。个人服务器一般分区不大,如果使用率已经很高,就要优先处理日志、缓存和旧项目。
接着看根目录下面哪些目录占得最多:
du -xhd1 / 2>/dev/null | sort -h
这里的 -x 表示只统计当前文件系统,能减少一些挂载目录带来的干扰。通常可以先关注几个地方:
- /var:常见的是日志、软件包缓存、Docker 数据。
- /home 或用户目录:常见的是项目、依赖、编辑器缓存。
- /usr:通常是系统软件和库文件,一般不建议随便手动删除。
- swap 文件:它占空间,但可能在内存不足时救急,不要随手删。
如果还想找单个特别大的文件,可以再查一次:
find / -xdev -type f -size +100M -printf "%s\t%p\n" 2>/dev/null | sort -n | tail
不过要注意,很多空间并不是被一个大文件占掉的,而是一堆小缓存、一堆依赖目录慢慢堆起来的。
二、先清可以再生成的东西
比较适合第一批清理的是日志和缓存。它们一般不是业务数据,删掉后系统还会继续运行。
例如 systemd 的日志可以先看占用:
journalctl --disk-usage
如果占用很大,可以限制日志保留大小:
journalctl --vacuum-size=200M
软件包缓存也可以清理:
apt clean
Docker 的构建缓存也常常会占不少空间,可以先查看:
docker system df
再清理构建缓存:
docker builder prune
这里不建议一开始就清 Docker 的所有东西。镜像、容器和卷要分开看,尤其是卷,里面可能保存着数据。构建缓存通常比较安全,卷和正在运行的容器要谨慎处理。
三、删除项目目录前,要确认它没有被使用
项目目录看起来像旧文件,不代表它真的没用。它可能被系统服务引用,也可能有进程正在里面运行,还可能被 Docker 容器挂载。
删除项目前,建议至少检查三件事:
systemctl list-units --type=service --all
ps auxww
docker ps -a
如果机器上用了 Docker,还要看容器有没有挂载本地目录:
docker inspect 容器名
一个项目目录能不能删,可以按这三个问题判断:
- 有没有服务的启动命令指向这个目录?
- 有没有正在运行的进程来自这个目录?
- 有没有容器把这个目录挂载进去?
只要有一个答案是“有”,就不要直接删。正确顺序应该是先停服务或容器,再删除目录。
比较稳妥的处理顺序是:
- 停掉相关服务或容器。
- 禁用开机自启动。
- 确认相关进程已经停止。
- 删除项目目录。
- 删除对应的 service 文件或启动脚本。
- 重新加载 systemd。
- 查看有没有失败的服务。
最后一步很容易被忽略。如果只删项目目录,不删服务文件,系统下次启动时还会尝试运行它,然后留下一个失败的服务。这样的残留不一定占空间,但会让后续排查变麻烦。
四、开发环境要尽量收敛
个人服务器经常会留下很多开发工具。比如一个 Python 项目用一套工具,另一个项目又装了新的包管理器;前端项目留下 node_modules;远程编辑器装了一堆扩展;旧语言工具链也一直没卸。
这些东西不一定都要保留。比较好的做法是先确定以后主要用什么,再把不用的清掉。
例如:
- Python 项目统一用一套工具管理。
- 前端和脚本需要 Node,就保留 Node。
- 已经不用的语言工具链可以卸载。
- 远程编辑器服务不用时可以删除,下次需要再装。
- 包缓存可以清理,真正需要时再重新下载。
清理开发工具时,还要检查登录脚本。很多安装器会往 .bashrc、.profile、.zshrc 里添加环境变量。工具目录已经删掉,但这些加载命令还在,就可能导致每次登录都报错。
五、远程登录和网站服务不要顺手关掉
清理磁盘时,不要把所有正在运行的服务都当成垃圾。远程登录服务、私有网络服务、网站服务、证书和转发相关服务,都要单独确认。
远程登录尤其重要。现在能连上服务器,不代表关掉服务以后还能连上。要调整远程登录,最好先确认还有另一条可用的连接方式。
网站服务也是一样。现在可能只是占着位置,但以后部署域名、自动申请证书、转发请求都可能会用到。如果后面还要继续部署网站,保留这类服务通常更省事。
安全加固可以单独做,比如只允许密钥登录、限制来源、关闭密码登录。不要在清理磁盘的时候顺手改太多安全配置,否则出问题时很难判断是哪一步造成的。
六、清理完要复查
清理结束后,不要只看剩余空间。还要确认系统状态是否正常:
df -hT /
systemctl --failed
ss -tulpn
docker system df
重点看这些结果:
- 该保留的服务还在运行。
- 已经不用的服务不会再开机启动。
- systemd 没有失败服务。
- 登录时没有残留报错。
- Docker 里没有明显的无用缓存。
- 后续部署网站或项目需要的基础环境还在。
这样清理之后,服务器不只是多了一些空间,也会更容易维护。下次部署项目时,你知道 Python 怎么管理,Node 还在不在,网站服务从哪里接,远程登录是否可靠。
清理个人服务器的关键不是删得越多越好,而是先分清哪些东西可以再生成,哪些东西还在提供服务。日志、缓存、旧构建产物可以先处理;项目目录、容器数据、远程登录和网站服务要慢一点。先看清楚,再动手删,服务器才会真的变干净。
Comments
No comments yet.