Back-uppen met snapshots
VHD's bevriezen met snapshots
Met een paar scripts heb je in een paar minuten tijd een tweede Windows-installatie opgezet om lekker mee te experimenteren. Ook laten we zien hoe je een corrupte installatie in enkele seconden weer soepel aan de praat krijgt.
Een tweede Windows op je harde schijf is in veel gevallen erg handig. Dé manier om dat voor elkaar te krijgen is Windows installeren op een virtuele schijf. Om zo'n VHD-bestand te configureren hoef je niets met de partitionering van de harde schijf te doen. Het alternatieve besturingssysteem draait – in tegenstelling tot bij virtualiseren – op volle snelheid en op echte hardware. Hiervoor laat een speciale driver, die sinds Windows 7 is ingebouwd, het systeem en de programma's denken dat het VHD-bestand een schijf is. De overhead van de driver bij schijftoegang is verwaarloosbaar.
Naast de genoemde voordelen biedt de Windows-installatie in een VHD-bestand een feature die je normaal alleen kent van virtualisatie en schaduwkopieën. De status van de installatie kan worden opgeslagen zonder dat deze veel ruimte inneemt en je kunt hem later weer exact terugzetten.
Deze vorm van opslaan staat bekend onder de term snapshot. Technisch gezien maak je daarbij geen exacte kopie van de virtuele schijf. Het is eerder een tweede bestand met in eerste instantie alleen wat beheerinformatie. De VHD-driver sluist alle
schrijfacties op de virtuele schijf door naar dit nieuwe bestand. Bij lezen controleert de driver eerst of de gewenste inhoud al in het extra bestand staat. Als dat zo is, wordt die teruggeleverd. Zo niet, dan is de versie uit het originele bestand aan zet. Dit werkt ook op meerdere niveaus.
Op deze manier verandert er niets aan de status van de schijf op het moment dat de snapshot wordt gemaakt. Tegelijk kan die op elk gewenst moment worden geactiveerd. Dat gaat het makkelijkst door het snapshotbestand te wissen. Er zijn dus twee versies met de status van de virtuele schijf, maar ze nemen in totaal niet dubbel zo veel ruimte in. Het is een optelsom van de hoeveelheid voor de eerste situatie plus de wijzigingen in de tweede. Met deze methode wordt juist bij het installeren van besturingssystemen enorm veel ruimte bespaard. Na installatie worden de meeste systeembestanden namelijk hooguit nog bij updates aangepast.
Vertakking
Het is wel belangrijk dat het oorspronkelijke VHD-bestand, waarvan je de snapshot-kopie hebt gemaakt, in een ongewijzigde versie behouden blijft. Als het bestand per ongeluk wordt gebruikt en ernaar wordt geschreven – of op een andere manier verloren gaat – wordt het afgeleide snapshotbestand onbruikbaar. De driver gaat er immers vanuit dat alles wat ontbreekt in het originele bestand staat. Zorg er dus voor dat die situatie zo blijft! VHD-bestanden slaan wel de informatie over het origineel op, maar niet de timestamp of checksum. Als je Windows opstart van een VHD met een gewijzigd of beschadigd basisbestand, kun je bizarre bestandsfouten te zien krijgen en kan het systeem zelfs crashen.
Bij het modernere bestandsformaat VHDX gaat het er iets anders aan toe. Wel maakt ook hier een gewijzigde vorige versie een afgeleide image onbruikbaar. Windows merkt dat dan echter meteen op, zodra je de snapshotkopie probeert te gebruiken. Je ziet daarover dan ook een foutmelding. Een bestaand VHD-bestand kan met het PowerShell-commando Convert-VHD naar een VHDX-bestand worden geconverteerd en omgekeerd. Let er wel op dat je de conversie uitvoert voor alle bestanden in een snapshottak. Het basisbestand voor een snapshot moet altijd hetzelfde formaat hebben. Voor de rest bieden VHD- en VHDX-bestanden voor gebruikers van Windows 8.1 en 10 precies dezelfde mogelijkheden. Windows 7 kent het nieuwe formaat nog niet. Als we hieronder spreken over VHD-bestanden, bedoelen we daar ook VHDX-bestanden mee.
Windows-kloon
Afgezien van het gebruik in een virtuele machine kunnen VHD-bestanden ook dienen voor een tweede Windows-installatie. Om die installatie te kunnen booten, moet er een extra entry in de bootloader komen. Helaas moet je voor wijzigingen aan het bootmenu (althans bij de standaard Windows-tools) vaak werken met vrij cryptische en lange commando's. Een tikfout is dan snel gemaakt. Bij het uitwerken van de (verderop beschreven) methode voor het werk met VHD-snapshots stelden we dan ook als doel om zo weinig mogelijk aan het bootmenu te hoeven sleutelen.
De aanbevolen manier gaat ervan uit dat Windows al in een VHD is geïnstalleerd en dat die ook in het bootmenu zichtbaar is. Het maakt niet uit of je dat hebt gedaan met een normale VHD-installatie of met behulp van c't-Win2VHD (zie artikel op pagina 102). In het laatste geval is de beste gelegenheid voor je eerste snapshot het moment nadat de OOBE-wizard een gebruiker en de basisinstellingen heeft geconfigureerd – dus niet meteen nadat je de image hebt overgezet. Je hoeft dan namelijk niet zoveel te klikken om later naar de oorspronkelijke toestand terug te keren. Verder is aan jou de keus of je ook eerst nog de beschikbare updates installeert.
Om een snapshot te maken, moet je in elk geval een andere Windows-instantie starten dan diegene waarvan je een snapshot wilt maken. Je hoofdinstallatie is daarvoor prima. De Windows-instantie die je wilt opslaan moet op de normale manier zijn afgesloten. Ook mag het VHD-bestand waar het in staat niet als schijf gemount zijn. Op die manier weet je zeker dat het VHD-bestand een consistente status heeft – een must bij het maken van een succesvolle snapshot.
In principe is het maken van een snapshot niet veel anders dan het maken van
een nieuw VHD-bestand. Alleen wordt nu de bestaande image als 'parent' aangegeven. Aangezien Schijfbeheer deze optie niet heeft, blijven er nog twee manieren over die beide wat tikwerk vergen: met de commandlinetool diskpart en de Windows PowerShell.
Je kunt daarbij niet zomaar voor een van beide tools kiezen. In Windows 7 en de Home-edities van Windows 8.1 en 10 moet je de verderop besproken diskpart-commando's gebruiken. De PowerShell-commando's zijn afkomstig uit de Hyper-V-module, die je dan uiteraard wel geïnstalleerd moet hebben. Hyper-V wordt meegeleverd met Windows Server vanaf 2008 en Windows 8.1 en 10 in de versies Pro, Enterprise en Education. In deze versies kun je de tool installeren via het venster 'Windows-onderdelen in- of uitschakelen' van het Configuratiescherm. Als je geen virtuele machines wilt gebruiken, heb je genoeg aan de 'Hyper-V-beheerprogramma's'.
Om niets aan het bootmenu te hoeven doen, maak je in twee stappen een nieuwe snapshot. Eerst hernoem je het bestaande VHD-bestand en daarna maak je een nieuw bestand aan dat verwijst naar het oude (maar nu met nieuwe naam) en de oudere bestandsnaam heeft. De nieuwe regel in het bootmenu linkt nu automatisch naar het nieuwe bestand. De bootloader heeft niet door dat het eigenlijk een ander bestand is. Een voorbeeld maakt het wat duidelijker. Stel dat je Windows via c't-Win2VHD hebt geïnstalleerd in het bestand c:\vhd\Win8. vhd en de basisinstellingen hebt doorlopen. Start dan eerst je pc opnieuw op met de normale Windows. Geef het VHD-bestand de naam Win8_Basis.vhd – met de Verkenner, de Opdrachtprompt of PowerShell. Op die manier maak je er een snapshot van. Vervolgens maak je een nieuwe werkkopie met de oude bestandsnaam. Start daarvoor in de commandline het programma diskpart en voer onderstaand commando in:
Zowel diskpart als PowerShell hebben voor deze commando's administratorrechten nodig.
Zodra je bijvoorbeeld in de VHD-Windows een Office-pakket installeert en van deze installatie een snapshot wilt, kun je de bestaande Win8-VHD (die immers al een snapshot is) gewoon hernoemen in bijvoorbeeld Win8_Basis_Office.vhd. Ook moet je die dan op het moment dat je Win8-VHD nieuw aanmaakt kenmerken als parent of ParentPath. In de praktijk blijkt het erg handig om de naam van de voorganger te vormen uit die van de voorganger plus een trefwoord. Op die manier wordt meteen de relatie tussen beide bestanden duidelijk en hoef je dus niet in diskpart eerst select vdisk in te typen en daarna nog detail vdisk – of in PowerShell Get-VHD. De naamgeving wordt ook gehanteerd in de kleine verzameling PowerShell-scripts die je via de link aan het eind kunt downloaden. Om de beschreven Office-snapshot te maken hoef je maar het volgende in te typen:
Het script bepaalt automatisch de naam van de vorige versie en past deze op de juiste manier aan. Daarna wordt er een nieuw bestand aangemaakt.
Terug in de tijd
Wat je precies moet doen om naar een ouder snapshot terug te keren, hangt af van wat je wilt bereiken. We pakken het Office-voorbeeld er nog eens bij. Stel: je hebt je Office-installatie verneukt en wilt de situatie terugzetten in de toestand waarin je hem net had geïnstalleerd en ook als snapshot behouden. Verwijder dan simpelweg het bestand Win8.vhd en maak hem opnieuw – als aftakking dus van Win8_Basis_Office.vhd. Bij onze scripts doe je dat met het commando:
Het script vraagt voor de zekerheid of je het opgegeven bestand echt wilt verwijderen. Als je deze vraag wilt overslaan, moet je de optie -Force als extra parameter toevoegen.
Een ander praktijkvoorbeeld is als je een tijdje wat met Office wilde experimenteren en nu wilt terugkeren naar de basisinstallatie – om bijvoorbeeld wat instellingen aan te passen die je voortaan permanent wilt gebruiken. Je hoeft de basisinstallatie dan niet nog een keer als snapshot te bewaren, maar gewoon het bestand Win8.vhd wissen. Het hernoemde Win8Basis_Office.vhd neemt dan de vrijgekomen plek in. Bij gebruik van onze scripts doe je dat met: