linux:kvm
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン次のリビジョン両方とも次のリビジョン | ||
linux:kvm [2013/08/09 10:34] – [ネットワーク設定] Wiki Editor | linux:kvm [2020/08/04 12:27] – 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 | + | * [[https://www.qemu.org/ |
+ | * [[https:// | ||
+ | * [[https:// | ||
===== ホスト側設定 ===== | ===== ホスト側設定 ===== | ||
==== カーネル ==== | ==== カーネル ==== | ||
+ | GentooのWikiに従って設定 | ||
+ | |||
KVMサポート | KVMサポート | ||
Virtualization | Virtualization | ||
行 24: | 行 28: | ||
< | < | ||
[*]IGMP/MLD snooping | [*]IGMP/MLD snooping | ||
- | < | ||
- | [*]GVRP (GARP VLAN Registration Protocol) support | ||
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 | ||
- | | ||
- | (X) Preemptible Kernel (Low-Latency Desktop) | ||
==== 関連パッケージ ==== | ==== 関連パッケージ ==== | ||
行 44: | 行 41: | ||
==== ネットワーク設定 ==== | ==== ネットワーク設定 ==== | ||
- | 物理インターフェイス(eth0)を介して、物理マシンも仮想マシンもブリッジ接続するようにする。 | + | Guest用に使う物理NICを増設したので、Host側のNICはHost専用で利用する。HostとGuestが別のネットワークに接続されることを前提に、両者の通信用に内部でローカルネットワークを構成する。QEMUでuserモードのネットワークデバイスを使うこともできるが、Guest側からもHostの物理NICが接続しているネットワークに接続する可能性を考えて、Bridgeを用意する(nftablesなどでフォワード、マスカレードすることもできるが、設定が面倒なので使わないことにする)。 |
/ | / | ||
- | #物理インタフェイスのIPアドレス設定を空にする | + | |
- | config_eth0=" | + | * Hostの物理NICの最近の命名規則は違っているが、とりあえずeth+Nとする。 |
+ | * eth0はHost用のNIC(マザーボード) | ||
+ | * eth1はGuest用に増設したNIC | ||
+ | |||
+ | ## Hostのネットワーク設定(通常通り) | ||
+ | config_eth0=" | ||
+ | routes_eth0=" | ||
| | ||
- | | + | |
- | brctl_br0=" | + | ## Bridgeを作成しGuest用物理NICとGuestのtapを接続する |
- | #rc_need_br0=" | + | |
- | rc_net_br0_need=" | + | |
| | ||
- | # Host | + | # 物理NICにはIPを割り当てない |
- | | + | |
- | routes_br0=" | + | # tapデバイスをtap0として構成しIPを空に(IPはGuest OSが設定) |
- | dns_domain_br0=" | + | |
- | dns_servers_br0=" | + | |
- | dns_search_br0=" | + | |
- | | + | |
- | # Guest | + | |
- | config_tap0=" | + | |
tuntap_tap0=" | tuntap_tap0=" | ||
- | | + | |
+ | | ||
+ | bridge_br0=" | ||
+ | # bridgeデバイスそのものにはIPアドレスを設定しない | ||
+ | # HostからGuest用NICがわのネットワークに出ていく場合は適当なIPを設定 | ||
+ | config_br0=" | ||
+ | # bridgeのオプション設定 | ||
+ | bridge_forward_delay_br0=0 | ||
+ | bridge_hello_time_br0=1000 | ||
+ | |||
+ | # bridgeを起動する際の依存関係を記述 | ||
+ | # 起動スクリプトが実行される際の依存関係 | ||
+ | depend_br0() { | ||
+ | # / | ||
+ | need net.eth1 | ||
+ | need net.tap0 | ||
+ | } | ||
- | ===== ゲストOSの起動 ===== | + | 以上の設定をしたうえで、/ |
- | 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は空にしておく |
- | | + | tuntap_tap_local0=" |
- | -cdrom livecd-i686-installer-2007.0.iso \ | + | config_tap_local0=" |
- | -boot d | + | # br_local0というbridgeデバイスを作成しtap_local0を参加 |
- | | + | bridge_br_local0=" |
- | -net nic | + | # bridge自体にIPアドレスを設定 |
- | -net tap, | + | # Hostが利用するIPアドレス。適当なローカルアドレスにする |
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | | ||
+ | } | ||
- | オプションについて | + | br_local0というブリッジデバイスにGuestの2つ目のNICをtap経由で接続しておくことで、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がエミュレートされる。 | + | ディスクイメージの作成 |
- | | + | |
- | * 仮想ディスクのアクセスにvirtio経由を用いる。 | + | |
- | * -cdrom | + | > qemu-img create -f raw -o preallocation=full Disk01_raw.img 30G |
- | * CD-ROMイメージファイルの指定 | + | |
- | | + | |
- | * 起動ディスクの指定 「d」はCD-ROMから、「c」はHDDから | + | |
- | * -net nic | ||
- | * 新しくネットワークインタフェースを作成しvlan(デフォルト)に接続する | ||
- | * -net nic, | ||
- | * ネットワークデバイスとしてvirtioを利用する。指定しなければRealTek8139がエミュレートされる。 | ||
- | * -net tap, | ||
- | * ホストのtap0をvlan(デフォルト)に接続する | ||
- | * -net tap, | ||
- | * 上記設定に加えて、vhost=onでvhost-netを利用する。ゲストのカーネルでMessage Signaled Interrupts (MSI and MSI-X)、ホストのカーネルでVirtio network driverが必要。 | ||
- | * -curses | + | Guestを起動するシェルスクリプトを適当に作成 |
- | * ncursesを利用してコマンドライン上にコンソールをリダイレクトする。ゲストが高解像度の出力をする場合は利用不可。 | + | |
- | | + | -name " |
- | | + | -machine type=q35,accel=kvm \ |
- | | + | |
- | | + | -cpu host \ |
- | | + | -smp 8 \ |
- | | + | -m 4G \ |
+ | -drive file=exam_vm_raw.img, | ||
+ | -boot c \ | ||
+ | -netdev tap, | ||
+ | -netdev tap, | ||
+ | | ||
+ | -display none \ | ||
+ | | ||
+ | -fsdev local, | ||
- | | + | オプション |
- | * リアルタイムクロックの設定。UTC扱いになる場合に適切に設定する。 | + | |
+ | * 仮想マシンの名称 | ||
+ | * -machine type=q35,accel=kvm | ||
+ | * 仮想マシンのタイプ:マザーボードの基本構成のようなもの | ||
+ | * KVMを有効にする。QEMUは汎用的な仮想マシンエミュレータでKVMでカーネルの支援が有効になる | ||
+ | * -object rng-random, | ||
+ | * 乱数生成器などを仮想マシンから見えるようにする | ||
+ | * -cpu host | ||
+ | * cpuのタイプ。他の種類のCPUもエミュレートできるがHostをそのまま使うのが一番効率がよい | ||
+ | * -smp 8 | ||
+ | * 割り当てるCPUの数。NUMA構成などもできるようだが単純にコア数だけ指定 | ||
+ | * -m 4G | ||
+ | * 割り当てるメモリ | ||
+ | * -drive file=exam_vm_raw.img, | ||
+ | * 仮想ハードディスクの設定。作成した仮想ディスクのイメージとフォーマットを指定。インターフェイスは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, | ||
+ | * ネットワークのバックエンドの設定。tapで先ほど作成したtap0に接続する。idは仮想マシン側に見せるデバイスの設定に利用。 | ||
+ | * scriptは仮想マシン起動時にtapデバイスを作成する場合に利用できる。ここでは静的に設定しているのでスクリプトは利用なし。 | ||
+ | * -device virtio-net, | ||
+ | * Guest側に見えるNICの設定。virtio-net経由でidで指定したバックエンド(net0)に接続。 | ||
+ | * -netdev tap, | ||
+ | * -device virtio-net, | ||
+ | * 同様に、Hostと通信するためだけに作成したBridgeに接続しているNICもGuestに作成 | ||
+ | * -monitor unix:/ | ||
+ | * QEMUモニタに接続するためのソケット。telnetでモニタにアクセスできるようにもできるが、telnetの場合、複数の仮想マシンを運用すると、各仮想マシンのモニタの区別はポート番号のみになり、管理しにくい。ソケットであれば、ソケット名をわかりやすく設定できるので便利。 | ||
+ | * ソケットへのアクセスはsocatコマンドで可能。 | ||
+ | * socat - UNIX-CONNECT:/ | ||
+ | * 上記コマンドにパイプでモニタコマンドを与えてやると直接モニタを操作できる。例えば「echo " | ||
+ | * telnetの場合は「-monitor telnet: | ||
+ | * -display none | ||
+ | * 本番でサーバ運用の場合はディスプレイは不要なのでnone。 | ||
+ | * インストール時はcursesとすれば、sshなどのコマンドラインに直接Guestのコンソールを接続できる。ただし、テキストモードの場合のみ。グラフィックモードの場合はvncなどが必要。 | ||
* -daemonize | * -daemonize | ||
- | * コンソールから切り離す。バックグラウンドで起動する。 | + | * 本番時はターミナルから切り離して起動。 |
- | * 端末がおかしくなる場合があるのでresetコマンドなどでリセットする。 | + | * -fsdev local, |
+ | * -device virtio-9p-pci, | ||
+ | * HostのディレクトリをGuestと共有。Guest側カーネルで9pのオプションを有効にする必要がある。 | ||
+ | * [[https:// | ||
+ | * fsdevで共有するディレクトリのバックエンドを設定し、deviceでGuestから見えるデバイスを生成する。mount_tagはGuestからmountする場合のデバイス名となる。 | ||
| | ||
==== ゲストOSのカーネル設定 ==== | ==== ゲストOSのカーネル設定 ==== | ||
行 195: | 行 239: | ||
CONFIG_VIRTIO_BALLOON | CONFIG_VIRTIO_BALLOON | ||
- | ===== 設定後の起動 ===== | ||
- | virtioを利用する場合の通常運用時の起動オプション例。SSH等でネットワークからアクセスできる状態になっていれば、グラフィックは無効にしてバックグラウンドで起動する。qemuモニタにはtelnetでアクセスできるようにしておく。 | ||
- | |||
- | / | ||
- | -cpu core2duo \ | ||
- | -smp 2 \ | ||
- | -m 768 \ | ||
- | -k ja \ | ||
- | -drive file=/ | ||
- | -boot c \ | ||
- | -net nic, | ||
- | -net tap, | ||
- | -rtc clock=host, | ||
- | -monitor telnet:: | ||
- | -nographic \ | ||
- | -daemonize | ||
- | |||
- | ===== ゲストのkernelオプション ===== | ||
- | クロックソースとしてkvmを指定するためブートローダでkernelに起動オプションを指定する。 | ||
- | |||
- | grubの場合 | ||
- | |||
- | * / | ||
- | |||
- | kernel / | ||
linux/kvm.txt · 最終更新: 2022/01/06 10:40 by Wiki Editor