ユーザ用ツール

サイト用ツール


linux:kvm

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
linux:kvm [2020/06/01 12:29] – [ゲストOSの起動] adminlinux:kvm [2022/01/06 10:40] (現在) – [ゲストOSの設定] Wiki Editor
行 1: 行 1:
 ====== Linux KVM関係 ====== ====== Linux KVM関係 ======
 ===== 参考資料 ===== ===== 参考資料 =====
-  * [[http://en.gentoo-wiki.com/wiki/KVM|Gentoo Linux Wiki KVM]] +  * [[https://wiki.gentoo.org/wiki/QEMU|Gentoo Linux QEMU]] 
-  * [[http://opensuse-man-ja.berlios.de/opensuse-html/book.kvm.html|OpenSUSE KVMキュメント]]+  * [[https://www.qemu.org/docs/master/system/index.html|QEMU User's Guide]] 
 +  * [[https://www.belbel.or.jp/opensuse-manuals_ja/book-virt.html|OpenSUSE 仮想化ガイ]] 
 +  * [[https://wiki.archlinux.jp/index.php/QEMU#QEMU_.E3.83.A2.E3.83.8B.E3.82.BF|Arch Linux QEMU]]
  
 ===== ホスト側設定 ===== ===== ホスト側設定 =====
 ==== カーネル ==== ==== カーネル ====
 +GentooのWikiに従って設定
 +
 KVMサポート KVMサポート
   Virtualization  --->   Virtualization  --->
行 24: 行 28:
        <*> 802.1d Ethernet Bridging        <*> 802.1d Ethernet Bridging
         [*]IGMP/MLD snooping         [*]IGMP/MLD snooping
-       <*> 802.1Q VLAN Support + 
-        [*]GVRP (GARP VLAN Registration Protocol) support+macvtapを利用する(後述) 
 +   
 +  Device Drivers  --->  
 +    [*] Network device support  ---
 +       [*]     MAC-VLAN support 
 +       [*]       MAC-VLAN based tap driver 
 + 
 + 
  
 KSM (複数のVM間でメモリを共有する) KSM (複数のVM間でメモリを共有する)
   Processor type and features  --->   Processor type and features  --->
     [*] Enable KSM for page merging     [*] Enable KSM for page merging
- 
-プリエンプションの設定(Serverでも普通に動いたが、、、) 
-  Processor type and features  ---> 
-   Preemption Model 
-     (X) Preemptible Kernel (Low-Latency Desktop) 
  
 ==== 関連パッケージ ==== ==== 関連パッケージ ====
行 44: 行 50:
  
 ==== ネットワーク設定 ==== ==== ネットワーク設定 ====
-物理インターフェイス(eth0)を介して、物理マシン仮想マシンブリ接続するうにする。+=== macvtapを利用する場合 === 
 + 
 +  * [[https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-virtual_networking-directly_attaching_to_physical_interface]] 
 +  * [[https://ahelpme.com/linux/howto-do-qemu-full-virtualization-with-macvtap-networking/]] 
 + 
 +ネットワークに関して当初は以下のようにしていたが、macvtapで物理NICに直接接続する方法もある。NICが複数ある場合は、余計なブリッジを構成しなくてよいので、こちらの方が便利かもしれない。ただし、いまのところGentooではmacvtapを起動スクリプトで扱えないので、仮想マシンを起動する時などにインタフェスを構成する必要がある。また、Qemuからも直接扱えないので、ネットワークデバイスに関するパラメータも少し変更が必要になる。 
 + 
 +既にnetifrcパッケージに修正がなされつつあるようなので、Gentooの起動スクリプトでmacvtapが扱えるようになったら設定を見直そう。 
 + 
 +macvtapデバイスの構成 
 + 
 +以下は、/etc/init.d内のOpenRCの起動スクリプト側に記述。macvtapのデバイスファイル/dev/tapNは、インタフェースを作成した段階ではrootのみしかアクセスできない。そのためownerやpermissionを書き換えるためには、root権限で実行されているスクリプトで処理する必要がある。VMをrootで動かすならば必要ないが、別ユーザで動かしたいため。 
 + 
 +  # 「macvtap0」という名前でmacvtapデバイスを作成し、物理NICの「enp8s0f0」に接続 
 +  # modeはpassthruとする。1つのVMで1つのNICを使うので今回は何でもよい 
 +  # 複数VMが物理NICを共有する形で構成される場合、modeによってVM同士の通信の仕方が変わる。 
 +  ip link add link enp8s0f0 name macvtap0 type macvtap mode passthru 
 +  # 作成したインタフェースを起動 
 +  ip link set macvtap0 up 
 +  # Qemuは今のところ/dev/tapN経由で利用するが起動直後はデバイスファイルのownerとpermissionがrootのみrwとなっているため修正 
 +  # /sys/class/macvtap0/ifindexが/dev/tapNの「N」を示す 
 +  chown root:kvm /dev/tap$(cat /sys/class/net/macvtap0/ifindex) 
 +  chmod 660 /dev/tap$(cat /sys/class/net/macvtap0/ifindex) 
 + 
 +Qemuのネットワークインターフェースのパラメータ 
 +  # Qemu側からはインターフェース直接利用できないのでtapのファイルディスクリプタを指定する 
 +  # fd=3は適当な番号(3未満は標準入出力で利用されいる?) 
 +  # /dev/tapNの番号は/sys/class/net/${MACVTAP}/ifindex)から取得できる 
 +  -netdev tap,id=net0,vhost=on,fd=3 3<>/dev/tap$(cat /sys/class/net/${MACVTAP}/ifindex) 
 +   
 +  # macアドレスをHostのmacvtapインターフェースとゲストで一致させないと通信できない 
 +  # たぶん、物理NICを直接VMに接続するイメージなので、macアドレスが一致していないと通信できない 
 +  # macvtapを構成する際に指定してよいが、自動的に付与されたのを利用する 
 +  # macvtapに割り当てられたmacアドレスは/sys/class/net/${MACVTAP}/addressで取得できる 
 +  -device virtio-net,netdev=net0,mac=$(cat /sys/class/net/${MACVTAP}/address) 
 + 
 +=== tap + bridgeで構成する場合 === 
 + 
 +Guest用に使う物理NICを増設したので、Host側のNICはHost専用で利用する。HostとGuestが別のネトワークに接続されることを前提に、両者の通信用に内部でローカルネットワークを構成する。QEMUでuserモードのネットワークデバイスを使こともできるが、Guest側からもHostの物理NICが接続しているネットワークに接続する可能性を考えて、Bridgeを用意する(nftablesなどでフォワード、マスカレードすることもできるが、設定が面倒なので使わないことにする 
  
 /etc/conf.d/net /etc/conf.d/net
-  #物理インタフェイスIPアレス設定を空にする + 
-  config_eth0="null"+  * Hostの物理NIC最近の命名規則は違っているが、とりあえずeth+Nとする。 
 +  * eth0はHost用のNIC(マザーボー) 
 +  * eth1はGuest用に増設したNIC 
 + 
 +  ## Hostのネットワーク設定(通常通り) 
 +  config_eth0="192.168.0.1/24" 
 +  routes_eth0="default via 192.168.0.254"
      
-  bridge_br0="eth0 tap0" +  ## Guestのネットワーク設定 
-  brctl_br0="setfd 0 sethello 0 stp off" +  ## Bridgeを作成しGuest用物理NICとGuestのtapを接続する
-  #rc_need_br0="net.tap0" 古い書式 +
-  rc_net_br0_need="net.tap0"+
      
-  # Host +  # 物理NICにはIPを割り当てない 
-  config_br0="192.168.0.15/24" +  config_eth1="null
-  routes_br0="default via 192.168.0.254" +  # tapデバイスをtap0として構成しIPを空に(IPはGuest OSが設定)
-  dns_domain_br0="example.com" +
-  dns_servers_br0="192.168.0.1" +
-  dns_search_br0="example.com" +
-   +
-  # Guest +
-  config_tap0="null"+
   tuntap_tap0="tap"   tuntap_tap0="tap"
-  tunctl_tap0="-u [user] -g [group]" #tap利用できユーザ/グループ。 -g kvmでkvmグループ属するユーザがクセできるようにする+  config_tap0="null" 
 +  bridgeデバイスbr0として構成しeth1とtap0を参加させ 
 +  bridge_br0="eth1 tap0" 
 +  # bridgeデバイスそのものはIPドレを設定しない 
 +  # HostからGuest用NICがわのネットワーク出ていく場合は適当なIPを設定 
 +  config_br0="null" 
 +  # bridgeのオプション設定 
 +  bridge_forward_delay_br0=0 
 +  bridge_hello_time_br0=1000 
 +   
 +  # bridgeを起動する際の依存関係を記述 
 +  # 起動スクリプトが実行される際の依存関係 
 +  depend_br0() { 
 +             # /etc/init.dのスクリプト名 
 +             need net.eth1 
 +             need net.tap0 
 +  }
  
-===== ゲストOS起動 ===== +以上設定したうえで、/etc/init.dのnet.loからnet.br0、net.tap0など必要なデバイスへのボリックリクを作成しdefaultrunlevelに追加する。
-qemu-kvmコマンド用いてゲトOSを起動する。qemu-kvmへのコマドライオプションでcpu種類やエミュレートするデバイスなどを指定していく+
  
-仮想ディスク準備 +GuestとHostが内部的に通信するためBridgeも構成
-  qemu-img create -f qcow2 -o preallocation=metadata [仮想ディスクイメージ名] [サイズ] +
-  qemu-img create -f qcow2 -o preallocation=metadata gentoo-i386.img 10G+
  
-Gentoo Live CDなど使っ起動OSインール +  # tap_local0というtapデバイス作成しIPは空にしおく 
-  qemu-kvm -hda gentoo-i386.img \ +  tuntap_tap_local0="tap" 
-                    -cdrom livecd-i686-installer-2007.0.iso \ +  config_tap_local0="null" 
-                    -boot d +  # br_local0というbridgeデバイスを作成tap_local0参加 
-                    -curses +  bridge_br_local0="tap_local0" 
-                    -net nic +  # bridge自体にIPアドレを設定 
-                    -net tap,ifname=tap0,script=no,downscript=no+  # Hostが利用するIPアドレス。適当なロアドレスにする 
 +  config_br_local0="192.168.1.1/24" 
 +  bridge_forward_delay_br_local0=0 
 +  bridge_hello_time_br_local0=1000 
 +   
 +  depend_br_local0() { 
 +             need net.tap_local0 
 +  }
  
-オプションについて +br_local0というブリッジデバイスGuestの2NICtap経由接続しておくことで、HostとGuestしか接続されいネッワークをつくる。ルーティングやIPフォワードの設定をしなけば、HostとGuestだけが参加する内部的なネットワークになる。GuestへSSHなどは、基本的にHostにログインしからこカルネットワクからクセスするようにする
-  * -cpu core2duo +
-    * 仮想CPU種類指定。qemu-vkm -cpu ?利用可能CPUリスが得られる。 +
-  * -smp 2 +
-    * CPUコア数 +
-  * -m 1024 +
-    * 割り当メモリ(MB) +
-  * -k ja +
-    * ホスト側ドレイウトの指定+
  
-  * -hda [イメージファイル名] +===== ゲストOS ===== 
-    * 仮想ディスクイメージファイル指定。IntelのSATAがエミュレートされる。 +ディスクイメージの作成 
-  *  -drive file=[イメージファイル名],if=virtio +  # rawイメージで30GBのディスクイメージを作成 
-    * 仮想ディスクのアクセスにvirtio経由を用いる。 +  # preallocationでディスク容量分領域を確保 
-  * -cdrom +  > qemu-img create -f raw -o preallocation=full Disk01_raw.img 30G                   
-    * CD-ROMイメージファイルの指定 +
-  * -boot +
-    * 起動ディスクの指定 「d」はCD-ROMから、「c」はHDDから+
  
-  * -net nic 
-    * 新しくネットワークインタフェースを作成しvlan(デフォルト)に接続する 
-  * -net nic,model=virtio 
-    * ネットワークデバイスとしてvirtioを利用する。指定しなければRealTek8139がエミュレートされる。 
-  * -net tap,ifname=tap0,script=no,downscript=no 
-    * ホストのtap0をvlan(デフォルト)に接続する 
-  * -net tap,ifname=tap0,script=no,downscript=no,vhost=on 
-    * 上記設定に加えて、vhost=onでvhost-netを利用する。ゲストのカーネルでMessage Signaled Interrupts (MSI and MSI-X)、ホストのカーネルでVirtio network driverが必要。 
  
-  * -curses +Guest起動するシェルスクリ適当作成 
-    * ncurses利用してコマンドライン上にコンソールをリダイレクトする。ゲストが高解像度の出力をする場合は利用不可。 +  /usr/bin/qemu-system-x86_64 \ 
-    * ターミナソフトのRLoginでSSHしたホト上でcursesオション指定して起動した場合、「ESC」キーと「2」を同時押しでQEMUのコンソール切り替えられる。場合によっては「ESC」を長押しする必要がある。 +    -name "exam_vm"
-  -monitor telnet::4444,server,nowait qemu +    -machine type=q35,accel=kvm \ 
-    * モニタに4444番ポートにtelnetでアクセスできるようにする +    -object rng-random,id=rng0,filename=/dev/urandom -device virtio-rng-pci,rng=rng0 \ 
-  * -vnc [host]:[ディスプレイno] +    -cpu host \ 
-    *  hostからvncでコンソールにアクセスできるようにする。ポートは5900+ディスプレイ番号になる。[host]を省略するとどこからでも接続可能になる。 +    -smp 8 \ 
-  -nographic +    -m 4G \ 
-    * グラフィック出力をしない。ビデオカードをエミュレートしない。+    -drive file=exam_vm_raw.img,driver=raw,if=virtio,index=0,media=disk,cache=writeback \ 
 +    -boot c \ 
 +    -netdev tap,id=net0,ifname=tap0,vhost=on,script=no,downscript=no \ 
 +    -device virtio-net,netdev=net0,mac=52:54:00:87:92:31 \ 
 +    -netdev tap,id=net1,ifname=tap_local0,vhost=on,script=no,downscript=no \ 
 +    -device virtio-net,netdev=net1,mac=52:54:00:87:92:32 \ 
 +    -monitor unix:/home/kvm-admin/socket/monitor.sock,server,nowait \ 
 +    -serial unix:/home/kvm-admin/socket/console.sock,server,nowait \ 
 +    -display none \ 
 +    -daemonize \ 
 +    -fsdev local,id=share,path=/home/kvm-admin/share_dir,security_model=mapped-xattr -device virtio-9p-pci,fsdev=share,mount_tag=host_share
  
-  * -rtc clock=host,base=localtime +オプション 
-    * リアルタイックの設定。UTC扱いになる場合に適切に設定する。+  * -name "VM01" 
 +    * 仮想マシンの名称 
 +  * -machine type=q35,accel=kvm 
 +    * 仮想マシンのタイプ:マザーボードの基本構成のようなもの 
 +    * KVMを有効にする。QEMUは汎用的な仮想マシンエミュレータでKVMでカーネの支援が有効になる 
 +  * -object rng-random,id=rng0,filename=/dev/urandom -device virtio-rng-pci,rng=rng0 
 +    * 乱数生成器などを仮想マシンから見えるようにする 
 +  * -cpu host 
 +    * cpuのタイプ。他の種類のCPUもエミュレートできるがHostをそのまま使うのが一番効率がよい 
 +  * -smp 8 
 +    * 割り当てるCPUの数。NUMA構成などもできるようだが単純にコア数だけ指定 
 +  * -m 4G 
 +    * 割り当てるメモリ 
 +  * -drive file=exam_vm_raw.img,driver=raw,if=virtio,index=0,media=disk,cache=writeback 
 +    * 仮想ハードディスの設定。作成した仮想ディスクのイメージとフォーマトを指定。インターフェイスはvirtio 
 +    * cacheやaioなどの設定によってディスクのパフォーマンスをが変わる。HostがSSDかHDDか、メモリの量などで調整が必要 
 +  * boot c 
 +    * 起動デバイスの指定。cはハードディスク。dはCD-ROM。インストール時は起動ディスクのisoをCD-ROMとして設定してdから起動 
 +   * CD-ROMを接続する場合は「-cdrom install-amd64-minimal-20200531T214503Z.iso」 
 +  * -netdev tap,id=net0,ifname=tap0,vhost=on,script=no,downscript=no 
 +    * ネットワークのバックエンドの設定。tapで先ほど作成したtap0に接続する。idは仮想マシン側に見せるデバイスの設定に利用。 
 +    * scriptは仮想マシン起動時にtapデバイスを作成する場合に利用できる。ここでは静的に設定してるのでスクリプトは利用なし。 
 +  * -device virtio-net,netdev=net0,mac=52:54:00:87:92:31 
 +    * Guest側に見えるNICの設定。virtio-net経由でidで指定したバックエンド(net0)に接続。 
 +  * -netdev tap,id=net1,ifname=tap_local0,vhost=on,script=no,downscript=no 
 +  * -device virtio-net,netdev=net1,mac=52:54:00:87:92:32 
 +    * 同様に、Hostと通信するためだけに作成したBridgeに接続しているNICもGuestに作成 
 +  * -monitor unix:/foo/var/vm01.sock,server,nowait 
 +    * QEMUモニタに接続するためのソケット。telnetでモニタにアクセスできるようにもできるが、telnetの場合、複数の仮想マシンを運用すると、各仮想マシンのモニタの区別はポート番号のみになり、管理しにくい。ソケットであれば、ソケット名をわかりやすく設定できので便利。 
 +    * ソケットへのアクセスはsocatコマンドで可能。 
 +    * socat - UNIX-CONNECT:/foo/bar/vm01.sock 
 +    * 上記コマンドにパイプでモニタコマンドを与えてやると直接モニタを操作できる。例えば「echo "system_powerdown" |socat - UNIX-CONNECT:/foo/bar/vm01.sock」とすれば、仮想マシンに電源ボタンを押下したことを伝達できる。仮想マシン上のカーネルで電源ボタンの押下を検知できるようにし、acpidなどを設定しておくとHostから手軽にシャットダウンできる。 
 +    * telnetの場合は「-monitor telnet:127.0.0.1:10100,server,nowait」。10100番ポートtelnetするとモニタアクセスできる。 
 +  * -serial unix:/foo/var/console.sock,server,nowait 
 +    * LinuxやGrubのコンソールを出すためのシリアルポートを仮想マシン上に作成し、その出力をUNIXドメインソケットとして/foo/var/console.sockに接続する。シリアルコンソールに関する他の設定は後述。 
 +  * -display none 
 +    * 本番でサーバ運用の場合はディスプレイは不要なのでnone。 
 +    * インストール時はcursesとれば、sshなどのコマンドラインに直接Guestのコンソールを接続でき。ただし、テキストモードの場合のみ。グラフィックモードの場合はvncなどが必要
   * -daemonize   * -daemonize
-    * コンソールから切り離す。バックグラウンドで起動する。 +    * 本番時はタミナルから切り離して起動。 
-    * 端末がおしくなる場合があるでresetコマンドどでリセットする。+  * -fsdev local,id=share,path=/foo/bar/share_dir,security_model=mapped-xattr 
 +  * -device virtio-9p-pci,fsdev=share,mount_tag=v_share 
 +    * HostのディレクトリをGuestと共有。Guest側カーネルで9pのオプションを有効にる必要がある 
 +    * [[https://wiki.qemu.org/Documentation/9psetup]] 
 +    * fsdevで共有するディレクトリのバックンドを設定し、deviceGuestから見えるデバイスを生成する。mount_tagはGuestらmountする場合のデバイス名となる。
      
-==== ゲストOSのカーネル設定 ==== +==== ゲストOSの設定 ====
-基本的には実マシンと同様に設定すればよいが、virtioを利用する場合には追加設定を行う。+
  
-準仮想化の設定。仮想マシン上のカネルオプション。ゲス側で設定しておくとパフォーマンス向上する。 +従来はエミュレートされたハードウェアに対して通常のドライバを利用していた、最近はGuestからHostへのアクセスは基本的にVirtio経由で行う。以下を参考に必要なドライバを組み込む。Virtio経由でアクセスするため、SATAやNICのドライバなども無効にしてよい
-  [*] Paravirtualized guest support---> +
-    --- Paravirtualized guest support +
-    [*] Paravirtual steal time accounting +
-    [  ] Xen guest support +
-    [*] KVM paravirtualized clock +
-    [*] KVM Guest support +
-    -*- Enable paravirtualization code +
-    [*] Paravirtualization layer for spinlocks+
  
-virtioを利用しない場合の各種ドライバ +  * [[https://wiki.gentoo.org/wiki/QEMU/Linux_guest]]
-  Device Drivers ---> +
-    <*> Serial ATA and Parallel ATA drivers ---> +
-      <*> Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support +
-   +
-    [*] Network device support ---> +
-      [*] Ethernet driver support ---> +
-        [*] Realtek devices +
-        <*> RealTek RTL-8139 C+ PCI Fast Ethernet Adapter support (EXPERIMENTAL) +
-        <*> RealTek RTL-8129/8130/8139 PCI Fast Ethernet Adapter support +
-        [*Use PIO instead of MMIO+
  
-virtioを利用する場合(パフォーマス向上) +=== 時刻 === 
-  Device Drivers ---> +Guestの時刻同期は、仮想ネットワークデバイスがハードウェアタイムスタンプをサポートしていないため、NTPではマイクロ秒レベルの正確な時刻同期ができないらしい。正確にクロックを同期するには、PTPを通してHostのクロックをハードウェアタイムスタンプで同期すればよいらしい。 
-    [*] Block devices ---> + 
-      <*Virtio block driver (EXPERIMENTAL)+  * [[https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/chap-kvm_guest_timing_management]] 
 + 
 +カーネルのPTPドライバを有効にする 
 +   Device Drivers  ---> 
 +      PTP clock support  ---> 
 +        [*] PTP clock support 
 +        [*] KVM virtual PTP clock 
 + 
 +時刻同期にPTPで時刻を同期できるchronyを利用する。 
 + 
 +chrony.confは以下の1行のみを有効にする。server行などはすべてコメトアウト。 
 + 
 +  refclock PHC /dev/ptp0 poll 2 
 + 
 +起動時にhwclockが走らないようにbootランレベルから削除しておく。起動時の時刻同期はカーネル機能で対応。 
 +  Device Drivers  ---> 
 +    Device Drivers  ---> 
 +      [*]   Set system time from RTC on startup and resume 
 +      (rtc0)  RTC used to set the system time 
 +       [*]   /sys/class/rtc/rtcN (sysfs) 
 +       [*]   /proc/driver/rtc (procfs for rtcN) 
 +       [*]   /dev/rtcN (character devices
 +       [*]   PC-style 'CMOS' 
 + 
 +=== シリアルポートにコンソールを出力 === 
 + 
 +カーネルにシリアルポートのドライバ等を組み込む。「Console on 8250/16550 and compatible serial port」を有効にしないと、起動からログインプロンプトまでのカーネルメッセージや起動メッセージが表示できないので注意。PNPサポートは、どちらでもよい気がする。 
 + 
 +  Device Drivers  ---> 
 +    Character devices  ---> 
 +      Serial drivers  ---> 
 +      Serial drivers  ---> 
 +        [*] 8250/16550 and compatible serial support 
 +        [ ]   Support 8250_core.* kernel options (DEPRECATED) 
 +        [*]   8250/16550 PNP device support 
 +        [ ]   Support for variants of the 16550A serial port 
 +        [ ]   Support for Fintek F81216A LPC to 4 UART RS485 API 
 +        [*]   Console on 8250/16550 and compatible serial port 
 + 
 +起動オプションの変更とGrub自体の出力先をコンソールにも出すようにする。 
 +/etc/default/grubを以下のように編集し、grub-mkconfigで反映する。
      
-    [*] Network device support ---> +  # カーネルの「console」コマンドラインオプションを追加し、tty0とttyS0(シリアルポート)の両方に 
-      -*- Network core driver support +  # コンソールメッセージを出力するようにする 
-        <*> Virtio network driver (EXPERIMENTAL)+  GRUB_CMDLINE_LINUX_DEFAULT="rootfstype=ext4 zswap.enabled=1 zswap.zpool=zbud zswap.compressor=lz4 console=tty0 console=ttyS0,115200n"
      
-    Character devices ---> +  # Grub自体の出力もconsoleとシリアルポートの両方に出すようにする 
-      <*> Virtio console +  GRUB_TERMINAL="console serial" 
-      <*> Hardware Random Number Generator Core support +  # 上記パラメータにserialを追加すると以下がないと警告が出る 
-      <*> VirtIO Random Number Generator support +  # シリアルポートの設定 
-   +  GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1" 
-    Virtio drivers ---> + 
-      <*> PCI driver for virtio devices (EXPERIMENTAL) + 
-      <*> Virtio balloon driver (EXPERIMENTAL) + 
-       +起動後の仮想コンソール(シリアルコンソール)をシリアルポートに出力する。 
-    Bus options (PCI etc.) ---> + 
-      [*] Message Signaled Interrupts (MSI and MSI-X)+この設定がなければ、起動時のカーネルメッセージや起動メッセージはシリアルコンソールに表示されるが、起動してからのログインプロンプトがシリアルポートに出ないので、シリアルコンソールには何も見えなくなる。 
 + 
 +/etc/inittab 
 +  # シリアルコンソールをttyS0に 
 +  s0:12345:respawn:/sbin/agetty -L 115200 ttyS0 vt100 
 + 
 +socatコマンドでUNIXドメインソケット経由で仮想マシンのシリアルコンソールに接続 
 +  # escape=0x11でCtrl+qをエスケープシーケンスに指定する。socat自体を終了させる際のシーケンス 
 +  socat stdin,raw,echo=0,escape=0x11 unix-connect:console.sock  
 + 
 + 
 + 
 + 
 + 
 + 
 + 
  
-virtioを利用する場合、ディスクのデバイスファイルは以下の様になる。 
-  * /dev/vda? 
  
-virtioを利用する場合、ホスト側で以下のオプションを有効にする。 
-  Device Drivers ---> 
-    [*] Network device support ---> 
-      -*- Network core driver support 
-        <*> Virtio network driver (EXPERIMENTAL) 
-         
-    Virtio drivers ---> 
-      <*> PCI driver for virtio devices (EXPERIMENTAL) 
  
-virtioを利用する場合の参考サイト 
-  * [[http://plamo.linet.gr.jp/wiki/index.php?%CF%C3%C2%EA%2F%B2%BE%C1%DB%B2%BDon%20Plamo_QEMU-KVM%CA%D4]] 
  
-  CONFIG_VIRTIO_BLK 
-  CONFIG_VIRTIO_NET 
-  CONFIG_VIRTIO_CONSOLE 
-  CONFIG_HW_RANDOM_VIRTIO 
-  CONFIG_VIRTIO 
-  CONFIG_VIRTIO_RING 
-  CONFIG_VIRTIO_PCI 
-  CONFIG_VIRTIO_BALLOON 
  
-===== 設定後の起動 ===== 
-virtioを利用する場合の通常運用時の起動オプション例。SSH等でネットワークからアクセスできる状態になっていれば、グラフィックは無効にしてバックグラウンドで起動する。qemuモニタにはtelnetでアクセスできるようにしておく。 
  
-  /usr/bin/qemu-kvm -name "com2.ps.ritsumei.ac.jp" \ 
-      -cpu core2duo \ 
-      -smp 2 \ 
-      -m 768 \ 
-      -k ja \ 
-      -drive file=/home/nishide/kvm/KVM-2012_com2.img,if=virtio \ 
-      -boot c \ 
-      -net nic,model=virtio \ 
-      -net tap,ifname=tap0,script=no,downscript=no \ 
-      -rtc clock=host,base=localtime \ 
-      -monitor telnet::4444,server,nowait \ 
-      -nographic \ 
-      -daemonize 
  
-===== ゲストのkernelオプション ===== 
-クロックソースとしてkvmを指定するためブートローダでkernelに起動オプションを指定する。 
  
-grubの場合 
  
-  * /boot/grub/grub.conf 
  
-  kernel /vmlinuz-3.7.10-gentoo ro root=/dev/vda2 clocksource=kvm-clock rootfstype=ext4 
  
linux/kvm.1590982155.txt.bz2 · 最終更新: 2020/06/01 12:29 by admin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki