Debian Jessie Hyper-V

Hyper-V Einleitung

Generation 1 und Generation 2

Die Generation eines virtuellen Computers bestimmt die virtuelle Hardware und Funktion, die dem virtuellen Computer bereitgestellt werden. In Hyper-V stehen zwei unterstützte Generationen virtueller Computer zur Verfügung: Generation 1 und Generation 2. Virtuelle Computer der Generation 2 weisen ein vereinfachtes virtuelles Hardwaremodell auf und unterstützen die Unified Extensible Firmware Interface-Firmware (UEFI) anstelle der BIOS-basierten Firmware. Die Mehrheit der Legacygeräte wurde auch aus den virtuellen Computern der Generation 2 entfernt.

In früheren Hyper-V-Versionen gab es nur eine Generation des virtuellen Computers. In Windows Server 2012 R2 stehen zwei Generationen virtueller Computer zur Verfügung.

Der eigentliche Vorteil der Generation 2 ist das Booten von SCSI Festplatten, somit kann im Gegenteil zu Generation 1 die Festplatte im laufenden Betrieb vergrössert werden (war mit IDE Festplatten nicht möglich). Die Generation 2 stellt ausserdem folgende neue Funktionen zur Verfügung:

  • PXE-Start mit Hilfe einer standardmäßigen Netzwerkkarte: In früheren Hyper-V-Versionen mussten Sie eine ältere Netzwerkkarte installieren, wenn Sie eine Remoteinstallation auf dem Gastbetriebssystem mit Hilfe des PXE-Starts vornehmen wollten. In virtuellen Computern der Generation 2 stehen ältere Netzwerkkarten nicht zur Verfügung. Virtuelle Computer der Generation 2 unterstützen den PXE-Start mit Hilfe einer standardmäßigen Netzwerkkarte.
  • Starten von einer virtuellen SCSI-Festplatte: In früheren Hyper-V-Versionen war es nicht möglich, einen virtuellen Computer von einer virtuellen SCSI-Attached-Festplatte oder von einer DVD aus zu starten. Virtuelle Computer der Generation 2 können von einer virtuellen Festplatte oder DVD gestartet werden, die an den SCSI-Controller angefügt ist. Der virtuelle IDE-Controller ist in virtuellen Computer der Generation 2 nicht verfügbar.
  • Sicherer Start (standardmäßig aktiviert): Beim sicheren Start handelt es sich um ein Feature, mit dem verhindert wird, dass nicht autorisierte Firmware, Betriebssysteme oder UEFI-Treiber (auch als Options-ROMs bekannt) zur Startzeit ausgeführt werden.
  • UEFI-Firmwareunterstützung

Wichtig: Die Funktion „Sicherer Start“ kann für Linux bzw. Debian nicht genutzt werden, der Sichere Start muss explizit in der VM Konfiguration ausgeschaltet werden. Mehr dazu später. Virtuelle Computer mit Generation 1 können nicht in Generation 2 umgewandelt werden, es ist eine neue Installation erforderlich.

Hyper-V VM Konfiguration

Name: Debian8

Name für die VM angeben, der Name hat nichts mit dem Hostname zu tun, dieser wird bei der Installation des Betriebssystems gesetzt.

Generation 2

„Generation 2“ auswählen.

Startup memory: 512

Arbeitsspeicher konfigurieren.

Connection: LAN33

Netzwerkanschluss wählen, die VM muss eine Internetverbindung haben, die Betriebssystem-Installation läuft über das Internet.

Attach a cirtual hard disk later

Die virtuelle Festplatte wird später konfiguriert, da man bei diesem Schritt nur dynamische Festplatten erstellen kann und keine statische.

Add Hard Drive

Beim SCSI-Kontroller eine Festplatte hinzufügen.

New

Neue Festplatte erstellen.

Fixed size

Fixe Grösse wählen, da diese eine bessere Performance hat als eine dynamische.

Name: Debian8.vhdx

Name und Dateipfad für die virtuelle Festplatte wählen.

Size: 20 GB

