修复 Arch Rollback Machine 磁盘占用
最近发现 downgrade 失效了,降级啥包都是直接错误退出。然后排查的时候发现是 Arch Rollback Machine 挂了,原因是——磁盘不足。
检查后发现 pm2 的日志有 7G,850天前的包有5000多个,365天内的包有10万余,磁盘已经被吃得满满当当。
日志好说,因为没啥特别有用的东西也不用拿来做分析,直接删掉就好。Felix 也把 850 天前的包全部删干净了。不过再次检查的时候 df -h
显示依旧是磁盘被吃满的,而 df -ih
显示 inode 占用没有问题。猫怀疑是有文件句柄还开着,但是把所有可能的进程杀掉之后依旧没有变化,排除。另外一个现象是文件删除进程完成后过了一段时间磁盘开始有少量空闲空间了,可能是磁盘缓存…?
于是靠着这空出来的 900M 多点的空间执行了几个操作:把有 HTTP flood 漏洞的 Node.js 0.10.16 升级到最新版 0.10.28,将包同步的 cronjob 降低到每天执行一次,压缩旧的 NGINX 日志。
以及用户一直要求的包归档功能,实际上是已经有了的,但是并没通过 NGINX 配置来实现(Pia!<(=o ‵-′)ノ☆猫) 所以准备把归档功能写到 API 服务端里。因为之前很有预见性的同步的时候把每天的包数据库按照 /year/month/day/repo
的结构保存起来(然后这部分的数据库文件就有 30G!),所以用户按照这个路径来请求包数据库的时候直接把对应的数据库文件丢给客户端,请求包文件的时候则直接从包目录里丢过去。这样的话其实从一个较早的时间结构最后请求一个较新的包文件也能拿到….不过这个不是问题,因为包归档给 pacman 用的话,有哪些包还是 pacman 要读数据库的。
包归档的 index 确实花了不少时间,目前的实现貌似也不很好,虽然貌似还挺快的,但是也挺吃硬盘的…而且一连好几次手残敲错了东西、少加了分隔符、加了冗余的配置变量…. 总之就是爆肝熬夜的效率超级差,4点多基本上没问题的时候已经能感觉到身体很不舒服了…
然后是一觉睡到第二天中午。觅食归来给 A.R.M 的 KVM 虚拟机硬盘增加了 100G。执行 resize2fs
的时候报错说已经达到最大空间,删掉 swap 之后依旧。接下来干了一件很作死的事情——把所有分区删掉了,然后按照原来的分区方案重建了新的分区。Reboot 之后 lsblk 是对了,但是 df -h 依旧是原来的分区。一叶说是 resize 没成功,要进 LiveCD 里面 resize2fs。不过我没镜像… 按照一叶的建议挂上 VNC 进 recovery 然后 fsck,再正常进系统执行 resize2fs
,成功。
回过神来的时候发现这种作死的行为我居然手都没抖一下 = = 几百G的数据呐…
晚上还要做字幕,再去休息下好了…