Skip Ribbon Commands
Skip to main content

Ondrej Sevecek's Blog

:

Engineering and troubleshooting by Directory Master!
Ondrej Sevecek's Blog > Posts > Zmenšení velikost imidže VHD base disku po instalaci aktualizací
listopad 27
Zmenšení velikost imidže VHD base disku po instalaci aktualizací

Právě dělám na Hyper-V base disku imidže Windows 2012 R2, nainstaloval jsem si to rovnou z ISO s "Update", tedy April 2014 Rollup - což je mimochodem ve skutečnosti SP1, dokonce se to download URL tak jmenuje, nechápu, proč to rovnou nepojmenují Service Pack :-). No dobrá, čístá instalace cca 8 GB. Aplikuju November 2014 Rollup Update a December 2014 Cummulative Update (to není rollup, je to jenom cummulative, takže se musí jenom přidat k poslednímu rollupu z listopadu) a ještě nějaké ADFS aktualizace a objem VHD vyleze na 14 GB. Takže to chtělo vyčistit a odstranit ty přebytečné aktualizace, které už nikdy nebudu odinstalovávat.

Pro zajímavost jsem se podíval na tabulku gwmi Win32_QuickFixEngineering, která zachycuje aktualizace, které mám nainstalované. Zdá se, že to odpovídá. Tři kousky z té listopadové aktualizace a jedna prosincová.

Adresář C:\Windows\SoftwareDistribution měl před čištěním 857 MB a adresář C:\Windows\WinSxS měl 9.09 GB. Uvidíme jak to dopadne. Budu muset vyčistit WinSxS adresář, keš Windows Update klienta (wuauclt, wuauserv) v adresáři SoftwareDistribution a potom ještě zmenšit ten VHD soubor z venku.

Čištění WinSxS adresáře

Na čištění WinSxS jsem použil tedy následující metodu - http://blogs.technet.com/b/askpfeplat/archive/2015/02/09/how-to-reduce-the-size-of-the-winsxs-directory-and-free-up-disk-space-on-windows-server-2012-r2-and-windows-8-1-or-do-we-even-need-to.aspx

Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase

Podstatný je ten parametr ResetBase, který to čištění provede okamžitě a bez diskuze. Výsledkem bylo zmenšení WinSxS adresáře z původních 9.09 GB na 5.97 GB. Paráda. Adresář SoftwareDistribution to samo nevyčistilo, takže jsem pokračoval s ním. Taky by mě zajímalo, co vlastně odstranil, protože z výpisu Win32_QuickFixEngineering zmizela jenom jedna starší aktualizace.

Čištění keše Windows Update adresáře SoftwareDistribution\Download

Dále jsem podle článku https://support.microsoft.com/en-us/kb/2795190 vymazal obsah SoftwareDistribution\Download, tedy po restartu jsem provedl toto:

Stop-Service WUAUSERV
Get-ChildItem $env:systemroot\SoftwareDistribution\Download | Remove-Item -Recurse -Force
Start-Service WUAUSERV

Tady jsem ušetřil prakticky celý jeho původní obsah, takže velikost klesla na 27 MB z původních 857 MB.

Sysprep a zmenšení VHD pomocí sdelete/compact/shrink bez defragmentace moc nefunguje

Uvnitř virtuálního počítače se systémový disk C: už teď tvářil že má obsazených 8.90 GB. No následoval SYSPREP a vypnutí virtuálního počítače. VHD soubor se samozřejmě sám nezmenší, takže měl pořád svých 14 GB.

Zkusil jsem ho pro zajímavost nejprve zmenšit pomocí Hyper-V operace shrink neboli compact. Musíte to dělat pomocí PowerShell cmdlet Optimize-VHD, protože GUI operace přes Edit Disk používá pro VHDX pouze Quick metodu, která to nevyčistí dokonale. Navíc je potřeba to ručně připojit jako read only. Jako u blbejch na dvorku.

Mount-VHD b:\base2k12r2.vhdx -ReadOnly
Optimize-VHD -Path b:\base2k12r2.vhdx -Mode Full

Nečekal jsem, že to moc pomůže. Shrink/compact může odstranit pouze bloky, které jsou totálně prázdné (nulové) uvnitř virtuálního disku. Jenže samotné odmazání dat jejich sektory ve skutečnosti nenuluje, jak jistě ví každý bezpečák. Takže compact/shrink jenom tak nasucho vám moc nepomůže. Výsledkem bylo zmenšení z 13.90 GB na 12.5 GB.

