Ubuntu w Windows 10 (Hyper-V)

Dawno dawno temu, w zamierzchłej przeszłości, popełniłem artykuł o typach i programach do wirtualizacji, dzisiaj chciałbym pokazać jak w kilku krokach przygotować sobie Ubuntu pod Windows 10 (przy czym dodam, że oficjalnie jest to niemożliwe w Windows 10 Home).

Nie będę się tu zbytnio rozwlekał o teorii, skupię się na praktyce i pewnej ścieżce konfiguracji, której używam na codzień w jednym z projektów.

Instalacja Hyper-V

Microsoft oficjalnie podaje:

"Client Hyper-V (funkcja dostępna tylko w systemie Windows 10 Pro i Windows 10 Enterprise) wymaga systemu 64-bitowego z obsługą translacji adresów drugiego poziomu (SLAT) i dodatkowo 2 GB pamięci RAM."

po angielsku zaś określa to nawet dokładniej:

  • Windows 10 Enterprise, Pro, or Education
  • 64-bit Processor with Second Level Address Translation (SLAT).
  • CPU support for VM Monitor Mode Extension (VT-c on Intel CPUs).
  • Minimum of 4 GB memory.

Opcje wirtualizacji wymagają zazwyczają włączenia w BIOS/UEFI, żeby zainstalować klienta wirtualizacji w Windows:

  1. przechodzimy do "nowego" Panelu Sterowania
  2. klikamy "Apps" i przesuwamy zawartość okna po prawej na sam dół
  3. klikamy "Programs and Features"
  4. klikamy "Turn Windows features on or off"
  5. zaznaczamy Hyper-V, klikamy OK i czekamy na instalację i restart

Pobranie Ubuntu

Ponieważ symulujemy całą maszynę, można w niej zainstalować różne odmiany - osobom leniwym polecałbym standardowe wydanie 64-bitowe z interfejsem graficznym:

Przechodzimy do strony https://ubuntu.com/download/desktop i pobieramy ISO starszej wersji 18.04 z długim okresem wsparcia (LTS) albo krótko wspieranej 19.10 (jest nowsza, ale może zawierać więcej błędów takich jak startowanie przez kilka minut).

Po pobraniu warto sprawdzić sumę kontrolną pobranego pliku - ja często wpisuję w Google "ubuntu download mirror", przechodzę do jednego z serwerów lustrzanych, pobieram plik SHA256SUMS i porównuję wpis z wynikiem działania komendy

certutil -hashfile nazwaPliku.iso SHA256

Utworzenie wirtualnego switcha do połączeń sieciowych

  • otwieramy menu Start
  • wyszukujemy i otwieramy Hyper-V manager
  • z menu głównego Action lub bocznego wybieramy Virtual Switch Manager
  • tworzymy nowy switch dla "External network" i odpowiedniego urządzenia sieciowego z systemu Windows.

Stworzenie nowej maszyny wirtualnej

  • w Hyper-V manager z menu głównego Action lub bocznego wybieramy New \ Virtual Machine
  • w kreatorze podajemy naszą nazwę dla maszyny i lokalizację dla plików
  • wybieramy jaki komputer będziemy symulować - tego wyboru nie można później zmienić i w zależności od niego system "wewnątrz" musi mieć wsparcie dla innych technologii.

Generacja 1 wspiera zarówno systemy operacyjne 32-bitowe jak i 64-bitowe, ma również obsługę portów szeregowych, stacji dyskietek i kontrolerów IDE i oparta jest o BIOS (poniżej ekran pokazujący ustawienia z gotowej maszyny, a nie ekran kreatora).

"Dwójka" to UEFI, kontrolery SCSI i możliwość używania Secure Boot.

  • ...a wracając do kreatora - wybieramy wielkości RAM (może być przydzielany dynamicznie stosownie do potrzeb, ale ja tego nie polecam szczególnie przy uruchamianiu kilku maszyn naraz, gdyż wtedy trudno określić maksymalne zużycie i mogą wystąpić problemy ze stabilnością przy braku pamięci)
  • ustawiamy połączenie sieciowe
  • wybieramy ustawienia dysku twardego, który będzie podłączony do maszyny (plik z dyskiem jest rozszerzany aż do podanej wielkości przy zapisywaniu kolejnych danych; Ubuntu w wersji desktopowej minimalnie wymaga 8,6GB, ja polecam przynajmniej 10 albo 20GB)
  • decydujemy, czy chcemy zamontować w symulowanym napędzie DVD pobrany obraz ISO

