問題發現
突然之間,發現我們的業務無法正常使用。檢查數據庫發現數據庫無法訪問,進一步檢查發現是因爲磁盤用滿了。
當我希望通過刪除一部分數據以釋放空間時,發現連刪除操作都不能執行。
>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)。並在磁盤掛載後重啓服務