Skip to main content

Reclaiming disk space in Vista

Normally, I expect my drive to be rather bloated from all the iso files I keep around, but on occasion I try to clean things out. My latest attempt came from a desire to fit everything in under 80GB so I can buy an SSD (I was at 110GB). This laptop is running Vista x64 Business, SP2 with 3GB RAM.

WinDirStat
I always start by looking at the disk space usage. I previously used TreeSize, but now I use WinDirStat; free and I prefer it now. I ran it as Administrator (so the counts were as accurate as possible) to see where all the space was going.

I first used the Windows Disk Cleanup utility (though I skipped the Recycle Bin), but after that, most of the good information came from "Where's all my disk space going in Vista?".

Volume Shadow Copies
This ended up commanding the largest space, and you can only "see" it as an Administrator since the files are in c:\System Volume Information. This page has good information about it: "Adjusting the amount of disk space System Restore uses to hold restore points". I arbitrarily decided that 2GB is plenty of space for system restore points and other shadow copy needs, so that's what I set "maxsize" to for my "c" drive.

WinSxS
Previous to this, I was unfamiliar with the c:\windows\winsxs folder. After reading "What is the WINSXS directory in Windows 2008 and Windows Vista and why is it so large?", I respect it (and am not so stupid as to insist everything gets deleted as some have). I made an attempt to clear it out by using Microsoft's cleanup tool, compcln.exe. Clearing out all the uninstall information for updates/service-packs saved me about 5GB. I'm still around 12GB for the folder, but I'm not sure what programs can be uninstalled to reclaim the most space.

The Page File
WinDirStat alerted me to the fact that my page-file was larger than my hibernate-file. After double-checking a few places, Mark Russinovich's article saved me from forcing it to 500MB (or worse, turning it off). Basically, unless you always run the same programs in the same manner and know their combined peak/maximum commit charge, leave it at automatic. I like Pavel Lebedinsky's analogy in the comments on Mark's article:
In a sense, pagefiles are like stormwater ponds. Most of the time they are (almost) empty, but they have to be large enough in case a big storm happens.
Here's the TLDR part:
My page-file has surpassed 3GB because, at some point, the system needed to guarantee a commit charge of over 6GB of virtual memory. For example, right now, 2.7GB of physical RAM is marked as in-use, but the amount of virtual memory that has been committed to is 3.2GB (with the peak sitting at 3.5GB).

Installer (MSI)
There's also the (usually) smaller matter of c:\windows\installer since that can get significant too. I looked at "How to Safely Delete Orphaned Patches", but I didn't have any failed installs, so that didn't benefit me. I don't feel like crippling my ability to uninstall anything, so I've chosen to abstain from manually deleting anything in there.

Conclusion
I'm down to 80GB now, of which c:\windows is using ~29% (half of that is WinSxs). My stuff is ~32%, emptying the Recycle Bin will free up ~12% (~10GB), and Program Files (x86) is sitting at ~10%. I'd like to further reduce the OS, but I can live with it for now.

Comments

Popular posts from this blog

SqlBulkCopy and the "colid" error

I thought there was a page explaining this somewhere out there on the Internet, but I can't find it anymore. So here's what I re-discovered. When you try to insert the rows from a DataTable and the data in one of the columns of one of the rows is too big to fit into the destination column in the database, you get a SqlException with this error message: "Received an invalid column length from the bcp client for colid N." (Where "N" is a number.) It doesn't tell you which row, and it's a pain to figure out what column to look at. To determine what column it is referring to, you first need to get a listing of all columns in the table, listed in the order as they have been defined in the database. Next, you remove any columns in the list that are not represented in SqlBulkCopy.ColumnMappings (the order of the column mappings is irrelevant). The list that remains is what "colid" is referring to, with the first column corresponding to colid &

Live Migration between domains

For those of you like me who aren't experts at all things Active Directory (AD) and Hyper-V Live Migration (LM) permissions, it can be enough of a pain to LM a Virtual Machine (VM) between domains that you simply decide to take the VMs offline to affect the move. See, I only tolerate AD because it's required for LM'ing VMs; there isn't a choice. (It's also required for Windows Clusters, but that's a different topic.) But I figured it out. My back-story is that we setup a cluster using Windows 2012 r1 as the AD Domain Controller (DC) and Hyper-V Server 2012 r1 for the VM hosts. Then we decided we wanted to use r2 for the AD DC and Hyper-V hosts. Upgrading Hyper-V was easy. But I found that there's some unresolved Microsoft bug with Windows Clustering when upgrading the AD DC from Windows 2012 r1 to Windows 2012 r2--- clustering simply doesn't work correctly anymore . So we gave up and created a from-scratch Windows 2012 r2 AD DC then made a new cluster

Hyper-V and reserving RAM for the host/root/parent partition

After a long process, I finally have a real-world calculation for determining how much RAM to reserve for a Hyper-V host. The question/answer about it is here. But the summary is that Hyper-V loses RAM to the Nonpaged pool (and all of it is "untagged") in addition to the "standard" stuff that Microsoft has documented. Be aware that I write MB/GB here, when I actually mean MiB/GiB. I feel it will be more intuitive to see the notation that Windows (incorrectly) uses. Host Overhead 300 MB for the Hypervisor services 512 MB for the Host OS (This is a recommended amount; you have some wiggle-room with this.) [The amount of physical RAM available to the host OS] multiplied by 0.0425 (result in GB ) for the Nonpaged pool (Which means multiply that by 1024 to convert to "MB") Per-VM Overhead 24 MB for the VM 8 MB for each 1 GB of RAM allocated to the VM. Examples 12 GB RAM, 1 VM @2 GB, 1 VM @4 GB Host: 812 + (0.0425 * 12 * 1024) = 1,334.24 MB