釋放 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

