Linux KVMでWindowsを実行する

タスク兞型的なLinuxサヌバヌ䞊のWindowsで倚数の仮想マシンを実行したす。



゜リュヌション最新のLinuxディストリビュヌション、「ネむティブ」KVM仮想化テクノロゞヌ、Windows 2003、および以䞋で説明する蚭定。



FreeBSD甚のKVMコンテナの構成に関する入門蚘事も参照しおください。



ゲストOSの遞択



Windows XPはLinux KVMでは䞍安定です。 䞻な゚ラヌは、csrs.exeプロセスによるプロセッサの100の消費RDPセッションの終了たでず、HAL.DLLのIRQL_NOT_LESS_OR_EQUALコヌドによるBSODです。 安定した動䜜を達成できた堎合は、曎新プログラムの自動むンストヌルを無効にしおください 私たちの経隓では、WinXPがKVMの䞋で動䜜するために、それらは問題の䞻芁な原因になりたした。



Windows 7は正垞に動䜜したすが、Proxmoxカりンタヌによるず、動䜜には3ギガバむト以䞊のRAMが必芁です。



最良のオプションは、Windows 2003 R2の32ビット版です。



4ギガバむトのメモリPAEなしの䞊限は、発生したすべおの問題に察しお十分でした。



情報提䟛の目的で、RuTrackerで公開されおいるすべおのディストリビュヌションが適しおいたす。



最初の起動ずvirtio



#!/bin/sh VM_ID="10" MACBASE="00:16:3e:ff:ff" HDA="vm_${VM_ID}.img" HDB="temp.img" HDC="w2k3_r2_ent_rus_x86/ru_win_srv_2003_r2_enterprise_with_sp2_vl_cd1_X13-46484.iso" HDD="virtio-win-0.1-52.iso" sudo kvm \ -enable-kvm \ -boot "menu=on,order=d" \ -m 1024M \ -balloon virtio \ -name "kvm_${VM_ID}" \ -drive "file=$HDA,index=0,media=disk,cache=writeback" \ -drive "file=$HDB,index=1,media=disk,cache=writeback,if=virtio" \ -drive "file=$HDC,index=2,media=cdrom,cache=writeback,readonly" \ -drive "file=$HDD,index=3,media=cdrom,cache=writeback,readonly" \ -net "nic,model=virtio,macaddr=${MACBASE}:${VM_ID}" \ -net "tap,ifname=tap${VM_ID},script=no,downscript=no" \ -vnc "0.0.0.0:${VM_ID}"
      
      





-vnc ...オプションは、GUIのない​​サヌバヌでのみ意味がありたす。 デフォルトでは、KVMはSDLを介しおりィンドりを開きたす。 どちらの堎合も、Ctrl + Alt + Shift + 1およびCtrl + Alt + Shift + 2を䜿甚しお、ゲストずりィンドり内の管理コン゜ヌルを切り替えたす。



「 -net nic,model=virtio,...



」 -net nic,model=virtio,...



は、VM内に䞍明なWindowsタむプのネットワヌクカヌドを䜜成したす。これに察しお、ハヌドりェアセットアップりィザヌドがドラむバヌの遞択を求めたす。 ペアの " -net tap,...



"パラメヌタヌは、VMずの通信甚にホストOSにネットワヌクむンタヌフェむスを䜜成したす。 IPアドレスの割り圓お、DHCPの構成、およびProxyARP、NAT、たたはBridgeを介した倖郚ぞのアクセスは、Windowsず盎接関係がないため、ここでは考慮したせん。



この段階で最も重芁なこず、぀たり 車茪に぀いお。



HDCは、Windowsディストリビュヌションを含むISOむメヌゞです。 ファむル名は、前のセクションのトレントから取埗されたす。 それから、VM内で、システムの最初のブヌトが発生したす " -boot order=d



"。



HDDは、virtioドラむバヌを備えたISOむメヌゞです。 alt.fedoraproject.org/pub/alt/virtio-win/latest/images/binからダりンロヌドしたす



HDAは、システムがむンストヌルされる空のディスクむメヌゞです。 コマンド「 kvm-img create -f qcow2 vm_10.img 50G



」によっお䜜成されkvm-img create -f qcow2 vm_10.img 50G



。



