Windows系統盤占用空間分析


磁盤分析

本機的系統盤是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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM