磁碟分析 本機的系統盤是C盤,操作系統是Windows 7 專業版,通過磁碟屬性可以看到C盤的已用空間是69.4G。 而我們運行自己編寫的腳本(腳本程式參考附錄,統計原理:計算目錄下各個文件的大小,然後相加,即為該目錄的大小;再將各個目錄占用空間相加,即為總的占用空間),可以發現,占用空間為59G。 ...
磁碟分析
本機的系統盤是C盤,操作系統是Windows 7 專業版,通過磁碟屬性可以看到C盤的已用空間是69.4G。
而我們運行自己編寫的腳本(腳本程式參考附錄,統計原理:計算目錄下各個文件的大小,然後相加,即為該目錄的大小;再將各個目錄占用空間相加,即為總的占用空間),可以發現,占用空間為59G。
電腦的“文件夾選項”中“顯示隱藏的文件、文件夾和驅動器”選項開關也是打開的。
因此,極有可能是存在某些系統級別的隱藏文件,腳本在統計磁碟占用空間時,沒有把這些文件統計上。我們使用磁碟修複分區工具DiskGenius進行分析,發現存在hiberfil.sys和pagefile.sys兩個隱藏文件。
其中,hiberfil.sys這個文件就是系統的休眠功能所占用的磁碟空間的文件,Windows預設休眠功能是處於打開狀態的,電腦處於休眠狀態時,記憶體中的所有內容將保存到硬碟。電腦在返回打開狀態之後,關閉電腦時,打開的所有程式和文檔將全部還原到桌面,參考鏈接1。
pagefile.sys這個文件是安裝過程中創建的虛擬記憶體頁面文件。如果電腦在較低的RAM下運行,並且立即需要更多的RAM,則Windows會用硬碟空間來模擬系統RAM,這就叫做虛擬記憶體,通常稱之為頁面文件,由於虛擬記憶體的設定,因此產生了pagefile.sys文件,參考鏈接2。
磁碟整理
由於系統空間緊張,因此我們可以關閉休眠,從而刪除hiberfil.sys這個文件,以及修改虛擬記憶體文件pagefile.sys的存放地址,存放在其他磁碟,從而避免將pagefile.sys占用系統磁碟空間。
1.刪除hiberfil.sys
刪除hiberfil.sys文件,主要是通過關閉休眠功能來實現,參考鏈接3。
在cmd視窗中敲入“powercfg -h off”命令後,即可關閉系統的休眠功能。
我們再用磁碟修複分區工具DiskGenius進行分析,發現hiberfil.sys已經不存在了。
2.修改pagefile.sys存放地址
修改pagefile.sys到其他空閑的磁碟中,參考鏈接4。
單擊“開始”-->右擊“電腦”-->“屬性”-->“高級系統設置”-->“高級”>性能欄里的“設置”-->“高級”>虛擬記憶體“更改”>取消“自動管理所有驅動器的分頁文件大小”。選擇C盤,點擊“無分頁文件”,點擊“設置”,再選擇D盤,點擊“系統管理的大小”,點擊“設置”,即可。
再用磁碟修複分區工具DiskGenius進行分析,發現pagefile.sys在D盤中出現。系統重新啟動後,C盤中已經不存在pagefile.sys文件了。
通過磁碟屬性可以看到C盤的已用空間是55.5G,比之前減少的13.9G。其中hiberfil.sys大小是5.9G,pagefile.sys大小是7.9G,共13.8G,也即我們上面兩步驟已經生效,減少了系統盤的占用空間。
3.大文件分析
我們通過運行自己編寫的腳本(腳本程式參考附錄,統計原理:計算各個文件的大小,並根據文件大小排序,將前20個最大的文件輸出)。
可以發現,紅框中的文件均為log文件。
這些日誌都是提供有關離線處理故障的詳細信息的處理日誌文件,微軟官方不建議用戶自己刪除系統文件。因此這些文件,後續再處理,參考鏈接5。
具體實現
統計各個目錄占用空間,並按照目錄占用空間降序輸出;統計文件占用空間,並按照文件占用空間降序輸出前20個文件。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
#統計指定目錄下各個文件夾的大小,方便觀察具體目錄的大小
def CountDirSize(srcDir):
dirSizeDict = {}
fileSizeDict = {}
for fileList in os.listdir(srcDir):
filePath = os.path.join(srcDir,fileList)
if os.path.isdir(filePath):
size = 0
for roots,dirs,files in os.walk(filePath):
for fileName in files:
fileNamePath = os.path.join(roots,fileName)
sizetemp = 0
try:
sizetemp = os.path.getsize(fileNamePath)
if sizetemp > 1024*1024:
fileSizeDict[fileNamePath] = sizetemp
except:
sizetemp = 0
size += sizetemp
dirSizeDict[fileList] = size
#按照從大到小的順序降序排列
dirSizeDict = sorted(dirSizeDict.items(),key = lambda dirSizeDict:dirSizeDict[1],reverse = True)
Sum = 0
print "各個目錄占用空間"
for ele in dirSizeDict:
temp = ele[1]/1024/1024
Sum += temp
#以單位為M,輸出大小
print ele[0] + ":" + str(temp) + " M"
#以單位為G,輸出大小
print "Total use:" + str(Sum / 1024) +" G"
print ""
print "前20個大文件占用空間"
fileSizeDict = sorted(fileSizeDict.items(),key = lambda fileSizeDict:fileSizeDict[1],reverse = True)
for ele in fileSizeDict[:20]:
print ele[0] + ":" +str(ele[1]/1024/1024) + " M"
if __name__ == "__main__":
srcDir = "c:\\"
CountDirSize(srcDir)