IDC裏的一臺服務器的/分區使用率爆滿了!已達到100%!經查看發現有個文件過大(80G),因而在跟有關同事確認後rm -f果斷刪除該文件。可是發現刪除該文件後,/分區的磁盤空間壓根沒有釋放出來,使用率仍是100%!這是爲何呢??node
[root@linux-node1 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 58G 7.8G 47G 100% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/vda1 190M 72M 108M 40% /boot
在Linux系統中,經過rm或者文件管理器刪除文件,只是將它會從文件系統的目錄結構上解除連接(unlink),也就是說只是刪除了文件和系統目錄結構的連接;若是文件在刪除時是被打開的(有一個進程正在使用該文件,文件被進程鎖定或者有進程一直在向這個文件寫數據等)狀態,那麼進程將仍然能夠讀取該文件,也就是說沒有刪除掉文件在讀取的狀態,因此磁盤空間也就會一直被佔用。 linux
一個文件在文件系統中的存放分爲兩個部分:數據部分和指針部分,指針位於文件系統的meta-data中,數據被刪除後,這個指針就從meta-data中清除了,而數據部分存儲在磁盤中,數據對應的指針從meta-data中清除後,文件數據部分佔用的空間就能夠被覆蓋並寫入新的內容,之因此出現刪除文件後,空間還沒釋放,就是由於有進程還在一直向這個文件寫入內容,致使雖然刪除了文件,但文件對應的指針部分因爲進程鎖定,並未從meta-data中清除,而因爲指針並未被刪除,那麼系統內核就認爲文件並未被刪除,所以經過df命令查詢空間並未釋放也就不足爲奇了。數據庫
在線清空文件(好比/home/wangshibo.log)的方式:安全
a)# echo " " > /home/wangshibo.log b)# cat /dev/null > /home/wangshibo.log c)# > /home/wangshibo.log
還有一種磁盤空間使用問題的現象:明明使用df -h命令查看磁盤空間使用率不算高,還有不少空餘空間,可是建立文件或寫入數據時一直報錯磁盤寫滿:" no space left on device"!bash
通常這種問題都是因爲分區目錄下deleted刪除後的資源空間沒有真正釋放出來致使的, 具體處理流程以下:服務器
大多數文件系統都會保留一部分空間留做緊急狀況時用(好比硬盤空間滿了),這樣能保證有些關鍵應用(好比數據庫)在硬盤滿的時候有點餘地,不致於立刻就 crash,給監控系統和管理員一點時間去察覺。不過有時候這部分預留的硬盤空間不用的話有點浪費。app
在Linux系統中,ext二、ext三、ext4文件系統上一般會默認預留5%的磁盤空間,好比磁盤若是是2TB,這就意味着有100GB的空間會被預留下來,這樣的話會不會顯得有點浪費了。能夠經過"tune2fs"命令來改變5%的默認設置,好比只預留2%的空間。可是不建議設成0%,現實環境中這樣作不安全。工具
[root@ss-server ~]# df -T Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/vda1 ext4 41151808 4962148 34076228 13% / devtmpfs devtmpfs 1931468 0 1931468 0% /dev tmpfs tmpfs 1941204 0 1941204 0% /dev/shm tmpfs tmpfs 1941204 652 1940552 1% /run tmpfs tmpfs 1941204 0 1941204 0% /sys/fs/cgroup tmpfs tmpfs 388244 0 388244 0% /run/user/0 [root@ss-server ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 4.8G 33G 13% / devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 620K 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup tmpfs 380M 0 380M 0% /run/user/0
好比上面"/"分區是ext4文件系統,默認系統預留了5%也就是2G的空間。
如今能夠經過"tune2fs"命令將系統預留空間改成2%。學習
[root@ss-server ~]# tune2fs -m 2 /dev/vda1 tune2fs 1.42.9 (28-Dec-2013) Setting reserved blocks percentage to 2% (209704 blocks)
執行後,發現"/"分區騰出了1G的空間,這時系統預留空間也就是2%了。spa
[root@ss-server ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 4.8G 34G 13% / devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 620K 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup tmpfs 380M 0 380M 0% /run/user/0
注意:
Linux下只有ext二、ext三、ext4文件系統時,系統纔會默認預留5%的磁盤空間。
若是文件系統是xfs、tmpfs、devtmpfs、overlay等,則系統默認不會預留磁盤空間。
有段時間沒跟你們分享資源福利了,看了下本身的資料夾,整理了一些我認爲比較好的Python學習資料了。相信這套資料能夠對你進階高級工程師有幫助
學習工具
大廠實戰手冊
自學視頻(部分)
【資料免費領取方式】:點這裏:2020Python高薪實戰學習大合集