某日碰上某企业的服务器i间歇性崩溃,一番检查后发现/
分区才30GB [1],而且已经被撑满,最后连tab
键的命令提示都在报错。进一步定位问题后发现/var/log/
占了25GB [2]。
既然是log,又没有什么关键信息,那就想办法把其他分区挂载到/var/log/
上去吧。但是很可惜,所有物理分区和逻辑分区都已被挂载并且已经被使用,又没有其他主机可以用来挂载NFS,怎么办?好在其他几个分区都相对较大(几百GB),而且都很空。于是就想到了这招:虚拟分区。
做法很简单,第一步是在某个比较空的分区上新建一个大文件
fallocate -l 100G /data/log.img
这会在/data/
下创建一个100GB的文件log.img
。这条命令瞬间就完成了,这是因为它只是申领了一块硬盘空间,并没有去格式化它,也没有把它的内容清零。
第二步是格式化它
mkfs -t ext4 /data/log.img
第三步,停掉那些会在/var/log/
里写日志的服务(这一步问题比较大,我不知道怎么做到零宕机转移日志),然后把那些日志该删的删,该备份的备份。
第四步,把刚刚创建出来的/data/log.img
挂载到/var/log
上
mount /data/log.img /var/log
最后一步,让这个改动永久化。先找到/data/log.img
的UUID
blkid /data/log.img
然后在/etc/fstab
里加一行
UUID=xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx /var/log ext4 defaults 0 2
完工。
[1] df -h
[2] du -sh /var/log/