解決磁盤空間用完

問題發現

突然之間,發現我們的業務無法正常使用。檢查數據庫發現數據庫無法訪問,進一步檢查發現是因爲磁盤用滿了。
當我希望通過刪除一部分數據以釋放空間時,發現連刪除操作都不能執行。

>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層次示意圖

下面介紹一下思路:

  1. 通過擴展lvm邏輯磁盤提升可用空間恢復:

    
    #對數據磁盤增加20G可用空間。這20G空間是以前沒有分配的預留空間
    
    sudo lvresize -L +20G /dev/vg1/mongoData

    此時如果使用df命令查看時,會發現磁盤大小並沒有改變。還需要執行後面步驟

  2. 擴展 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)。並在磁盤掛載後重啓服務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章