Dopieszczanie konfiguracji

Po zakończeniu kreatora maszyna powinna zostać stworzona. Polecam wejść w jej ustawienia i dodać więcej symulowanych rdzeni CPU (przy czym ilość tutaj podana może być większa niż ilość rdzeni fizycznych i jest po prostu odpowiednio skalowana), ustawić sobie stopień wykorzystania zasobów, jak również włączyć pokazaną na obrazku opcję zgodności (to ostatnie może pomóc przy problemie ze sterownikiem bufora ramki).

Jak wspomniałem generacja 2 maszyn obsługuje Secure Boot, do poprawnej instalacji należy go tylko włączyć:

Uwaga - ja do swoich celów deaktywuję wszystkie Integration Services (pomimo pewnej dokumentacji Microsoftu pewne rzeczy nie do końca mi chciały działać) i Checkpoints (jest to dla mnie niepotrzebne i niepotrzebnie zużywające dysk), z kolei w Automatic Start Action zazwyczaj wybieram None (gdy maszyna nie jest "serwerowa") i w Automatic Stop Action wybieram "Turn off the virtual machine" (jest to świadome i wiąże się z ewentualną utratą plików, ale wymuszone przez brak Integration Services)

Instalacja Ubuntu

Ta nie różni się od instalacji na "prawdziwej" maszynie - wybieramy układ klawiatury, nazwę użytkownika, lokalizację, itp.

Dwie uwagi - polska klawiatura z prawym Altem to klawiatura "Polish", domyślnie Ubuntu zakłada również partycję na pliki tymczasowe... co niekoniecznie może być dla nas wygodne:

  • w przypadku gdybyśmy chcieli zmienić jej rozmiar, zmiana wielkości innych partycji może być niemożliwa bez przeinstalowania wszystkiego
  • pliki tymczasowe mogą być trzymane w RAM oszczędzając SSD

Ja zazwyczaj zajmuję sobie cały dysk na główny system plików (partycja typu EFI jest wymagana i tutaj spokojnie wystarcza 40MB):

Dopieszczanie konfiguracji

Po zainstalowaniu systemu warto zmienić rozdzielczość - w tym celu edytujemy plik /etc/default/grub np. podając z linii komend:

sudo gedit /etc/default/grub

i w pliku w linii z GRUB_CMDLINE_LINUX_DEFAULT dodajemy wpis zaczynający się od video, a kończący na naszej rozdzielczości:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=hyperv_fb:1280x720"

Zmiany zatwierdzamy komendą:

sudo update-grub

Kolejnym krokiem może być zlikwidowanie pliku zawierającego partycję z plikami tymczasowymi (zakładana, gdy Ubuntu nie ma oddzielnej partycji):

sudo swapoff -a
sudo rm /swapfile

i przeniesienie plików tymczasowych do RAM - należy dodać do pliku /etc/fstab linijki:

tmpfs /tmp rw,nodev,nosuid,size=512m 0 0
tmpfs /var/tmp rw,nodev,nosuid,size=512m 0 0

(jak zauważył jeden z komentujących mojego poprzedniego posta: wysuwam pomysł i podaję przykłady zakładając, że użytkownik wie, co to jest komputer i w dobie Internetu i masy wiedzy wszelakiej potrafi czytać i drążyć temat na tyle na ile mu potrzeba; tutaj na przykładzie ustawiam 512MB dla obu katalogów)

Zmiany wymagają oczywiście restartów.

Wymiana plików

Ponieważ nie chcę sobie "zaśmiecać" systemu Windows, to od strony Ubuntu instaluję serwer SSH:

apt-get install openssh-server

zaś od strony Windows potrzebuję np. darmowego WinSCP tworząc mu połączenie typu SFTP do adresu IP wskazanego w Ubuntu komendą

ifconfig

Podsumowanie

I tyle...

Działa, gra, buczy...

i aż chciałoby się powiedzieć, że Windows 10 to taki dziwny twór który ciężko zdefiniować - z jednej strony razi w nim prymitywizm i ogromne niedoróbki, z drugiej strony zawiera on co najmniej kilka mocno zaawansowanych rozwiązań, które są zrobione całkiem sprytnie i wygodnie.

Nie ma tu może akceleracji grafiki czy ekranów 4K, ale... do normalnej pracy i zabaw nie wpływających na Windows jak znalazł.

Chcesz poprogramować? Proszę bardzo.

Oddzielna maszyna do "ciekawych" strony? Sie robi.

itd. itd.

Dziękuję za uwagę.