组内使用的jenkins自动构建失败,查看日志提示“java.io.IOException: 设备上没有空间”,搜索前辈经验得知是虚拟机空间不足导致的。在扩容和删除无用文件之间选择了后者。
通过本次问题学到的linux命令知识df -h #查看磁盘使用情况
du -sh #查看当前文件夹总大小
du -h --max-depth=1 | sort -hr #将当前文件夹下的内容(文件夹、文件)按从大到小的顺序列出
说明:du命令的-h参数用于将大小按b, mb, gb这样容易看的形式打印出来;—max-depth参数设置展开层数,默认会展开到最深。
ls | grep -v keep | xargs rm #删除keep文件之外的所有文件
说明: ls先得到当前的所有文件和文件夹的名字, grep -v keep,进行grep正则匹配查找keep,-v参数决定了结果为匹配之外的结果,也就是的到了keep之外的所有文件名,然后 xargs用于从 标准输入获得参数 并且传递给后面的命令,这里使用的命令是 rm,然后由rm删除前面选择的文件。
处理过程grep -E “正则1|正则2|正则3” #grep命令匹配多个关键字
到根目录下开始“du -h --max-depth=1 | sort -hr”查找无用文件聚集区,因为这个虚拟机主要就是用来跑jenkins的,所以我初步判断应该就是jenkins的构建历史占据最大空间。但并不是我搭建的jenkins,所以不清楚相关的构建历史文件放在哪,就只好一层层找一下,最终确定我这台机器的jenkins构建历史路径是“/opt/jenkins/jobs/”。进入该目录可看到jenkins的各项构建任务,在构建任务的builds文件夹下,存放着每次构建的历史。我需要保留比较新的几次,删除其他构建,于是用到了“ls | grep -v keep | xargs rm”命令,这不是linux反选删除的唯一方式,但我采用的是这一种。
参考博客 Jenkins 无法使用 No space left on device 分析解决方案 https://blog.csdn.net/jjc120074203/article/details/93201799centos磁盘文件大小查看及排序 https://blog.csdn.net/kucoll/article/details/120078387linux shell下除了某个文件外的其他文件全部删除的命令 https://blog.csdn.net/taiyang1987912/article/details/41488395grep 满足 或 排除多个关键字 https://blog.csdn.net/allen_a/article/details/78623422实际不止以上四篇,但要解决本次的问题以上四篇就够了,其他参考的都是一些细节知识盲点,就不列出了。