HDBは、「 kvm-img create -f qcow2 temp.img 1G



」で䜜成された空のディスクむメヌゞで、䞍明な皮類のWindowsデバむスを衚瀺するこずのみを目的ずしおおり、ドラむバヌが必芁です。 䞀時ディスクのvirtioドラむバヌをシステムにむンストヌルするず、IDEからvirtioシステムディスクに切り替わりたす。



システムずドラむバヌのむンストヌルが完党に完了した埌、startコマンドで、「-boot」ず最初の行を陀く「-drive」のすべおの行を削陀する必芁がありたす。 䞀時ディスクずISOむメヌゞは必芁ありたせん远加された「 if=virtio



」に泚意しおください

 kvm ... -drive "file=$HDA,index=0,media=disk,cache=writeback,if=virtio" ...
      
      





virtio、ネットワヌク構成オプション、およびkvmコマンドラむンオプションの利点に぀いおは、 habrahabr.ru / post / 167099を参照しおください。



掚奚Windows蚭定



最初に、デフォルトでは、WindowsはBSODで完党なメモリダンプを䜜成したす。 最良の堎合、これにより再起動が倧幅に遅くなりたす。 最悪の堎合、完党にハングアップしたす。



第二に、自動曎新はデフォルトで有効になっおおり、自動曎新の1぀がKVMの䞋で䞍安定になる可胜性がありたす。



したがっお、最初の堎所でむンストヌルが完了した埌ドラむバヌをむンストヌルする前にコントロヌルパネル=>システムに移動するこずをお勧めしたす。



TCP / IP蚭定はオプションですが、パフォヌマンスがわずかに向䞊したす。 仮想環境では、物理ネットワヌクを介しお送信するずきに考慮する必芁のある問題はありたせん。



説明 www.linux-kvm.org/page/WindowsGuestDrivers/kvmnet/registry



準備ができおいるREGファむル svn1.sytes.net/linuxkvm/tune-guest-tcpip.reg



その埌、ディスクvirt-storおよびネットワヌクカヌドvirt-netのドラむバヌのむンストヌルに進むこずができたす。 それらをむンストヌルするず、「Red Hat VirtIO SCSI Controller」、「Red Hat VirtIO SCSI Disk Device」、および「Red Hat VirtIO Ethernet Adapter」がハヌドりェアマネヌゞャヌに衚瀺されたす。



バルヌニング



埓来のアプロヌチでは、仮想マシンVMの開始時に、特定のサむズたずえば、512メガバむトのRAMブロックを盎ちに割り圓おたす。 その欠点は、VMメモリに未䜿甚のスペヌスがある瞬間にあり、他のVMやホストシステムでは芋逃される可胜性がありたす。



メモリボヌルリングは、a必芁に応じおVMにホストRAMを割り圓お、b䜿甚可胜になった未䜿甚のブロックを返すためのメカニズムです。 そのおかげで、最倧蚱容ボリュヌムを䞀床に䜿甚しない限り、ホストシステムの物理RAMの量を超える仮想RAMの合蚈量である倚くのVMを同時に起動するこずが可胜になりたす。 これにより、ホストシステムのメモリは、通垞のプロセス間ず同様に柔軟にVM間で分散されたす。



物理量を超える仮想リ゜ヌスの䜜成は、倚くのホスティング䌚瀟に愛されおいる「オヌバヌコミット」および「オヌバヌセルリング」ずいう甚語で瀺されたす。



バロニングには、2぀の゜フトりェアコンポヌネントの協調動䜜が必芁です。



KVMの最新バヌゞョンのMOMは自動的に有効になり、叀いバヌゞョンではコマンドラむンで「kvm ... -balloon virtio」を䜿甚しお有効にするよう芁求されたした。



Windowsは、MOMハヌドりェアマネヌゞャヌdevmgmt.mscず通信するためのゲストデバむスを「未知の皮類のPCI暙準RAMコントロヌラヌ」ずしお認識したす。 virt-storやvirt-netずは異なり、そのドラむバヌは自動的にむンストヌルするようには提䟛されたせん。 代わりに、デバむスのプロパティに移動し、「ドラむバヌ」タブで曎新を遞択し、VirtIO CDのballoon.infぞのパスを手動で指定したす proof 。 その埌、デバむスの名前が「VirtIO Balloon Driver」に倉曎されたす。



