Native Boot Windows 10 VHDX

Saat hajatan diskon Tokopedia di penghujung bulan Ramadhan kemarin, saya membeli sebuah externel HDD 4 TB. Sebagian alasan karena memang membutuhkan sarana pemyimpanan yang lebih lega, sebagian karena tergiur iming-iming diskon serta cashback dan sebagian lagi karena impulse alias termakan iklan.

Selanjutnya, semua berkas yang jarang diakses dari SSD dan HDD di caddy dipindahkan ke HDD luar tersebut. Dan akhirnya SSD dan HDD caddy pun mulai terasa lega kembali.

But, unused space is wasted space.

Akhirnya, guna memanfaatkan ruang kosongnya, SSD ini akan dibentuk menjadi dua bagian untuk dual boot Linux dan Windows.

Dual boot bukanlah hal yang aneh, dan sejujurnya tidak menyenangkan. Namun kini saya bukan akan menjajal dual boot dengan cara memasang Windows secara umumnya memasang Windows, melainkan dengan memasang Windows ke dalam berkas VHDX dan kemudian boot langsung ke dalamnya.

VHD dan VHDX adalah format virtual hard disk ciptaan Microsoft. Yang menarik dari VHD(X) adalah kemampuannya untuk di-boot secara langsung oleh bootloader (native boot) dan fitur differencing yang membuat ia berlaku layaknya virtual machine.
Menggunakan fitur native boot, kita seakan memiliki banyak HDD untuk memasang banyak versi Windows. Walau tentu saja tidak untuk semua generasi Windows.
Yang lebih menarik adalah fitur differencing. Pernah menggunakan fitur snapshot di VirtualBox atau virtual machine lainnya? Nah, seperti itulah differencing VHD(X) ini. Jadi jika ada galat dalam sistem Windows, kita tidak harus memasang ulang Windows-nya, melainkan cukup kembali boot ke berkas VHD(X) dasar.

Mungkin, atau pastinya, memasang Windows ke VHD ini akan terkena penalti dalam hal kinerja dibanding memasang Windows secara langsung ke diska, namun dengan kedua keunggulan di atas nampaknya masih layak dicoba. Terlebih, saya akan memasang VHD ini ke dalam SSD. Sepertinya kegegasan SSD akan menutupi overhead dari VHD(X).

Cukuplah pendahuluannya, mari kita lanjutkan ke teknis pemasangan Windows 10 64 bit LTSB ke VHDX agar bisa di-boot secara langsung dari SSD.

  1. Langkah paling awal tentunya membagi SSD untuk menyediakan ruang bagi masing-masing sistem operasi yang akan multibooted. Jangan lupa berikan flag boot (di Windows disebut active) ke partisi Windows. Jika menggunakan gparted, cukup klik kanan partisinya ➜ Manage Flags ➜ centang pilihan boot.

  2. Berikutnya, siapkan berkas ISO Windows. Uraikan (extract) di partisi berformat NTFS yang mudah dijangkau. Bermodal Windows ISO tersebut, jangan lupa untuk membuat bootable Windows berupa keping cakram atau USB flash disk. Bootable Windows-nya bisa berupa installer, Windows PE atau lainnya asal bisa membuat kita menjalankan Command Prompt.

  3. Reboot ke bootable Windows yang telah dibuat kemudian buka jendela Command Prompt. Caranya beragam, tergantung bootable Windows yang digunakan. Misal jika menggunakan installer biasa, ketika muncul jendela Windows Setup, tekan tombol SHIFT+F10 secara berbarengan.

  4. Jalankan diskpart.

    diskpart
    
  5. Ketahui seluruh partisi yang dikenali Windows.

    list volume
    
    DISKPART> list volume
    
    Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
    ----------  ---  -----------  -----  ----------  -------  ---------  --------
    Volume 0     E   CES_X64FREV  UDF    CD-ROM      3412 MB  Healthy
    Volume 1     D                       CD-ROM          0 B  No Media
    Volume 2     C   Windows      NTFS   Partition    120 GB  Healthy    System
    

    Misal partisi yang akan kita gunakan untuk boot dan menyimpan berkas VHD(X) adalah Volume 2 yang ber-drive letter C.

  6. Buat berkas VHDX berukuran 25 GB dan berjenis tetap.

    create vdisk file=C:\windows_10_x64_base.vhdx maximum=25600 type=fixed
    

    Pilih berkas VHDX yang baru saja dibuat untuk kemudian dikaitkan.

    select vdisk file=C:\windows_10_x64_base.vhdx
    attach vdisk
    

    Misal VHDX dikaitkan ke drive letter K.

    Kemudian kita buat partisi dalam VHDX.

    create partition primary
    active
    

    Dan kita format.

    format fs=ntfs quick label='Windows 10 x64'
    assign letter=C
    exit
    

    Jika tidak bisa assign letter karena drive letter telah terpakai, abaikan saja. Nanti Windows akan otomatis mengalokasikan huruf yang kosong.

  7. Ketahui ada berapa edisi Windows yang terdapapat dalam installer.
    Misal hasil uraian ISO Windows pada langkah kedua tadi kita simpan di C:\winten.

    Dism /Get-WimInfo /WimFile:C:\winten\sources\install.wim
    
    Deployment Image Servicing and Management tool
    Version: 10.0.14393.0
        
    Details for image : C:\winten\sources\install.wim
        
    Index : 1
    Name : Windows 10 Enterprise 2016 LTSB
    Description : Windows 10 Enterprise 2016 LTSB
    Size : 12.120.640.762 bytes
        
    The operation completed successfully.
    

    Dari contoh hasil di atas, diketahui bahwa berkas ISO yang dipakai hanya memiliki satu edisi Windows, yakni Windows 10 Enterprise 2016 LTSB pada indeks 1.

  8. Install Windows dengan cara menerapkan isi citra berkas install.wim menggunakan bantuan Dism.

    Dism /Apply-Image /ImageFile:C:\winten\sources\install.wim /Index:1 /Compact /ApplyDir:K:\
    

    Di sini kita memasang Windows 10 dengan fitur CompactOS agar ukuran sistem Windows-nya menjadi lebih ringkas. Secara default, Dism hanya akan memampatkan menggunakan kompresor XPRESS4K. Kompresi yang lebih tinggi bisa dicapai menggunakan kompresor LZX. Kita bisa menerapkan kompresi LZX menggunakan bantuan perkakas compact.exe dalam sistem Windows 10.

  9. Setelah citra berkas install.wim semuanya diterapkan ke partisi K: di VHDX, saatnya untuk memasang bootloader.

    Pindah ke partisi VHDX.

    cd K:\Windows\System32
    

    Pasang PBR (partition boot record) di partisi ini. Saya tidak memasang boot record ke MBR karena berniat untuk chain loading bootloader Windows oleh GRUB2.

    bootsec /nt60 K:\ /force
    

    Salin dan mutakhirkan BCD (Boot Configuration Data).

    bcdboot K:\Windows /s C:\
    
  10. Saatnya reboot dan kembali boot ke sistem Linux untuk memutakhirkan GRUB agar bisa chain loading boot manager Windows.
    Mengapa memilih GRUB sebagai bootloader utama? Pertama, karena bootloader Windows tidak mengenali bootloader sistem operasi lain, dan kedua, saya lebih percaya kehandalan GRUB.

    Agar GRUB bisa mencari bootloader OS lain di partisi lain, pastikan paket os-prober telah terpasang. Selanjutnya, mutakhirkan GRUB.

    sudo update-grub
    
  11. Kini mestinya partisi Windows tempat VHDX berada telah dikenali GRUB. Reboot komputer dan boot ke VHDX Windows untuk melanjutkan tahap pemasangan.

    Selesai pemasangan Windows, lanjutkan ke pemasangan program-program dan lakukan pengaturan penyetelannya.

    Jika dirasa telah sempurna, kita lanjutkan ke tahap differencing berikut.

  12. Ulangi langkah 3, 4 dan 5 di atas.

  13. Buat berkas VHDX untuk menyimpan data selisih (differences).

    create vdisk file=C:\windows_10_x64_diff.vhdx parent=C:\windows_10_x64_base.vhdx
    

    Seperti yang tampak di atas, membuat citra VHDX differencing tidak perlu menyatakan ukurannya. Karena ukurannya akan mengikuti ukuran berkas parent.

    Pilih dan kaitkan berkas VHDX baru ini.

    select vdisk file=C:\windows_10_x64_diff.vhdx 
    attach vdisk
    

    Misal, VHDX dikaitkan di Z. Mutakhirkan BCD agar awas terhadap VHDX anyar.

    cd Z:\Windows\System32
    bcdboot Z:\Windows /s C:\
    

    Nah, selesai sudah.
    Kini Windows secara default akan boot ke windows_10_x64_diff.vhdx dan tiap perubahan dalam sistem Windows akan disimpan ke berkas windows_10_x64_diff.vhdx tersebut. Dan sekiranya sistem Windows mengalami galat kita cukup membuat berkas VHDX diff yang anyar. Mirip-mirip dengan snapshot di VirtualBox lah….

Tutorial di atas hanyal setitik puncak dari sebuah gunung es di lautan. Masih banyak cara untuk menjadikan native boot VHD ini lebih mengesankan, misal dengan multiple boot Windows 7, 8 dan 10. Atau menggunakan bootloader pihak ke tiga seperti grub4dos dan easyBCD agar bisa boot Windows XP, berkas ISO atau bahkan distro-distro linux.
Sejujurnya, teknologi native boot VHD ini lumayan mengesankan, andai saja dunia Linux memiliki teknologi yang sepadan.