Jako druhý pokus jsem použil metodu sdelete (stáhe se to z microsoftu). VHD disk jsem si offline připojil (mount) a pustil na něho sdelete s parametrem Z, který vyčistí (vynuluje) volné místo, takže následný compact/shrink bude mnohem účinnější (a taky bude mnohem déle trvat).

sdelete M:\ -Z -R

Nezapomeňte na parametr -R, který to provede rekurzivně. Bez něho by se to opět neprojevilo jako příliš účinné. Ono se to nakonec ukázalo stejně ale nedostatečné. Disk byl zmenšen z původních 13.9 GB jen na 12.0 GB při tom faktu, že disk vevnitř obsahuje jen 8.90 GB. Nějak málo, ne?

Bude to zřejmě souviset s faktem, že VHDX soubory mají výchozí vnitřní velikost blocku (BlockSize) 32 MB, zatímco starší VHD soubory mají BlockSize jen 2 MB. To znamená, že se do dynamicky rostoucího (dynamically expanding) VHD(x) souboru musí vždy umístit celých 2/32 MB, i když je z tohoto obsazen ve skutečnosti jen jeden sektor. Taky to docela ukazuje na nekvalitu distribuce souborů - což jsem ověřil pomoci defragmentátoru, který píše, že mám jen 69% space efficiency. Ověřil jsem to ještě i jednoduchým zkonvertováním VHDX do VHD a ušetřil další 2 GB, tedy velikost souboru klesla na 9.78 GB při vnitřní faktické obsazenosti 8.90 GB. Pořád sice 1 GB pryč, ale to už není taková tragédie.

Defragmentace v GUI proběhla v řádu milisekund. Něco je divně. Zkusil jsem tedy defragmentaci pomocí PowerShellu a opětovný SDELETE a samozřejmě i následující shrink.

# First mount read/write to defragment completelly
Mount-VHD b:\base2k12r2.vhdx
Optimize-Volume -Drive M -Defrag -Verbose
sdelete M:\ -Z -R
Dismount-VHD b:\base2k12r2.vhdx

# Then mount read/only to optimize/compact/shrink
Mount-VHD b:\base2k12r2.vhdx -ReadOnly
Optimize-VHD -Path b:\base2k12r2.vhdx -Mode Full
Dismount-VHD b:\base2k12r2.vhdx

Defragmentace a následná shrink/compact/Optimize-VHD zmenšila velikost na finálních 8.9 GB. Následná konverze z VHDX na VHD mi ještě ušetřila 300 MB ale to už je jenom třešnička na závěr. Ultra super!

Shrnutí na závěr

Smazání WinSxS je potřeba - nezapomeňte na parameter ResetBase.

Smazání SoftwareDistribution\Download je potřeba, ideálně to předtím ale restartujte.

Defragmentace je potřeba - musíte dělat z PowerShellu, protože z GUI to nedělá nic.

SDELETE je potřeba - nezapomeňte na parametr -R a uvědomte si, že ho musíte dělat až po defragmentaci.

Compact operaci na VHD musíte také dělat z PowerShellu, abyste mohli použít explicitně parametr -Mode Full a také ten disk nejprve připojili v režimu read-only.

Comments

DISM

