*问题
我们在生产中有时候会遇到磁盘空间满了,造成操作系统崩溃情况,这因为操作系统后台有很多程序在不停的工作,比如说日志就不停的在写。我们的通常做法是,临时清空一些没有用的文件数据来减轻系统的压力,如果这个时候又有一些程序正在访问占用这个文件,我们该如何处理呢?
试验模拟
第一次实验:无程序占用磁盘空间的情况下清理磁盘空间
# df -h |
df -h命令可以查看实验环境的磁盘空间情况
如上图用挂载到/boot文件夹下的磁盘a的分区1来做实验,磁盘总空间大小为969M,已经使用35M,可用885M,使用率为4%,现在把磁盘空间使用率提高至80%。
使用dd命令从设备文件/dev下写0到/boot/文件夹下的新建的test文件里,大小为700M。
#dd if=/dev/zero of=/boot/test bs=1M count=700 |
从图上可以看出,/boot分区的使用率升至80%。
现在使用rm命令删除test文件
# rm -rf /boot/test |
从图上可以看出,磁盘空间的使用率降低到4%,说明用rm命令成功的删除了test文件,并释放了磁盘空间。
第二次实验:有应用程序占用磁盘空间的情况下释放磁盘空间
重复上面的命令,使/boot分区的使用率提高至80%,然后在同一操作系统上另外开一终端,使用vim命令编辑test文件,不要退出。
注意:进入编辑模式不要退出
切换终端终端,执行命令rm删除test文件
# rm -rf /boot/test #df -h |
从显示的结果看出,执行rm命令后,空间使用率并没降下来,还是80%,接着我们可以执行 ls 命令查看 test文件 是否存在。
从图上可以看到,boot目录下没有test文件,说明执行 rm 命令只是删除了test文件,但是没有释放磁盘空间。删除失败,说明在有程序占用磁盘空间的情况,只是执行 rm 命令可以删除文件夹,但是不能够释放磁盘空间。
第三次实验:释放被程序占用的磁盘空间
退出实验二中的vim编辑,执行 rm 命令删除test文件,重复上面的步骤,把/boot分区的磁盘空间使用率升至80%,同样另开一个终端使用vim命令编辑/boot文件夹下的test文件不要退出。注意:不要执行rm命令
分析:实验二发现有程序占用了test文件,从而出现不能用 rm 删除文件释放磁盘空间的情况,同时在真实环境中,很可能有多个程序占用要清里的磁盘空间,如果采用杀死进程的方法管理程序,虽然可行,但是效率较低,不能达到快速释放磁盘空间的目的。
这里可以使用lsof命令查看谁正在占用磁盘空间。
# lsof /boot/test |
从图上可以清楚的看出,vim正在占用test文件。
分析:我们既不能用直接删除test文件方法来释放磁盘空间,关闭程序的方法也达不到我们需求,那么我们该怎么办呢?
其实我们可以用覆盖test文件内容的方法来释放磁盘空间。
继续上面的操作,我们在/boot分区磁盘空间使用率在80%,并且不退出vim编辑的情况下,执行 > /boot/test 命令
> /boot/test 命令的意思是大于括号前面的内容覆盖后面的文件内容,大于括号前面没有内容,就为空,覆盖后,文件即为空。
# > /boot/test |
从图上看出,/boot分区下的磁盘空间使用率在不退出vim编辑模式的状态下很快又变回了4%,说明释放磁盘空间成功,实验三成功。
在/boot文件夹下执行 ll 命令
从图上可以看到test文件还在,不过文件内容大小已经为0,说明覆盖成功。再执行 rm 命令删除test文件即可。
总结:实验一中,在没有程序占用文件或者磁盘空间的情况下,直接 执行rm -rf 命令删除文件,即可释放磁盘空间。实验二中,有程序占用磁盘空间,用 rm -rf 可以删除文件,但是不能释放磁盘空间,除非关闭程序。实验三中,在程序占用磁盘空间的情况下,用覆盖的方法可以释放磁盘空间,达到强行释放被程序占用磁盘空间的目的!
最后,感谢认真用心的自己~~微笑