CentOS 7 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 für VM angeben, der Name hat nichts mit dem Hostname zu tun, dieser wird bei der Installation des Betriebssystems gesetzt:

„Generation 2“ auswählen:

Arbeitsspeicher konfigurieren, es ist auch möglich dynamischen Arbeitsspeicher zu konfigurieren:

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

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

Beim SCSI-Kontroller eine Festplatte hinzufügen:

Neue Festplatte erstellen:

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

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

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 30 GB. Nach diesem Schritt wird die virtuelle Festplatte erstellt, dies kann ja nach Grösse einige Minuten dauern:

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

Bei Firmware den „Secure Boot“ ausschalten, beim SCSI-Kontroller eine virtuelles DVD Laufwerk mit dem CentOS Installations-Image hinzufügen. Alle Integrationsdienste aktivieren und Start- und Stopp-Funktionen wie oben im Bild konfigurieren. Danach kann die VM gestartet werden:

Einstellungen übernehmen:

CentOS 7 Installation

„Install CentOS 7“ auswählen um mit der CentOS Installation zu beginnen:

„English“ als Systemsprache wählen:

„Date & Time“ „Europe/Zurich“ wählen „Keyboard“ auf „Swiss German“ hinzufügen und „English“ entfernen „Security Policy“ komplett deaktivieren „Network & Host Name“ aktivieren (Schalter oben rechts auf „ON“ setzen) „Installation Source“ folgende HTTP Adresse eintragen: „http://mirror.switch.ch/ftp/mirror/centos/7/os/x86_64/“. Bei „Software Selection“ „Minimal Install“ wählen:

/boot und /boot/efi als Standardpartitionen erstellen, die restlichen Partitionen als LVM konfigurieren:

Damit die Festplatte bzw. Partitionen im laufenden Betrieb vergrössert werden können, müssen die Partitionierung mit LVM konfiguriert werden. Für ein normales System und einer 30 GB grossen Festplatte ist folgende Partitionierung empfehlenswert:

PartitionFilesystemGrösse
EFI PartitionEFI „bootflag“ setzen512 MB
/bootxfs512 MB
/LVM xfs5 GB
/homeLVM xfs2 GB
/varLVM xfs25 GB
swapLVM swap2 GB

Es kommt immer darauf an, für was das System genutzt wird. Für eine Datenbank, Webserver oder Mailserver sollte man das /var Verzeichnis sehr grosszügig Partitionieren, da dort die „variablen“ Daten abgelegt sind. Wie bereits Beschrieben muss vor der Partitionierung genau abgeklärt werden für welche Dienste und Daten das System verantwortlich ist und anhand dieser Erkenntnisse die Partitionierung und LVM gestalten. Die Grösse der Partitionen die im LVM konfiguriert werden, kann im laufenden Betrieb vergrössert werden, weitere Details dazu im Kapitel „Festplatte vergrössern“. Die Grösse der EFI und /boot Partition kann unabhängig auf allen Systemen immer gleich gross sein (512MB).

Mit Klick auf „Begin Installation“ die Installation starten:

Während der Installation das Root Passwort setzen, mit Klick auf „Root Password“:

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

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:

„PermitRootLogin yes“ auskommentieren. Danach mit systemctl restart ssh neustarten:

systemctl restart sshd

Mit „ip addr“ die IP anzeigen lassen um sich mit Putty zu verbinden. Die IP sollte auch im Hyper-V Konsole anzeiget werden.

CentOS 7 Konfiguration

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, dies wird in der Grup Konfiguration vorgenommen:

vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet elevator=noop"
GRUB_DISABLE_RECOVERY="true"

Grub Konfiguration übernehmen:

grub2-mkconfig -o /boot/grub2/grub.cfg

Hyper-V Tools

Installation

Die Hyper-V Tools hypervkvpd, hypervvssd und hypervfcopyd müssen noch zusätzlich installiert werden. Den Dienst hypervfcopyd braucht es nicht unbedingt, siehe Tabelle für weitere Details:

hypervkvpdis 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.
hypervvssdimplementation of the host initiated guest snapshot for Hyper-V.
hypervfcopydimplementation of host to guest copy functionality for Linux.

Hyper-V Tools installieren:

yum install hyperv-daemons hypervfcopyd hypervkvpd hypervvssd hyperv-daemons-license