Grösse für Festplatte wählen und die Auswählen bestätigen. Je nach gewünschtem System sollte die Festplatten Grösse ausgerichtet werden. Die meisten Linux Servern brauchen nicht mehr als 20 GB. Nach diesem Schritt wird die virtuelle Festplatte erstellt, dies kann ja nach Grösse einige Minuten dauern.

Apply

Festplatte wurde erstellt und dem SCSI-Kontroller hinzugefügt, mit „Apply“ bestätigen.

Secure Boot

Bei Firmware den „Secure Boot“ ausschalten, beim SCSI-Kontroller eine virtuelles DVD Laufwerk mit dem Debian Installations-Image hinzufügen, das Image ist hier zu finden: debian-8.5.0-amd64-netinst.iso . Alle Integrationsdienste aktivieren und Start- und Stopp-Funktionen wie oben im Bild konfigurieren. Danach kann die VM gestartet werden.

Boot order

DVD Laufwerk bei Boot order als erste Stelle setzen. Danach kann die VM gestartet werden.

Debian Jessie Installation

Install

„Install“ auswählen und Bestätigen um mit der Debian Installation zu beginnen.

Install

„English“ als Systemsprache wählen.

Install

Für Land zuerst „other“ wählen, da Europa bzw. Schweiz nicht in dieser Auswahl vorhanden ist.

Install

„Europe“ wählen.

Install

„Switzerland“ wählen und bestätigen.

Install

Als Umgebungs-Sprache „United States en_US.UTF-8“ wählen.

Install

Tastaturlayout „Swiss German“ wählen.

Install

Hostname vergeben.

Install

Domainname vergeben. Hostname und Domainname können auch später noch geändert werden.

Install

Super User Passwort setzen und mit einer wiederholten Eingabe bestätigen.

Install

Die Installation verlangt noch ein User Account.

Install

Benutzername wählen.

Install

Passwort setzen und bestätigen.

Install

Die Festplatten Partitionierung mit der Auswahl auf „Manual“ starten.

Install

Die virtuelle Festplatte auswählen (sda).

Install

Leere Partitionstabelle erstellen mit Bestätigung auf „Yes“.

Damit die Festplatte bzw. Partitionen im laufenden Betrieb vergrössert werden können, müssen die Partitionierung mit LVM konfiguriert werden. In diesem Beispiel wird eine 20 GB grosse Festplatte mit folgender Partitionierung erstellt:

PartitionFilesystemGrösse
EFI PartitionEFI „bootflag“ setzen512 MB
/bootext4512 MB
/LVM ext45 GB
/optLVM ext42 GB
/varLVM ext415 GB
swapLVM swap2 GB

Install

Den Freien Speicherplatz auswählen.

Install

„Create a new partition“ für das Erstellen der EFI Partition auswählen.

Install

Für die EFI Partition die Grösse auf 512MB setzen.

Install

„Beginning“ wählen, eigentlich spielt es keine Rollte, da die Festplatte virtuell ist.

Install

Bei „Use as“, „EFI System Partition“ wählen und „Bootable flag“ auf „on“ setzen.

Install

„FREE SPACE“ auswählen um die /boot Partition zu erstellen.

Install

„Create a new partition“ wählen.

Install

512MB Grösse für die „/boot“ Partition angeben.

Install

„Beginning“ auswählen.

Install

EXT4 als Filesystem und /boot als Mount point wählen.

Install

„FREE SPACE“ wählen, für die LVM Partition.

Install

„Create a new partition“ wählen.

Install

Die maximale verfügbare Grösse bestätigen.

Install

„Use as“ „physical volume for LVM“ wählen.

Install

„Configure the Logical Volume Manager“ wählen um die LVM Konfiguration zu starten.

Install

„Yes“ auswählen.

Install

„Create volume group“ wählen um eine Volumen Gruppe zu erstellen.

Install

Name „vg_debian“ angeben, oder einen anderen Name, zur Verständlichkeit zwingend am Anfang des Namens vg_ wählen. (vg = volume group).

Install

Partition /dev/sda3 wählen (die zuvor kreierte LVM Partition).

Install

„Create logical volume“ wählen um eine neues logisches Volumen zu erstellen.