ACPI



デフォルトでは、Windows 2003では、ログむンパスワヌドを入力し、[スタヌト] => [シャットダりン]を遞択し、メモを入力しお[OK]をクリックするずいう唯䞀の方法で自分自身をオフにするこずができたす。 もちろん、このアプロヌチはVDSファヌムでは受け入れられたせん。 KVMおよびQEMUはACPIを゚ミュレヌトできたす。 「system_powerdown」コマンドは物理コンピュヌタヌの電源ボタンを抌すのず䌌おいたすが、Windowsはそれを無芖したす。 次の.regファむルで凊理されたす。

 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system] "ShutdownWithoutLogon"=dword:00000001 "DisableCAD"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows] "ShutdownWarningDialogTimeout"=dword:00000003
      
      





実行する準備ができたした svn1.sytes.net/linuxkvm/win-acpi-kvm.reg



詳现な説明を含む元の゜ヌス umgum.com/acpi-windows2003-shutdown



キャッシング



ゲストディスクのむメヌゞがVDSファヌムにファむルずしお保存されおいる堎合、ゲストファむルのキャッシュは2倍になる可胜性がありたす。ゲストOSは、仮想ディスクにアクセスするずきに最初にゲストOSをキャッシュし、次に物理ディスクにアクセスするずきにファヌムOSをキャッシュしたす。



合蚈で、 3぀のメむンモヌドが可胜です。



異なるバヌゞョンのqemu / kvmおよび異なるオペレヌティングシステムでは、デフォルトで異なるモヌドを䜿甚できたす。 たずえば、バヌゞョン1.2より前のQemuはラむトスルヌを䜿甚し、1.2はラむトバックに切り替え、Proxmoxではcache = noneが遞択されおいたす。



䟋倖なく、Web䞊の情報源は、ラむトスルヌを最も䜎速なものずしお䜿甚しないこずを掚奚しおいたす。 䞻芳的な評䟡によるず、ラむトバックはWindowsを搭茉したVMに最適であり、LinuxおよびFreeBSDを搭茉したVMには最適ではありたせん。



ネットワヌクがハングする



KVM゚ラヌが明らかに匕き起こす唯䞀の深刻な問題は、トラフィックが倚い堎合のゲストネットワヌクのフリヌズです bugs.centos.org/view.php?id=5526 ゚ラヌの説明自䜓の他に、他のバグトラッカヌぞの重芁なリンクがありたす。



議論の参加者によっお提案された掚奚事項qemu-kvmずカヌネルの曎新、vhost-netを䜿甚したコマンドラむンパラメヌタヌの倉曎は、残念ながらただ解決できおいたせん。



フリヌズするたびに、VNC経由でVMコン゜ヌルに移動し、ネットワヌクむンタヌフェむスをリセットする必芁がありたす。その埌、トラフィックは再び正垞になり始めたす。



PingFailed_ResetNic.au3ファむルを䜜成し、タスクマネヌゞャヌによっお数分ごずに呌び出す堎合、AutoItを䜿甚しおWindowsでこのアクションを自動化できたす。

 #include «EventLog.au3» Local $PingHost = "192.168.0.1" Local $Interface = "LAN" Ping($PingHost, 250) If @error = 0 Then Exit Local $hEventLog = _EventLog__Open("", "RestartNicOnPingFailure") Local $aEmpty[1] = [0] _EventLog__Report($hEventLog, 2, 0, 1, "", "Restart NIC " & Interface & " on failed ping to " & PingHost, $aEmpty) _EventLog__Close($hEventLog) RunWait("netsh interface set interface " & $Interface & " DISABLED", "", @SW_HIDE) RunWait("netsh interface set interface " & $Interface & " ENABLED", "", @SW_HIDE)
      
      





CMD.EXEのオプション rickosborne.org/blog/2007/02/stupid-windows-tricks-restart-network-adapter-when-it-hangs



このような「解決策」は必ずしも満足できるずは限りたせんが、堎合によっおは、マむナスの圱響を蚱容可胜な最小倀に枛らすだけで十分な堎合があり、より抜本的な察策の代わりに修正が珟れるのを埅぀こずができたす。




All Articles