Skvělé shrnutí, právě také optimalizuji místo na virtualizéru.
Jak ale zmenšit velikost adresárě winsxs na Windows 7? Tam příkaz DISM s uvedenými parametry nefunguje a grafický Disc Cleanup je neúčinný. Winsxs se mi z 19GB zmenšil na 18,8GB :-(
Petr on 30.11.2015 10:36

Re: Zmenšení velikost imidže VHD base disku po instalaci aktualizací

zrovna se připravuju, že to vyzkouším, musí se stáhnout aktualizace, ale potom to jde jenom přes Disk Cleanup a tím pádem to chce mít nainstalovánu Desktop Experience fíčuru
https://support.microsoft.com/en-us/kb/2852386
ondass on 30.11.2015 11:40

Re: Zmenšení velikost imidže VHD base disku po instalaci aktualizací

Disk Cleanup je z mojej skusenosti mimoriadne ucinny na Win7 resp. Win2008 pouzitim tlacidla "Clean up system files" a dokonca sa mi ho podarilo spustit aj bez nainstalovania Desktop Experience a to jednoduchym vykopirovanim cleanmgr.exe a cleanmgr.exe.mui z WinSxS adresara do System32. Vo virtualoch tak podla verzie OS stacilo spustit napr. batak:
copy C:\Windows\winsxs\amd64_microsoft-windows-cleanmgr_31bf3856ad364e35_6.1.7600.16385_none_c9392808773cd7da\cleanmgr.exe %systemroot%\System32\
copy C:\Windows\winsxs\amd64_microsoft-windows-cleanmgr.resources_31bf3856ad364e35_6.1.7600.16385_en-us_b9cb6194b257cc63\cleanmgr.exe.mui %systemroot%\System32\en-US\
cleanmgr

Vycistenie WinSxS a SoftwareDistribution\Download je tak jasne, ale co sa tyka zvysnych krokov, tak podla typu uloziska moze defragmentacia, sdelete a compact trvat ovela dlhsie ako jednoduche klonovanie disku. Nabootovat ISO s Clonezilla ci WinPE s GHOSTom a nove VHD zarucene nebude obsahovat nic zbytocne, no nie?
Dawid on 12.1.2016 2:31

Zmenšení velikosti WIM imidže po instalaci aktualizací

Nevíte někdo, jestli se dá OFFLINE zmenšit i instalační WIM? DISM to neumí udělat u OFFLINE imidže. Nebo při instalaci updatů do instalačního WIMu si po sobě i uklidí?

Po instalaci všech doposud vydaných aktualizací do instalačního WIMu Windows 7 jeho velikost vzrostla téměř o polovinu původní velikosti, tudíž mám podezření, že v něm zůstaly data potřebná pro jejich odinstalaci. Dá se to z něj vykosit nebo je tahle možnost až u Windows 8 a novějších?

Parametry /Cleanup-Image /StartComponentCleanup /ResetBase se u offline imidže nedají použít.
Aleš Kapl on 2.2.2016 17:16

Re: Zmenšení velikost imidže VHD base disku po instalaci aktualizací

by Kamil Roman:

Yop, nějaký koment bych měl =)

Při instalaci updatů dochází ke klasickému rozbalení do WinSXS, takže to přirozeně roste. Jediný podporovaný úklid na Win7 je /cleanup-image /spsuperseded, jenže protože M$ nevydal a zřejmě ani už nikdy nevydá SP2, tak má pán bohužel smůlu. Ty parametry co tam zadává mu fungovat zcela jistě nebude ne kvůli tomu, že je to offline, ale protože zkouší příkaz který funguje až u novějších image (6.2+).

Takže shrnuto – offline zmenšení jsou možná u Win 7 jen přes SP, u novějších i po jednotlivých updates.
ondass on 3.2.2016 8:55

Re: Re: Zmenšení velikost imidže VHD base disku po instalaci aktualizací

Díky za reakci. Tak nějak jsem tušil, že není cesty jak to udělat offline.

Ale fungovalo by udělat to online a následně provést Sysprep a tento imidž následně použít místo původního install.wim?

Nechyběly by tomu imidži nějaká metadata, která jsou v originálním install.wim?
Aleš Kapl on 12.2.2016 16:43

Re: Zmenšení velikost imidže VHD base disku po instalaci aktualizací

Trošku mne mate parametr -R u SDELETE.
V článku je popsáno, že zařídí rekurzi přes podadresáře.
V helpu SDELETE je ale popsán jako "Remove Read-Only attribute" a pro "Recurse subdirectories" slouží parametr -S.
Jak to tedy je? Není to nakonec důvod popisovaného malého účinku?
Jiří Hronek on 4.8.2016 15:31

Re: Zmenšení velikost imidže VHD base disku po instalaci aktualizací

hmmm, no to skoro tak i vypdadá :-)
ondass on 10.8.2016 10:23

Add Comment

Title


Pole Title nemusíte vyplňovat, doplní se to samo na stejnou hodnotu jako je nadpis článku.

Author *


Pole Author nesmí být stejné jako pole Title! Mám to tu jako ochranu proti spamu. Roboti to nevyplní dobře :-)

Body *


Type number two as digit *


Semhle vyplňte číslici dvě. Předchozí antispemové pole nefunguje úplně dokonale, zdá se, že jsou i spamery, které pochopily, že je občas potřeba vyplnit autora :-)

Email


Emailová adresa, pokud na ni chcete ode mě dostat odpověď. Nikdo jiný než já vaši emailovou adresu neuvidí.

Attachments