具體需求:
2、 需要統計已刪除檔案但未釋放空間的大小(可參考lsof命令)。
3、 根據1和2最終分析結果拿出佔比較大的服務列表(針對服務列表建議支援白名單),針對服務列表對已在擺明單內的服務進行重啟釋放儲存空間,未在白名單內的可進行列表列印。
#!/usr/bin/python#coding:utf-8
import os
import subprocess
import types
#檔案佔比
data_top10 = "du -sk /* |sort -n -t ' ' -k 1"
#已刪除未釋放
data_used = "lsof |grep delete|awk -f ' ' ''"
#目前佔比
data_now = " df -h |grep /dev/vda1 |awk -f ' ' ''|awk -f '%' ''"
def subprocess_caller(cmd):
try:
p = subprocess.popen(cmd, stdout = subprocess.pipe, stderr = subprocess.pipe, shell = true)
output, error = p.communicate()
except oserror, e:
print 'subproceee_caller function: execute command failed, message is %s' % e
return dict(output = , error = , code = 1)
else:
return dict(output = output, error = error, code = 0)
gele = {}
used = {}
dic = {}
#lsof檢視沒有釋放的檔案
def lsof_look():
#獲得字串將其轉換成列表
temp2 =
str2 = ''
for memeda in used['output']:
if memeda !=' ' and memeda !='\n':
str2 += memeda
else:
str2 = ''
#print len(temp2)
#lsof的列表,列表的拆分
list3 =
list4 =
for i in range(len(temp2)):
if i%2 == 0:
else:
#為了解決最後乙個不能匹配的問題
#解決統計服務與大小的問題
list5 =
summ = 0
for i in range(len(list3)-1):
if list3[i] == list3[i+1]:
summ += float(list4[i])/1024
#print summ
else:
summ += float(list4[i])/1024
if dic.has_key(list3[i]):
dic[list3[i]] += summ
else:
dic[list3[i]] = summ
summ = 0
for key in dic:
print '服務:'+key,'所佔的空間為(kb):',(dic[key])
#分析十個使用量最高的目錄與檔案情況
def filerate():
#將字串轉成列表
temp =
str = ''
f_dict = {}
for memeda in gele['output']:
if memeda != '\t' and memeda != '\n':
str += memeda
else:
str = ''
#將兩個列表合成字典
list1=
list2=
for i in range(len(temp)):
if i % 2 == 0:
# if "k" in temp[i]:
temp[i]=float(temp[i])
# elif 'm' in temp[i]:
#temp[i]=float(temp[i].strip('m'))*1024
# else:
#temp[i]=float(temp[i].strip('g'))*1024*1024
else:
f_dict = dict(zip(list2,list1))
sss = 0
for key in f_dict:
t = f_dict[key]/41943040.0*100
sss += t
print '目錄:'+key,'所佔實際百分比為:%.2f%%' % (t)
print '***************==總佔實際比為:%.2f%%'%(sss)
#print sss
return sss
if __name__ == '__main__':
# 各類檔案的使用大小情況
gele = subprocess_caller(data_top10)
#print gele["output"]
used = subprocess_caller(data_used)
#print used['output']
#df -h 所顯示的磁碟佔比,這個不是正常的,將其轉化為70%的狀態
now = subprocess_caller(data_now)
now_dick_used = float(now['output'])*0.7
#print now_dick_used
k = filerate()
print("\n")
lsof_look()
print("\n")
#不可刪除的服務名單
immobilization_list = ['mylala','apache']
flag = 0
#獲取服務字典裡面的鍵值
key = dic.keys()
if kfor the_key in key:
if the_key in immobilization_list:
continue
else:
#cmd = "killall " + the_key
#os.system(cmd)
print "\033[1;35m已經殺死該服務:\033[0m",the_key
flag = 1
if flag == 0:
print "\033[1;35m系統狀態正常!\033[0m"
Linux刪除檔案空間未釋放
郵件保障 u01目錄剩餘空間不足5 在linux或者unix系統中,通過rm或者檔案管理器刪除檔案將會從檔案系統的目錄結構上解除鏈結 unlink 然而如果檔案是被 開啟的 有乙個程序正在使用 那麼程序將仍然可以讀取該檔案,磁碟空間也一直被占用。檢視被開啟的已刪除檔案 驗證該檔案是否存在 正常來說直...
筆記 Linux檔案刪除空間未釋放
一次檢查過程中,使用df h 檢查磁碟使用,發現 var目錄空間使用100 通過檢查,發現是檔案maillog 20200723導致,故進行了刪除操作 但是發現刪除檔案後,使用df h 發現空間仍然占用100 檢查刪除檔案的程序 lsof grep deleted rsyslogd 1873 roo...
linux檔案刪除空間未釋放是為什麼
今天在生產環境上某個應用去kafka消費資料一直報錯,日誌資料瘋狂增加,一下子就把磁碟空間佔滿了,本人當時沒想太多直接rm core.log一波,然後發現磁碟空間並未釋放!原因很顯然就是忽略了有應用一直在往其中寫資料,直接刪除無法釋放磁碟空間。遇到這種問題,依據情況不同解決辦法可以不一樣。方法一 首...