zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    HTTP 错误 404.2
    SQL Server 2008 R2如何开启数据库的远程连接(转)
    CSS中font-family:中文字体对应的英文名称
    15/18位身份证号码正则表达式(详细版)
    C#获取系统时间及时间格式
    C#正则表达式判断输入日期格式是否正确
    Linux查看机器负载
    模拟HTTP请求超时时间设置
    MySQL show命令的用法
    innodb事务隔离级别
  • 原文地址:https://www.cnblogs.com/zhbzz2007/p/5407314.html
Copyright © 2011-2022 走看看