Install

Volume Groupe „vg_debian“ (die zuvor kreierte Volume Group) auswählen um das Logische Volume der Gruppe hinzuzufügen.

Install

Name für den Logical Volume vergeben, am besten lv_{mountpoint} angeben, also lv_root, lv_opt, lv_var, lv_swap.

Install

Grösse für den entsprechenden Volume Group angeben.

Install

Als Resultat, sollten 4 logical Volumes, 1 volume group und 1 physical volume konfiguriert sein.

Install

Die Logical Volume müssen noch formatiert werden, leere lv Partition auswählen.

Install

Für jedes Logical Volume entsprechender Mountpoint und Filesystem setzen.

Install

Für Logical Volume „lv_swap“ als Typ „swap area“ auswählen und bestätigen.

Install

Nach der Partitionierung sollte die Konfiguration ähnlich sein wie hier abgebildet.

Install

Änderung bestätigen mit „Yes“.

Install

Für den APT Server „Switzerland“ auswählen

Install

„ftp.ch.debian.org“ auswählen.

Install

Mit „No“ weiterfahren.

Install

Nur „SSH Server“ markieren und mit „Continue“ bestätigen. Danach startet die Installation.

Install

Die Installation ist fertig, mit „Continue“ wird das DVD Laufwerk ausgeworfen und neugestartet.

Install

Nach dem Neustart solle in der Konsole „debian login:“ anzeigt werden.

Install

Standardmässig ist root Login über SSH deaktiviert, da SSH und alle erforderlichen Benutzer erst später Konfiguriert werden, muss root Login per SSH temporär erlaubt werden. Um diese Einstellung zu ändern muss die Konfigurations-Datei sshd_config angepasst werden.

Install

„PermitRootLogin without-password“ auskommentieren und „PermitRootLogin yes“ hinzufügen. Danach mit systemctl restart ssh neustarten.

systemctl restart ssh

Debian Jessie Konfiguration

Jetzt kann die Grundkonfiguration vorgenommen werden. Ausser den Abschnid I/O Scheduler und Hyper-V Tools ist die Grundkonfiguration je nach gebraucht individuell.

I/O Scheduler

