问题发现
突然之间,发现我们的业务无法正常使用。检查数据库发现数据库无法访问,进一步检查发现是因为磁盘用满了。
当我希望通过删除一部分数据以释放空间时,发现连删除操作都不能执行。
>db.regCode.drop()
2017-02-17T13:03:13.820+0800 drop failed: { "ok" : 0, "errmsg" : "Can't take a write lock while out of disk space", "code" : 14031 } at src/mongo/shell/collection.js:598
解决
幸好我们当初的磁盘构建时使用了LVM进行管理,因此可以在不损失数据的情况下轻松扩展数据盘。而且当初volume group空间没有完全分配出去,得以有空间来进行扩展。
顺便用下图解释一下LVM的逻辑层次:
下面介绍一下思路:
通过扩展lvm逻辑磁盘提升可用空间恢复:
#对数据磁盘增加20G可用空间。这20G空间是以前没有分配的预留空间 sudo lvresize -L +20G /dev/vg1/mongoData
此时如果使用
df
命令查看时,会发现磁盘大小并没有改变。还需要执行后面步骤扩展 ext2, ext3 or ext4 文件系统的空间
#卸载磁盘 umount /dev/vg0/foo fsck -f /dev/vg0/foo resize2fs /dev/vg0/foo #恢复挂载磁盘 mount /dev/vg1/mongoData /var/lib/mongodb
现在可以使用df再查看一下空间,会看到已如预期的增加了空间。
注意
在卸载磁盘前需要先关闭磁盘上的所有文件,以及停止此数据磁盘相关的服务(我的服务器为mongoDB)。并在磁盘挂载后重启服务