乙個監控未釋放已刪除檔案空間的指令碼

2022-05-26 01:06:10 字數 3478 閱讀 1892

具體需求:

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一波,然後發現磁碟空間並未釋放!原因很顯然就是忽略了有應用一直在往其中寫資料,直接刪除無法釋放磁碟空間。遇到這種問題,依據情況不同解決辦法可以不一樣。方法一 首...