Microsoft empfiehlt im “Best Practices for running Linux on Hyper-V” (https://technet.microsoft.com/de-ch/library/dn720239.aspx) den I/O Scheduler auf „NOOP“ zu setzen und GRUB Timeout auf 1000, dies wird in der grub Konfiguration vorgenommen:

vi /etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT=1000
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="elevator=noop"

Geänderte Grub Konfiguration einlesen:

update-grub

Hyper-V Tools

Installation

Die Hyper-V Tools hv_kvp_daemon, hv_vss_daemon und hv_fcopy_daemon sind nur für den Kernel Version >= 4.2 und im Backport Repository von Debian Jessie enthalten, deshalb muss auf den Kernel >= 4.2 aktualisiert werden, hier noch kurz die Info was genau die Hyper-V Tools sind:

hv_kvp_daemon Is the userspace component of the Hyper-V key value pair KVP driver. This pairing allows the Hyper-V host to pass configuration information (such as IP addresses) to the guest and allows the host to obtain guest version information.
hv_vss_daemon Implementation of the host initiated guest snapshot for Hyper-V.
hv_fcopy_daemon Implementation of host to guest copy functionality for Linux.

Paketliste aktualisieren:

apt-get update

Hyper-V Tools installieren:

apt-get install hyperv-daemons

Danach neustarten:

reboot

Jetzt sollten die Hyper-V Tools aktiv sein:

ps -ef | grep hv_
root        70     2  0 17:20 ?        00:00:00 [hv_vmbus_con]
root       586     1  0 17:20 ?        00:00:00 /usr/sbin/hv_fcopy_daemon -n
root       587     1  0 17:20 ?        00:00:00 /usr/sbin/hv_kvp_daemon -n
root       588     1  0 17:20 ?        00:00:00 /usr/sbin/hv_vss_daemon -n

Der KVP Daemon braucht noch zusätzliche Shell Skripte, diese Skripte unter /usr/bin erstellen:

vi /usr/bin/hv_get_dns_info
#!/bin/bash
 
# This example script parses /etc/resolv.conf to retrive DNS information.
# In the interest of keeping the KVP daemon code free of distro specific
# information; the kvp daemon code invokes this external script to gather
# DNS information.
# This script is expected to print the nameserver values to stdout.
# Each Distro is expected to implement this script in a distro specific
# fashion. For instance on Distros that ship with Network Manager enabled,
# this script can be based on the Network Manager APIs for retrieving DNS
# entries.
 
cat /etc/resolv.conf 2>/dev/null | awk '/^nameserver/ { print $2 }'
chmod +x /usr/bin/hv_get_dns_info
vi /usr/bin/hv_get_dhcp_info
#!/bin/bash
 
# This example script retrieves the DHCP state of a given interface.
# In the interest of keeping the KVP daemon code free of distro specific
# information; the kvp daemon code invokes this external script to gather
# DHCP setting for the specific interface.
#
# Input: Name of the interface
#
# Output: The script prints the string "Enabled" to stdout to indicate
#       that DHCP is enabled on the interface. If DHCP is not enabled,
#       the script prints the string "Disabled" to stdout.
#
# Each Distro is expected to implement this script in a distro specific
# fashion. For instance on Distros that ship with Network Manager enabled,
# this script can be based on the Network Manager APIs for retrieving DHCP
# information.
 
#if_file="/etc/sysconfig/network-scripts/ifcfg-"$1
if_file="/etc/network/interfaces"
 
dhcp=$(grep "$1 inet dhcp" $if_file 2>/dev/null)
 
if [ "$dhcp" != "" ];
then
echo "Enabled"
else
echo "Disabled"
fi
chmod +x /usr/bin/hv_get_dhcp_info

Nutzung

KVP

KVP (key-value pairs) wird für den Datenaustausch von Informationen zwischen virtuellen Computern und Hyper-V Host genutzt. Um die KVP Funktion zu testen kann dieses Script auf dem Hyper-V Host abgelegt und ausgeführt werden:

' Windows Script Host script to test Key Value Pair functionality
'
Option Explicit
 
Dim HyperVServer
Dim VMName
Dim WMIService
Dim VM
Dim KVP
Dim xmlDoc
Dim DisplayString
Dim exchangeDataItem 
Dim xpath
Dim node
 
'Prompt for the Hyper-V Server to use
HyperVServer = InputBox("Specify the Hyper-V Server to use (enter '.' for the local computer):") 
 
'Get name for the virtual machine
VMName = InputBox("Specify the name of the virtual machine:") 
 
'Get an instance of the WMI Service in the virtualization namespace.
Set WMIService = GetObject("winmgmts:\\" & HyperVServer & "\root\virtualization\v2")
 
'Get the VM object that we want
Set VM = (WMIService.ExecQuery("SELECT * FROM Msvm_ComputerSystem WHERE ElementName='" & VMName & "'")).ItemIndex(0)
 
'Get the KVP Object for the virtual machine
Set KVP = (VM.Associators_("Msvm_SystemDevice", "Msvm_KvpExchangeComponent")).ItemIndex(0) 
 
'Create an XML object to parse the data
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.async = "false"
 
'Iterate over GuestIntrinsicExchangeItems
for each exchangeDataItem in KVP.GuestIntrinsicExchangeItems
 
   'Load single exchange data item
   xmlDoc.loadXML(exchangeDataItem) 
 
   'Get the value for node name
   xpath = "/INSTANCE/PROPERTY[@NAME='Name']/VALUE/child:text()"
   set node = xmlDoc.selectSingleNode(xpath)
   DisplayString = DisplayString & node.Text & " : "
   'Get the data associated with the VM
   xpath = "/INSTANCE/PROPERTY[@NAME='Data']/VALUE/child:text()"
   set node = xmlDoc.selectSingleNode(xpath)
   if not node is nothing then
      DisplayString = DisplayString & node.Text & vbCrLf
   else
      DisplayString = DisplayString & vbCrLf
   end if
next
 
wscript.echo "Guest KVP information for " & VMName & vbCrLf & vbCrLf & DisplayString

Dieses Skript auf dem Hyper-V Host starten und entsprechende Informationen ausfüllen, danach sollte die Guest KVP Informationen angezeigt werden.

VSS

Hyper-V nutzt VSS (Volume Shadow Copy Service) um die virtuelle Maschine Online zu sichern. Dafür kann als Beispiel Windows Backup oder HP Data Protector genutzt werden.

FCopy

Mit fcopy (file copy) können Dateien vom Hyper-V Host in die virtuelle Maschine kopiert werden. Dazu kann der Befehl Copy-VMFile in der Powershell Konsole genutzt werden:

echo "test file" > test.txt
Copy-VMFile "LinuxVM" -SourcePath "C:\test.txt" -DestinationPath "/tmp/" -FileSource Host

Auf der virtuellen Maschine LinuxVM sollte nun im Verzeichnis /tmp die Datei test.txt vorhanden sein:

lenux@localhost:~$ cat /tmp/test.txt
cat /tmp/test.txt
test file

Festplatte vergrössern

Gehen wir von folgendem Beispiel aus, der Ist-Zustand:

df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/dm-0                     4.5G  473M  3.8G  11% /
udev                           10M     0   10M   0% /dev
tmpfs                          98M  4.3M   93M   5% /run
tmpfs                         243M     0  243M   0% /dev/shm
tmpfs                         5.0M     0  5.0M   0% /run/lock
tmpfs                         243M     0  243M   0% /sys/fs/cgroup
/dev/mapper/vg_debian-lv_var  5.5G  281M  4.9G   6% /var
/dev/sda2                     473M   34M  415M   8% /boot
/dev/mapper/vg_debian-lv_opt  1.8G  2.8M  1.7G   1% /opt
/dev/sda1                     487M  132K  486M   1% /boot/efi

Die Partition /var sollte um 5 GB vergrössert werden.

In der VM Einstellung bei der gewünschten Festplatte auf „Edit“ klicken, danach öffnet sich die Einstellung für die Festplatte.

Auf „Next >“ klicken.

„Expand“ auswählen und auf „Next >“ klicken.

Die neue Grösse der Festplatte angeben. Da wir die Festplatte um 5 GB vergrössern wollen und die Festplatte 15 GB gross ist, geben wir 20 GB an und klicken dann auf „Next >“.

Die Festplatte wurde vergrössert, auf „Finish“ klicken um den Assistenten zu beenden.

Im dmesg Protokoll sollte nach dem Vergrössern folgende Meldung erscheinen: <cli> root@localhost:~$ dmesg </code>

[  270.913368] hv_storvsc vmbus_0_14: cmd 0x28 scsi status 0x2 srb status 0x82
[  270.913375] hv_storvsc vmbus_0_14: stor pkt ffff88001e66cc80 autosense data valid - len 18
[  270.913378] storvsc: Sense Key : Unit Attention [current]
[  270.913383] storvsc: Add. Sense: Capacity data has changed
[  270.913567] sd 0:0:0:0: [sda] 41943040 512-byte logical blocks: (21.4 GB/20.0 GiB)
[  270.913705] sda: detected capacity change from 16106127360 to 21474836480

Wie zu sehen hat das System die Änderung der Festplattenkapazität von 15 GB auf 20 GB erkannt. Um den neuen Platz zu formatieren und einzubinden muss zuerst das Tool parted installiert werden:

apt-get install parted

Mit dem Befehl parted das Partitionierungs-Tool starten und als Parameter die Festplatte /dev/sda angeben:

parted /dev/sda

Mit dem Befehl print die Partitionen anzeigen lassen, die Information für die Festplattengrösse und die Position der letzten Partition merken (21.5GB und 16.1GB).

(parted) print
Warning: Not all of the space available to /dev/sda appears to be used, you can fix the GPT to use all of the space (an extra
10485760 blocks) or continue with the current setting?
Fix/Ignore? Fix
Model: Msft Virtual Disk (scsi)
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  512MB   511MB   fat32              boot, esp
 2      512MB   1023MB  512MB   ext2
 3      1023MB  16.1GB  15.1GB                     lvm

Jetzt kann der freie Platz mit Hilfe des Befehls mkpart formatiert werden. Bei „Start“ und „End“ die oben notierten Informationen eingeben, „Partition name“ und „File system type“ können leer bzw. mit Enter bestätigt werden:

(parted) mkpart
Partition name?  []?
File system type?  [ext2]?
Start? 16.1GB
End? 21.5GB

Nochmals den Befehl print ausführen und Partitionsnummer der neuen Partition merken (4):

(parted) print
Model: Msft Virtual Disk (scsi)
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  512MB   511MB   fat32              boot, esp
 2      512MB   1023MB  512MB   ext2
 3      1023MB  16.1GB  15.1GB                     lvm
 4      16.1GB  21.5GB  5369MB  ext2      

Partition 4 (die oben notierte Numer) als LVM konfigurieren:

(parted) set 4 lvm on

Zur Verifizierung nochmals die Partitionen anzeigen lassen:

(parted) print
Model: Msft Virtual Disk (scsi)
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  512MB   511MB   fat32              boot, esp
 2      512MB   1023MB  512MB   ext2
 3      1023MB  16.1GB  15.1GB                     lvm
 4      16.1GB  21.5GB  5369MB  ext2               lvm

parted beenden:

(parted) quit

Jetzt kann die neue Partition in das bestehen Volume Group aufgenommen werden. Zuerst das physische Volume erstellen (die oben notierte Nummer an /dev/sda anhängen, in diesem Beispiel also /dev/sda4):

pvcreate /dev/sda4

Danach das erstellte Physical Volume der Volume Group vg_debian hinzufügen:

vgextend vg_debian /dev/sda4

In der Anzeige der Volume Group sollte jetzt 5GB freien Speicher Anzeigen:

vgs
  VG        #PV #LV #SN Attr   VSize  VFree
  vg_debian   2   4   0 wz--n- 19.04g 5.00g

Jetzt kann das Logical Volume lv_var mit dem Pyhsical Volume sda4 vergrössert werden:

lvextend /dev/vg_debian/lv_var /dev/sda4

Danach sollte die Volume Group keinen freien Speicher mehr haben:

vgs
  VG        #PV #LV #SN Attr   VSize  VFree
  vg_debian   2   4   0 wz--n- 19.04g    0

Zusätzlich muss noch das Filesystem vergrössert werden mit hilfe des Tools resize2fs:

resize2fs /dev/vg_debian/lv_var
resize2fs 1.42.12 (29-Aug-2014)
Filesystem at /dev/vg_debian/lv_var is mounted on /var; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg_debian/lv_var is now 2795520 (4k) blocks long.

Freie Speicher auf Partition /var sollte jetzt 5GB mehr betragen (vorher 4.6GB jetzt 9.6GB)

df
Filesystem                    Size  Used Avail Use% Mounted on
/dev/dm-0                     4.5G  474M  3.8G  11% /
udev                           10M     0   10M   0% /dev
tmpfs                          98M  4.3M   93M   5% /run
tmpfs                         243M     0  243M   0% /dev/shm
tmpfs                         5.0M     0  5.0M   0% /run/lock
tmpfs                         243M     0  243M   0% /sys/fs/cgroup
/dev/mapper/vg_debian-lv_opt  1.8G  2.8M  1.7G   1% /opt
/dev/sda2                     473M   34M  415M   8% /boot
/dev/mapper/vg_debian-lv_var   11G  285M  9.6G   3% /var
/dev/sda1                     487M  132K  486M   1% /boot/efi

UEFI Boot Loader von der Konfiguration auf die Festplatte verschieben, damit die VHD(X) in eine neue VM mit neuer Konfiguration betrieben werden kann:

grub-install --target=x86_64-efi --efi-directory=/boot/efi --no-nvram --removable

Sie haben weitere Fragen zu dieser Anleitung und möchten gerne mehr Informationen oder brauchen Unterstützung? Wir helfen Ihnen gerne, unsere Kontaktdaten finden Sie hier: https://df-informatik.ch/kontakt/