Linux學習之CentOS(十七)-----釋放 Linux 系統預留的硬盤空間 與Linux磁盤空間被未知資源耗盡 (轉)


釋放 Linux 系統預留的硬盤空間 

大多數文件系統都會保留一部分空間留作緊急情況時用(比如硬盤空間滿了),這樣能保證有些關鍵應用(比如數據庫)在硬盤滿的時候有點余地,不致於馬上就 crash,給監控系統和管理員一點時間去察覺。不過有時候這部分預留的硬盤空間不用的話有點浪費。如何釋放這部分系統預留的空間呢?

在 Linux ext2/ext3/ext4 文件系統上通常默認預留5%的硬盤空間,如果硬盤是 4TB 的話就意味着有 200GB 的空間就這樣浪費了,我們可以通過 tune2fs 來改變5%的默認設置,比如只預留1%的空間。可不可以設成0%呢?當然可以,但是不推薦。

 

查看當前硬盤空間情況:

復制代碼
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_cloud22-lv_root
                       32G  1.1G   30G   4% /
tmpfs                  24G     0   24G   0% /dev/shm
/dev/sda1             485M   68M  392M  15% /boot
/dev/mapper/vg_cloud22-lv_home
                      3.2G   70M  2.9G   3% /home
/dev/sdd1            1008G  161G  797G  17% /var/cloud
復制代碼

 

調整 /dev/sdd1,只預留1%的空間:

# tune2fs -m 1 /dev/sdd1
tune2fs 1.41.12 (17-May-2010)
Setting reserved blocks percentage to 1% (2684381 blocks)

 

調整后查看釋放后的硬盤空間,發現多出了 838-797=41GB 的空間:

復制代碼
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_cloud22-lv_root
                       32G  1.1G   30G   4% /
tmpfs                  24G     0   24G   0% /dev/shm
/dev/sda1             485M   68M  392M  15% /boot
/dev/mapper/vg_cloud22-lv_home
                      3.2G   70M  2.9G   3% /home
/dev/sdd1            1008G  161G  838G  17% /var/cloud
復制代碼

 

轉自 http://www.vpsee.com/2012/09/release-linux-system-disk-space-using-tune2fs/

 

Linux磁盤空間被未知資源耗盡

在linux中,當我們使用rm在linux上刪除了大文件,但是如果有進程打開了這個大文件,卻沒有關閉這個文件的句柄,那么linux內核還是不會釋放這個文件的磁盤空間,最后造成磁盤空間占用100%,整個系統無法正常運行。這種情況下,通過df和du命令查找的磁盤空間,兩者是無法匹配的,可能df顯示磁盤100%,而du查找目錄的磁盤容量占用卻很小。

遇到這種情況,基本可以斷定是某些大文件被某些程序占用了,並且這些大文件已經被刪除了,但是對應的文件句柄沒有被某些程序關閉,造成內核無法回收這些文件占用的空間。

那么,如何查找那些文件被某些程序占用呢,命令如下

lsof -n | grep deleted
COMMAND     PID      USER   FD      TYPE             DEVICE        SIZE       NODE NAME
dd        31708      higkoo    1w      REG                8,2 5523705856     429590 /data/filetest (deleted)

命令打lsof -n | grep deleted印出所有針對已刪除文件的讀寫操作,這類操作是無效的,也正是磁盤空間莫名消失的根本原因

備注:本人遇到的場景是同事刪除了mysql的表,但是是在shell上執行rm表的文件,而不是通過drop table之類的命令去刪除表的,於是mysql會一直占用這些表文件的句柄,最后造成磁盤空間100%,這種情況下,也不用重啟mysql,只要進入mysql客戶端執行flush tables就行了

 參考資料 http://hi.baidu.com/higkoo/item/6a478917d1a819debf9042f1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM