Czyszczenie dysku C

Wielkimi krokami nadchodzi wiosna, a jak wiadomo jest to pora porządków. Dla administratora lubiącego mieć wszystko pod kontrolą jest to czas na wykonanie bardzo skomplikowanej operacji. Nazwijmy ją roboczo: „czyszczenie dysku C” 🙂 Słowem wstępu warto jeszcze zaznaczyć, że cała operacja związana z czyszczeniem dysku ma na celu:

 

  • zaoszczędzenie miejsca (co oczywiste);
  • zaoszczędzenie nerwów związanych z gorszą wydajnością (jakoś zawsze miałem wrażenie, że Windows posiadający zdawkowe MB wolnego miejsca na C, działa gorzej i mniej stabilnie 😉 );
  • zaoszczędzenie tzw. „waluty” (co jak się okazuje nie jest tak oczywiste).

Każdy z wyżej wymienionych powodów z osobna jest już wystarczający do podjęcia się ciężkiej pracy „sprzątania dysku systemowego”. Chciałbym jednak rozwinąć myśl aspektu ekonomicznego. W obecnych czasach na dyski systemowe w komputerach domowych przeznacza się dyski SSD, które są szybkie i wydajne (zachęcam do zapoznania się z opisem jak mierzyć wydajność dysków), jednak ich pojemności nie sięgają kilku TB jak w przypadku dysków tradycyjnych. Dyski SSD są także droższe od tradycyjnych dysków HDD, więc tym samym cena za 1GB jest dużo wyższa. Identycznie jest w przypadku systemów serwerowych, szczególnie, gdy korzystamy z drogich rozwiązań macierzowych. W tym przypadku oszczędności po 10GB na każdym z powiedzmy 200 serwerów przekładają się na naprawdę spore oszczędności w firmie.

Co zajmuje miejsce na dysku?

Odpowiedź na to pytanie jest kluczowe podczas planowania porządków. Musimy przecież wiedzieć co możemy usunąć, co należy przesunąć, co wyłączyć, a co zwyczajnie zamieść pod dywan 😉 . Oczywiście wszelakie porządki na dysku systemowym należy robić bardzo ostrożnie i podejść do nich „z głową”. Przede wszystkim polecam zastanowić się nad tym, dlaczego chcemy usunąć coś z dysku twardego. Inne bowiem będą przesłanki do robienia porządków (i zarazem inne możliwości) na systemach serwerowych, a zupełnie inne na desktopach. Czyszczenie dysku może też odmiennie wyglądać w różnych wersjach systemów Windows (przecież wiadomo, że w Linuksach nie ma dysku C 😉 ) więc inaczej podejdziemy do sprawy w systemach XP i 2003, a inaczej w Vista (ktoś tego używa???) 7, 8, 2008 i 2012.

Ustawienia i pliki systemowe.

Skoro zdecydowaliśmy się już na czyszczenie dysku systemowego, zachęcam do zapoznania się z wcześniejszymi wpisami dotyczącymi pliku wymiany (pagefile.sys) oraz zarządzania hibernacją i plikiem (hiberfil.sys) (czy ktoś korzysta z hibernacji??). Wspominaliśmy także o narzędziu delprof – służącym do kasowania profili użytkowników (ale nie oszukujmy się – główne zastosowanie tegoż narzędzia to głównie serwery terminalowe).
Poniżej przykład, jak kilka operacji opisanych powyżej (i poniżej) zaoszczędziło miejsce na moim desktopie:
Czyszczenie dysku - przed
Przed wykonaniem operacji czyszczenia dysku, posiadałem 23 GB wolnego miejsca, gdy pacjent po zabiegu pracował stabilnie wolne miejsce zwiększyło się do 68,5 GB!!! (w dalszej części artykułu opisałem konkretne sztuczki jakie pomogły osiągnąć mi ten rezultat)Czyszczenie dysku C - po
Taki wynik uważam za rewelacyjny – odzyskanie ponad 40 GB miejsca.
Co jednak, gdy powyższe zabiegi nie przyniosą zakładanego rezultatu, a upragnionych zwolnionych gigabajtów nie widać? Należy szukać dalej :). Ja korzystam z kilku prostych skryptów, które usuwają wszystkie pliki tymczasowe, usuwają zbędne logi systemowe lub aplikacji (zaglądaliście kiedyś do logów starszych niż 30dni?), przestarzałe pliki poprawek systemu, tymczasowe pliki w profilach użytkowników.
Nie byłbym sobą (czyli leniwym administratorem) gdybym do powyższych zadań nie użył jakiś skryptów.
Skrypt do usuwania plików instalacyjnych poprawek z systemów Windows XP i 2003, jest bardzo spartański, ale jakże skuteczny:
for /f "delims=" %%a in ('dir/ad/b %systemroot%\$NtUninstall*') do (
rd /s /q "%systemroot%\%%a"
)
del %Systemroot%%\KB*.log

Pojawia się jednak pytanie, czy takie pliki można usuwać? Moje doświadczenie uczy, że jeśli po instalacji poprawek system działa stabilnie, a my nie mamy zamiaru odinstalować poprawek pliki można śmiało skasować.
Skrypt do usuwania plików tymczasowych i czyszczenia folderu kosza w systemach XP i 2003 (może być także po drobnych zmianach stosowany w systemach 7, Vista i 2008 oraz nowszych) także nie jest zbyt zaawansowany, ale spełnia swoje zadanie:
del /q "%USERPROFILE%\Recent\*.*"
del /q "%ALLUSERSPROFILE%\Application Data\Microsoft\Dr Watson\user.dmp"
rd /s /q "%USERPROFILE%\NetHood\"
md "%USERPROFILE%\NetHood\"
rd /s /q "%windir%\Temp"
md "%windir%\Temp"
rd /s /q "%TEMP%"
md "%TEMP%"
RD /S /Q "C:\WINDOWS\Temp"
del "%userprofile%\Recent\*.*"
RD /S /Q "%userprofile%\Cookies\"
RD /S /Q "%userprofile%\Local Settings\History\"
RD /S /Q "%userprofile%\Local Settings\Temp\"
RD /S /Q "%userprofile%\Local Settings\Temporary Internet Files\"
mkdir "%userprofile%\Local Settings\Temp\"
mkdir "C:\WINDOWS\Temp"
del /S /Q c:\recycler\*.*

Wszystkie te pliki są totalnie zbędne i bezużyteczne.

Skrypt który usuwa logi IIS, jest już bardziej przemyślany (działa bez zarzutu na wszystkich systemach Windows) i jest napisany w moim ulubionym PowerShell’u:

$version = gwmi win32_operatingsystem | select version
$version = $version.version.substring(0,4)
$ErrorActionPreference = 'silentlycontinue'
if ($version -ge "6.0.")
 {
  [STRING]$dir = "c:\inetpub\logs\logfiles\"
 }
else
 {
  [STRING]$dir = $env:windir + "\system32\LogFiles\"
 }

 if ($dir)
{
 Set-Location $dir
 foreach ($LogDir in Get-ChildItem $dir | Where {$_.PsIsContainer -and $_.Name -match "^W3SVC"})
 {
  [STRING]$wrkDir =  $dir + $LogDir + "\"
  Set-Location $wrkDir
  Get-ChildItem $wrkDir | where {$_.lastWriteTime -lt (Get-Date).AddDays(-14)} | Remove-Item -Force
 }
}

Oczywiście powyższy skrypcik znajduje zastosowanie tylko na systemach na których pracuje IIS. Czy czyszczenie logów jest bezpieczne? Odpowiedzcie sobie na inne pytanie: czy zdarza wam się czytać te logi? 😉
Skrypt do czyszczenia profili użytkowników z plików tymczasowych:

$version = gwmi win32_operatingsystem | select version
$version = $version.version.substring(0,4)
$ErrorActionPreference = "silentlycontinue"
if ($version -ge "6.0.")
{
 [STRING]$ds = "C:\Users\"
}
else
 {
  [STRING]$ds = "C:\Documents and Settings\"
 }
sl $ds
foreach ($directory in get-childitem $ds -Force | where {$_.PsIsContainer})
{
 $dir =  $ds + $directory + "\Local Settings\Temporary Internet Files\Content.IE5"
 get-childitem $dir -Force | where {$_.PsIsContainer} | Remove-Item -Force -Recurse
}
$WinTempInet = $env:windir + '\temp\Temporary Internet Files\Content.IE5'
if ($WinTempInet)
{
 sl $WinTempInet
 foreach ($WinTempInetDir in get-childitem $WinTempInet -Force | where {$_.PsIsContainer})
 {
  get-childitem $WinTempInetDir -Force | where {$_.PsIsContainer} | Remove-Item -Force -Recurse
 }
}

Bez komentarza 😉
Powyższy zestaw skryptów jest już bardzo dobrym orężem podczas walki o wolne miejsce na dysku systemowym. Jeśli chodzi o domowe desktopy (i także te używane w firmie) można także przejrzeć listę zainstalowanych aplikacji. Być może są na liście takie, których nie używamy, a które można odinstalować / usunąć / przesunąć. Na domowym sprzęcie odzyskałem sporo miejsca przesuwając domyślne miejsca instalacji gier z platformy Steam 🙂 (w końcu nie samym skryptowaniem człowiek żyje).

Czyszczenie dysku PRO 🙂

Jeśli dotarliście do tego miejsca, być może spodobały Wam się powyższe metody, ale możliwe, że nakręciliście się na większe wiosenne porządki.
Nie jest rzeczą nową, że systemy Windows lubią się rozrastać na dysku. Warto więc wziąć byka za rogi i sprawdzić choćby dwa ustawienia systemowe. Pierwszy z nich to dziennik transakcji systemu plików. Mechanizm ten wykorzystywany jest do „odzyskiwania systemu plików systemu Windows w przypadku wystąpienia błędu pliku”. Jego wyczyszczenie jest wskazane w przypadkach gdy w widoku dysków widzimy inną liczbę zajętych GB a inną w jakimś niezależnym programie do sprawdzania zajętości dysków (np. TreeSize). Drugi przypadek jest opisany na stronach Microsoft i jest związany z problemami z Windows Update

fsutil resource setautoreset true C:\

Polecenie to wyczyści dziennik transakcji systemu plików podczas następnego uruchomienia komputera.
Drugim równie interesującym sposobem jest umiejętne zarządzanie usługą kopiowania woluminów w tle (znana jako VSS lub Shadow Copy). Sprawdzić jakie obecnie zasoby zużywa VSS odbywa się poleceniem:

vssadmin list shadowstorage

A wynik działania będzie wyglądał następująco:
Czyszczenie dysku - VSS
Jeśli uznamy, że Shadow Copy wykorzystuje zbyt wiele miejsca na naszym dysku możemy pliki usługi zmniejszyć lub przenieść na inny dysk.

vssadmin Resize ShadowStorage /For=C: /On=D: /MaxSize=1GB

Powyższe polecenie zarezerwuje na pliki usługi VSS 1 GB (opcja /MaxSize) miejsca na dysku D: (/On=D:), a z dobrodziejstw Shadow Copy będziemy mogli skorzystać dla plików umieszczonych na dysku C: (/For=C:)

vssadmin Resize ShadowStorage /For=C: /On=C: /MaxSize=15%

Jak wyżej z tą różnicą, że zajęliśmy sobie właśnie 15% na dysku C: pod pliki usługi VSS.
Możemy także skasować pliki usługi poleceniem:

vssadmin delete shadows /all

Mam nadzieje, że ten wyczerpujący opis czyszczenia dysku systemowego przyda wam się w domach i / lub pracy. Jeśli macie jakieś pytania, lub znacie inne sposoby na oszczędzanie miejsca i czyszczenie dysku C: zachęcam do komentowania.

Piotr Berent

Piotr Berent od 2002 w pocie czoła pracujący w środowisku IT, obecnie freelancer - Inżynier Systemowy. Entuzjasta wirtualizacji, automatyzacji i rozwiązań opartych o narzędzia open-source.

Przeczytaj także...

9 komentarzy

  1. flecht pisze:

    Do obrazowania, co i w jakich folderach zajmuje mi miejsce na dysku, używam linuksowego Filelighta lub windowsowego Scannera. Ze względu na jakże oryginalną nazwę tego drugiego, dorzucam linka do strony:
    http://www.steffengerlach.de/freeware/index.html
    Lepszego sposobu prezentowania tego typu danych póki co nie spotkałem i ciekaw jestem waszych opinii.

  2. Dareios pisze:

    Odpaliłeś program i odzyskało ci 40 GB, tylko szkoda żeś nie napisał co w tym programie zrobiłeś. Typowy admin dla którego wszystko jest oczywiste…

  3. kaszana pisze:

    „Dyski SSD są także droższe od dysków SATA” ????
    SATA – interfejs
    SSD – kategoria dysków twardych opierająca się na wykorzystaniu pamięci flash

    „spece.it” – ….

  4. kazkoliber pisze:

    Jak użyć tego skryptu? Tym Treesizerem?

  5. Paweł Piotrowski pisze:

    Dysk 240GB , windows pokazuje że jest zapełniony w niemal 100% ale gdy zliczam pliki w TotalCMD czy innymi programami (spacesnifer, scn2 itp.) wszystkie pokazują wartość około 40GB. Próbowałem komend fsutil resource setautoreset true C: oraz tej drugiej, ale bez rezultatu.

Dodaj komentarz