Danach den Server neustarten:

reboot

Jetzt sollten die Hyper-V Dienste aktiv sein:

ps -ef | grep hyperv
root       725     1  0 14:05 ?        00:00:00 /usr/sbin/hypervvssd -n
root       728     1  0 14:05 ?        00:00:00 /usr/sbin/hypervkvpd -n

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: <cli prompt=„$“>user@localhost:~$ cat /tmp/test.txt</code>

cat /tmp/test.txt
test file

Festplatte vergrössern

Gehen wir von folgendem Beispiel aus, der Ist-Zustand: <cli prompt=„$“> user@localhost:~$ df -h </code>

Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  5.0G  804M  4.3G  16% /
devtmpfs                 482M     0  482M   0% /dev
tmpfs                    492M     0  492M   0% /dev/shm
tmpfs                    492M  6.4M  486M   2% /run
tmpfs                    492M     0  492M   0% /sys/fs/cgroup
/dev/sda2                506M  116M  390M  23% /boot
/dev/sda1                512M  9.5M  503M   2% /boot/efi
/dev/mapper/centos-home  2.0G   33M  2.0G   2% /home
/dev/mapper/centos-var   5.0G  105M  4.9G   3% /var
tmpfs                     99M     0   99M   0% /run/user/0

Die Partition /var soll 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 prompt=„$“>user@localhost:~$ dmesg</code> <sxh;gutter:false;> [ 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 </code> Wie zu sehen hat das System die Änderung der Festplattenkapazität von 15 GB auf 20 GB erkannt. 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

Diese Meldung mit „Ignore“ bestätigen:

Error: The backup GPT table is not at the end of the disk, as it should be.  This might mean that
another operating system believes the disk is smaller.  Fix, by moving the backup to the end (and
removing the old backup)?
Fix/Ignore/Cancel? Ignore

Diese Meldung mit „Fix“ bestätigen:

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

Danach wird die Partitionstabelle ausgegeben:

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   xfs
 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: <cli prompt=„)“>(parted) mkpart</code>

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): <cli prompt=„)“>(parted) print</code>

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   xfs
 3      1023MB  16.1GB  15.1GB                     lvm
 4      16.1GB  21.5GB  5369MB  ext2     

Partition 4 (die oben notierte Numer) als LVM konfigurieren: <cli prompt=„)“>(parted) set 4 lvm on</code> Zur Verifizierung nochmals die Partitionen anzeigen lassen: <cli prompt=„)“>(parted) print</code>

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   xfs
 3      1023MB  16.1GB  15.1GB                     lvm
 4      16.1GB  21.5GB  5369MB  ext2               lvm

parted beenden: <cli prompt=„)“>(parted) quit</code> 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 centos hinzufügen:

vgextend centos /dev/sda4

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

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

Jetzt kann das Logical Volume var mit dem Physical Volume sda4 vergrössert werden:

lvextend /dev/centos/var /dev/sda4

Danach sollte die Volume Group keinen freien Speicher mehr haben:

vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  centos   2   4   0 wz--n- 18.99g 4.00m 

Zusätzlich muss noch das Filesystem vergrössert werden mit Hilfe des Tools xfs_growfs:

xfs_growfs /dev/centos/var
meta-data=/dev/mapper/centos-var isize=256    agcount=4, agsize=327168 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=1308672, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 1308672 to 2618368

Freie Speicher auf Partition /var sollte jetzt 5 GB mehr betragen (vorher 4.6GB jetzt 9.6GB) <cli prompt=„$“>user@localhost:~$ df -h</code>

Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  5.0G  804M  4.3G  16% /
devtmpfs                 482M     0  482M   0% /dev
tmpfs                    492M     0  492M   0% /dev/shm
tmpfs                    492M  6.4M  486M   2% /run
tmpfs                    492M     0  492M   0% /sys/fs/cgroup
/dev/sda2                506M  116M  390M  23% /boot
/dev/sda1                512M  9.5M  503M   2% /boot/efi
/dev/mapper/centos-home  2.0G   33M  2.0G   2% /home
/dev/mapper/centos-var    10G  105M  9.9G   2% /var
tmpfs                     99M     0   99M   0% /run/user/0

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

cd /boot/efi/EFI
cp -r centos/* BOOT/

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/