Máme obraz systémového disku (VHD) a chcete z něj spustit počítač? Chcete vyzkoušet novou verzi Windows nebo jiného programu, ale nechcete si tím poškodit současnou instalaci? Nemáte ale k dispozici další disk a vaše PC není dostatečně výkonné pro virtuální PC?
Rychlá navigace
Bootování z VHD
Windows 10 (resp. NT6, tedy Windows 7+ a Server 2008+) obsahují Windows Boot Manager, který umožňuje vytvořit Boot menu pomocí tzv. Boot Configuration Data (BCD).
Pro co největší flexibilitu umožňuje Boot Manager startovat z libovolného disku, který můžete uvést pomocí libovolného dostupného identifikátoru. Těmi jsou písmeno disku (např. C:
), označení svazku (např. \Device\HarddiskVolume1
) a také cesta k VHD souboru s obrazem disku.
Právě toho můžete využít k tomu, abyste nabootovali systém, který není uložen přímo na fyzickém disku ale pouze v souboru s obrazem.
Kopie disku
Pokud chcete tento návod použít za účelem otestování procesu upgradu na novou verzi Windows nebo chcete otestovat instalaci nějakého programu do vaší současné instalace Windows bez toho, abyste tím potencionálně své Windows poškodili, budete si muset vytvořit jejich kopii.
Aktualizace: Bohužel se Microsoft rozhodl, že od verze 2004 (Květen 2020) nedovolí provádět upgrade Windows na novější verzi, pokud běží z virtuálního disku. Vyzkoušet, zda vaše instalace Windows zvládne upgrade, tedy můžete pouze tak, že vytvoříte kopii vašeho systému buď na fyzickém disku (a nabootujete z něj) nebo do virtuálního disku (a spustíte ho ve virtuálním stroji, např. Hyper-V, VirtualBox, WMware).
Uvědomte si, že potřebujete zkopírovat všechna data systémového disku, takže musíte mít dostatek místa. Pokud máte v PC jen jeden disk, mělo by jeho zaplnění být menší než 50% (Tento počítač – Disk – Vlastnosti).
Pokud nemáte dostatek místa, spusťte Vyčištění disku (spusťte ho jako Administrátor pro více možností), odstraňte některé soubory (např. videa nebo soubory ze složky Stažené – buď je smažte nebo přesuňte na jiný disk nebo USB) nebo převeďte systém do kompaktního režimu (spusťte Příkazový řádek jako administrátor a zadejte „compact /CompactOS:always
“ – dokončení může trvat několik hodin!).
Poznámka: I když bude vytvořený VHD dynamický, takže na disku bude zabírat jen tolik, kolik je na něm dat, po nabootování se jeho velikost (dočasně) zvětší na původní velikost fyzického disku (resp. svazku). Pokud nemáte tolik místa nebo chcete šetřit, podívejte se níže, jak fyzický svazek před kopírováním zmenšit.
Pokud nemáte žádný zálohovací program (např. Paragon Manager), který by uměl disk VHD nebo VHDX vytvořit, můžete si (zdarma) stáhnout program Disk2VHD od Microsoftu.
Program spusťte, odsouhlaste pravidla a zadejte cestu, kam chcete uložit kopii disku (pokud nefunguje tlačítko „…“, smažte obsah pole před ním). Pokud zaškrtnete Use Volume Shadow Copy, můžete kopii disku uložit na disk samotný, takže nepotřebujete žádný další HDD. Funkce Shadow Copy je také potřeba, pokud kopírujete disk právě běžícího systému (obvykle C:\
).
Následně vyberte, které svazky chcete zkopírovat – obvykle je to ten označený C:\
, ale záleží na konfiguraci PC a vaší situaci. Nakonec ověřte, že je zaškrtnuto Use Vhdx (novější verze podporující ochranu proti poškození dat) a klikněte na Create. Kopírování můžete trvat několik desítek minut, takže mějte trpělivost. S PC můžete během kopírování normálně pracovat (jen bude pomalejší).
Upozornění: Pokud budete chtít kopii systému použít pro virtuální stroj (Hyper-V nebo Virtualbox), naopak zrušte zaškrtnutí Use Vhdx, proto není pro virtuální stroje vhodné (resp. VirtualBox ho nepodporuje pro bootování).
Nová instalace Windows
Pokud chcete pouze vyzkoušet novou verzi Windows nebo vám pro testování programů stačí čistá instalace Windows, nemusíte vytvářet kopii vašeho disku (který má pravděpodobně desítky až stovky GB), ale můžete disk vytvořit rovnou z instalačního ISO souboru.
Stáhněte a uložte instalační Windows ISO (např. nástrojem Windows Media Creator). Dvojklikněte na soubor ISO a Windows ho připojí jako virtuální mechaniku. Na disku otevřete složku sources
a najděte soubor install.wim
nebo install.esd
. Soubor zkopírujte na (jiný) pevný disk (např. C:\temp
). Následně můžete smazat stažené ISO.
Soubor WIM (Windows Installer Media) můžete použít rovnou, ale pokud máte soubor ESD (Electronic Software Download; zkomprimovaný instalátor), musíte z něj rozbalit WIM soubor. Spusťte Příkazový řádek ve složce, kde je soubor install.esd
a zadejte příkazy:
> dism /Get-WimInfo /WimFile:install.esd > dism /export-image /SourceImageFile:install.esd /SourceIndex:1 /DestinationImageFile:install.wim /Compress:max /CheckIntegrity
První příkaz vypíše obsah souboru, tedy jaké verze Windows lze ze souboru nainstalovat a každému přiřadí index. V druhém příkazu pak změňte parametr /SourceIndex
na číslo, které chcete nainstalovat (měla by to být stejná verze jako aktuálně nainstalovaná, aby Windows automaticky instalaci aktivovali na základě hardware stroje).
Stáhněte si skript Convert-WindowsImage z Microsoft Techblog a uložte ho na disk. Spusťte PowerShell ve složce, kde je uložen stažený skript a zadejte:
> . .\Convert-WindowsImage.ps1 > Convert-WindowsImage -SourcePath .\install.wim -VHDFormat VHDX -SizeBytes 32GB -VHDPath .\Windows10.vhdx
První příkaz je tečka a za ní je uvedeno jméno skriptu. Tím řeknete prostředí PowerShell, aby ze skriptu načetl definované funkce a přidal je jako příkazy. Druhý příkaz pak můžete zavolat Convert-WindowsImage
, což je funkce nadefinovaná v souboru.
Hodnotou SizeBytes
můžete nastavit maximální velikost disku (po té, co z něj nabootujete). Vytvořený svazek bude dynamický, takže zabere jen tolik místa, kolik je na něm dat, ale po nabootování se (dočasně) zvětší na zadanout velikost. Zvětšit VHD není problém, ale zmenšit ho vyžaduje speciální nástroje. Proto doporučuji zadat co nejmenší velikost a v případě potřeby ho zvětšit. Pro čistou instalaci doporučuji 32GB (můžete použít i 16GB, ale systém se nainstaluje v kompaktním režimu a bude pomalejší).
Příklad výpisu konverze:
INFO : Image 1 selected (<verze instalovaných Windows>)… INFO : Creating sparse disk… INFO : Attaching VHDX… INFO : Disk initialized with GPT… INFO : Disk partitioned INFO : System Partition created INFO : Boot Partition created INFO : System Volume formatted (with DiskPart)… INFO : Boot Volume formatted (with Format-Volume)… INFO : Access path (X:) has been assigned to the System Volume… INFO : Access path (Y:) has been assigned to the Boot Volume… INFO : Applying image to VHDX. This could take a while… INFO : Signing disk… INFO : Image applied. Making image bootable… INFO : Drive is bootable. Cleaning up… INFO : Closing VHDX… INFO : Closing Windows image… INFO : Done.
Pokud výpis obsahuje červené řádky, vytvořený disk nebude platný. Podívejte se na další kapitolu pro možné řešení.
Po prvním spuštění budou muset Windows dokončit instalaci sebe sama a proto bude bootování trvat nezvykle dlouho a počítač se může restartovat. Počítejte s tím (a případně znovu zvolte příslušný systém v boot menu). Následně budete muset vyplnit další instalační údaje (jazyk, klávesnice, uživatelé, povolení funkcí, apod.).
Řešení chyb
Během provádění druhého příkazu, které může trvat několik desítek minut, se mohou zobrazit různé informace o připojení disků nebo výzvy na formátování nebo kontrolu dat (antivirus). Všechny tyto výzvy ignoruje, protože skript provádí vše automaticky a během provádění by žádný jiný proces neměl k disku přistupovat, aby ho bylo možno v případě potřeby odpojit a znovu připojit.
Pokud máte antivirus, který automaticky prování kontrolu nových disků, zkuste ho před konverzí vypnout.
Pokud máte v PC zapnutou Ochranu proti Ransomware, přesvědčte se, že soubory jsou uloženy v nechráněné složce. Pokud je potřebujete uložit do chráněné složky, povolte (dočasně) proces PowerShell jako důvěryhodný.
Pokud vám první příkaz vrátí chybu „File cannot be loaded because running scripts is disabled on this system.„, zadejte nejprve následující příkaz a následně zadejte A
jako Povolit vše.
> Set-ExecutionPolicy Unrestricted
Po úspěšném vytvoření disku můžete vrátit hodnotu zpět:
> Set-ExecutionPolicy Restricted
Pokud spuštění prvního (tečkového) příkazu vrátí „Security warning: Run only scripts that you trust.“ zadejte R
jako Spustit. Alternativně můžete otevřít vlastnosti staženého souboru a dole zaškrtnout „Tento soubor pochází z jiného počítače: Odblokovat
„.
Pokud spuštění druhého příkazu vypíše „Format-Volume: invalid parameter„, zkuste VHDX připravit na jiném PC. Může to být způsobeno tím, že vaše instalace Windows je částečně poškozená a nedokáže správně příkazy zpracovat.
Pokud se vám během zpravování zobrazí informace „Access path (\?\Volume{guid}) has been assigned to ...
„, jde o chybu skriptu, kdy špatně najde svazek (všechny svazky musí mít písmenu), na který má kopírovat soubory. V tomto případě je potřeba soubor Convert-WindowsImage.ps1
otevřít v editoru (Windows PowerShell IDE nebo Poznámkový blok) a najít příkaz $(Get-Partition -Disk $disk).AccessPaths
který odpovídá místu, kde se zobrazuje výše uvedený výpis (hledejte podle toho, co je vypsáno za „assigned to
„) a zkusit změnit ...AccessPaths[X]
na jiné číslo disku (0, 1, 2, 3, atd.) – obvykle stačí číslo o 1 zvětšit. Nejčastější chyba je na řádku 4220
, kde je potřeba změnit index 2
na 3
.
Pokud narazíte na jinou chybu, zkuste ji vyhledat v diskuzi k uvedenému skriptu a nebo zapiště nový komentář a doufejte, že někdo poradí (což ale může trvat pár dní až týdnů).
Registrace instalace Windows
Až budete mít připravený VHD disk, můžete ho zahrnout do svého BCD registru.
Spusťte Příkazový řádek jako Administrátor a zadejte jméno souboru s obrazem disku:
> D:\Windows10.vhdx
Windows automaticky připojí všechny disky z obrazu a přiřadí jim písmena (např. E:
). Teď budete muset najít disk, na kterém je uložena složka Windows
(v případě, že obraz obsahuje více disků).
Pro přidání obrazu disku do boot menu zadejte příkazy:
> bcdboot E:\Windows > bcdedit
V prvním příkazu nahraďte E:
za skutečné písmenu disku. Druhý příkaz pak rovnou vypíše obsah boot menu po přidání disku.
V menu byste měli vidět jak svoji současnou instalaci (označena identifikátorem {current}
) tak i novou (označena jako {default}
nebo nějakým {guid}
).
Položky v boot menu můžete přejmenovat příkazy:
> bcdedit /set {current} description "Windows 10 z disku" > bcdedit /set {default} description "Windows 10 z VHD"
Pokud mají položky jiné identifikátory, nahraďte {current}
a {default}
za příslušné {guid}
.
První příkaz nastavil bootování na nový disk. Pokud chcete zachovat výchozí bootování na současném systému, zadejte ještě příkaz:
> bcdedit /set {bootmgr} default {current}
Dobu, po kterou bude boot menu zobrazeno, můžete změnit příkazem:
> bcdedit /set {bootmgr} timeout 3
Nyní můžete restartovat počítač a vybrat si, který systém chcete spustit.
To, který systém bude nabíhat a jak dlouho bude menu zobrazeno, můžete také měnit programem msconfig.exe
nebo v Tento počítač – Vlastnosti – Upřesnit nastavení systému – Spouštění a zotavení systému – Nastavení.
Úprava VHD přes DiskPart
Všechny verze Windows NT6 obsahují kromě Boot Managera také program DiskPart, který slouží k vytváření a úpravě disku. Program nahrazuje starší FDisk a liší se tím, že umí pracovat s dynamickými a virtuálními disky.
DiskPart spustíte zadáním příkazu „diskpart
“ do Nabídky Start, Příkazové řádky nebo PowerShell. Pozor na to, že DiskPart je potřeba ručně spustit jako administrátor.
DiskPart funguje jako příkazová řádka, jen má své vlastní příkazy, jejichž seznam zobrazíte příkazem „help
„. Všechny příkazy (díky jejich nízkému počtu) můžete zkracovat, ale musíte zadat alespoň 3 písmena. Například příkaz „select partition 3
“ můžete zkrátit jako „sel part 3
„, nebo příkaz „assign letter X
“ můžete zkrátit na „ass let x
„.
Program DiskPart ukočíte příkazem:
> exit
Základní příkazy jsou:
> list disk > list partition > list volume
Ty vypíší seznam dostupných (fyzických) disků a oddílů (partition) na nich. Třetí příkaz vypíše všechny aktuálně připojené svazky (volume). Každý disk, oddíl a svazek má v seznamu číslo, které můžete použít k jeho vybrání. Vybraný disk, oddíl nebo svazek pak bude v seznamu označen hvězdičkou a budou se na něj vztahovat ostatní příkazy.
> select disk X > select partition X > select volume X
DiskPart umí pracovat jak s aktuálně přepojenými VHD (ty se normálně zobrazí v seznamu svazků) tak i s těmi nepřipojenými. Také je umí sám připojit a odpojit:
> select vdisk file="C:\Windows_10.vhdx" > list vdisk > attach vdisk > list volume
Příkaz select vdisk
načte VHD soubor uvedený v parametru file
(DiskPart nemá aktivní složku, takže je potřeba zadat celou cestu včetně písmena disku) a nastaví ho jako aktivní pro ostatní příkazy pracující s VHD. Příkaz list vdisk
vypíše seznam virtuálních disků, se kterýmy jste již pracovali. Seznam sice obsahuje indexy (např. VDisk 0
), ale neexistuje příkaz pro jejich vybrání pomocí indexu. Pokud chcete připojit nebo odpojit jiný než aktuálně vybraný virtuální disk, musíte znovu zadat select vdisk
a uvést cestu.
Třetí příkaz attach vdisk
připojí aktuálně vybraný virtuální disk a přidá svazky v něm mezi aktivní. Ty se pak zobrazí v seznamu list volume
.
Pokud vám další příkazy zobrazí chybu, že je disk offline, použijte příkazy pro jeho aktivaci:
> list disk > select disk X > online disk > list volume > select volume X > online volume
Pro zvětšení maximální velikosti vituálního disku použijte příkaz expand
, kterému zadáte velikost v MB (1GB = 1024). Před použitím příkazu musíte příslušný disk odpojit příkazem detach vdisk
:
> detach vdisk > expand vdisk maximum=32768
Tím sice zvětšíte virtuální disk, ale svazky na něm se nezmění a nové místo bude nevyužití. Pro zvětšení hlavního svazku se potřeba disk připojit, zvolit svazek a zvětšit ho příkazem extend
:
> attach vdisk > list volume > select volume X > extend
Příkaz extend
bez parametrů zvětší disk na maximální velikost. Alternativně můžete zadat parametr size
, pomocí kterého uvedete požadovanou velikost v MB.
Při práci s fyzickými disky můžete jako druhý parametr uvést číslo fyzického disku (disk=X
), na který se má svazek roztáhnout (tím se převede na dynamický disk uložení na více fyzických discích).
Pokud byste chtěli svazek naopak zmenšit (např. před tím, než z něj vytvoříte kopii výše uvedeným postupem), musíte použít příkaz shrink
. Parametrem querymax
získáte velikost, o kterou je možno disk zmenšit. Parametrem desired
pak zadáte novou požadovanou velikost:
> shrink querymax The maximum number of reclaimable bytes is: 8 GB (8934 MB) > shrink desired=28672
V příkladu nám příkaz řekl, že disk (který jsme před chvílí zvětšili na 32GB) obsahuje 8GB volného místa, o které ho můžeme zmenšit. Druhým příkazem jsme tedy jeho velikost nastavili na 28GB.
Alternativně bysme mohli zavolat příkaz shrink
bez parametrů a on by disk zmenšil na nejmenší možnou velikost (tedy o 8934MB menší).
Třetí možnost je zadat místo desired
parametr minimum
, který uvádí, o kolik MB se má disk zmenšit (v dalším příkladu ho zmenšíme o 4GB na 24GB):
> shrink querymax The maximum number of reclaimable bytes is: 4 GB (4838 MB) > shrink minimum=4096
Optimalizace VHD
Při bootování z VHD a jeho používání pro běh systému může soubor disku po čase narůst a zabírat více místa, než je nezbytně nutné. Pokud systém používáte pouze občas (např. používáte ho týden a pak ho na půl několik měsíců odložíte), můžete soubor optimalizovat, aby nezabral tolik místa.
Nejprve systém nabootujte a spusťte Vyčištění disku jako Správce. Zaškrtněte všechny možnosti a nechte vše nepotřebné smazat.
Pak spusťte Příkazový řádek jako Správce a zadejte příkaz:
> compact /CompactOS:always
Tím zkomprimujete všechny soubory systému, aby zabrali co nejméně místa. Příkat může trvat několik minut až hodin.
Následně počítač restartujte do jiného OS a VHD připojde. Otevřete ho, zobrazte si skryté a systémové soubory a z kořenové složky smažte soubory PageFile.sys a Hiberfil.sys. Tyto soubory zabírají několik (až desítky) GB a systém si je může kdykoliv znovu vytvořit, až je bude potřebovat.
Pod Tento počítač klikněte na disk pravým tlačítkem a zobrazte jeho vlastnosti. Zaškrtněte Komprimovat jednotku, klikněte na Použít, v okně zvolte Aplikovat na všechny složky a soubory a potvrďte. Pokud ze zobrazí zpráva, že nějaký soubor nejde komprimovat, klikněte na Přeskakovat. Tím zkomprimujete ostatní (nesystémové) soubory. Opět to může trvat několik minut až hodin.
Po dokončení proveďte defragmentaci. U VHD defragmentace neprovádí přesun souborů na disku (tedy uvnitř VHD souboru), ale pouze seřadí soubory v tabulce souborů (FAT, NTFS, apod.) a zjistí, které části souboru VHD obsahují nepotřebná data (tedy již smazané soubory). Funguje tedy podobně jako TRIM u SSD disků.
Teď si stáhněte nástroj Sdelete, spusťte Příkazový řádek jako Správce a zadejte příkaz:
> f:\VHD\sdelete64.exe -c -z X:
Kde X: je písmeno připojeného disku. Tento příkaz vymaže prádné místo na disku a přepíše ho nulami (čímž vylepší možnosti následného změnšení) a také optimalizuje tabulku souborů ($MFT). Pozor na to, že ve starších verzích OS to může znamenat, že se soubor disku zvětší na svou maximální velikost!
Nakonec spusťte DiskPart jako Správce a zadejte příkazy:
> select vdisk file="d:\Windows_10.vhd" > detach vdisk > attach vdisk readonly > compact vdisk > detach vdisk
Příkazem compact vdisk
překopírujete VHD do nového souboru bez prázných (nevyužitých) míst a při kopírování provede defragmentaci vytvořenou dříve spuštěným defragmentačním nástrojem, díky čemuž se VHD optimalizuje a zmenší na nejmenší potřebnou velikost. Pozor na to, že podle verze Windows může vyžadovat další volné místo na disku až do velikost dat ve VHD!
Na závěr můžete ještě defragmentovat samotný VHD soubor. Buď můžete opět spustit plnou defragmentaci disku, nebo si můžete stáhnout nástroj contig a defragmentovat jen samotný soubor příkazem:
contig d:\Windows_10.vhdx
Pro ještě lepší uklid VHD souboru (pokud nemáte VHD na SSD, kde to nemá smysl) můžete použít program jkDefrag a zadat příkazy:
> jkDefrag -q -a2 > jkDefrag -q -a6 D:\Windows_10.vhdx > jkDefrag -q -a3 -e D:\Windows_10.vhdx
První příkaz defragmentuje celý disk a přesune všechny soubory na začátek disku, druhý příkaz pak přesune zvolený VHDX na konec disku a třetí příkaz pak dokončí jeho defragmentaci.
Uvědomte si ale, že až budete potřebovat znovu použít systém z VHD disku, bude hodně pomalý, kvůli kompresy souborů a umístění VHD na konec disku (který je pomalý). Pokud plánujete systém používat opět delší dobu, měli byste soubory a systém dekomprimovat a VHD soubor přesunout někam na začátek disku.
Zmenšení VHD pomocí Hyper-V
Pokud jste vytvořili VHD příliš velké a potřebujete ho zmenšit, budete potřebovat PowerShell příkazy dostupné ve Hyper-V balíku.
Hyper-V nejde nainstalovat do Windows Home, takže potřebujete alespoň Windows 10 Pro (nebo Server). Pro domácí použití ale můžete použít následující trik: podle postupu výše si vytvořte VHD s čistou instalací Windows 10 Pro, nabootujte ho, nainstalujte Hyper-V, zmenšete disk a Windows Pro opět smažte. Pro komerční použití si kupte licenci na Windows 10 Pro.
Pro instalaci Hyper-V spusťte PowerShell jako Administrátor a zadejte příkaz:
> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Alternativně můžete Hyper-V nainstalovat přes Ovládací panely – Programy a Funkce – Zapnout nebo vypnout funkce systému Windows a nebo z Příkazové řádky příkazem:
> DISM /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V
Následně restartujte počítač pro dokončení instalace. Pak znovu spusťte PowerShell jako Administrátor a zadejte příkaz:
> Resize-VHD -Path .\Windows_10.vhdx -SizeBytes 34359738368
Do parametru SizeBytes
udáváte velikost v bytech (1GB = 1073741824). Pokud příkaz vyhodí chybu, ověřte, že VHD soubor není připojen a že svazky na něm jsou dostatečně malé (viz příkazy detach
a shrink
výše).
Chyba „Proces nemá přístup k souboru, neboť jej právě využívá
jiný proces. (0x80070020)“ znamená, že je disk připojený, chyba „Požadovanou operaci změny velikosti nelze dokončit, protože by mohlo dojít k zkrácení uživatelských dat uložených na virtuálním disku. (0xC03A0025)“ znamená, že udaná velikost je příliš malá a bude potřeba ji buď zvýšit a nebo naopak zmenšit svazky na virtuálním disku.
Po zmenšení doporučuji provést extend
na novou velikost pomocí DiskPart a následně provést kontrolu disku pomocí chkdsk
:
> diskpart > select vdisk file="C:\Windows_10.vhdx" > attach vdisk > list volume > select volume X > extend > assign letter Y > exit > chkdsk y: /f