linux:kvm
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| linux:kvm [2020/08/11 11:33] – Wiki Editor | linux:kvm [2022/01/06 10:40] (現在) – [ゲストOSの設定] Wiki Editor | ||
|---|---|---|---|
| 行 28: | 行 28: | ||
| < | < | ||
| [*]IGMP/MLD snooping | [*]IGMP/MLD snooping | ||
| + | |||
| + | macvtapを利用する(後述) | ||
| + | | ||
| + | Device Drivers | ||
| + | [*] Network device support | ||
| + | | ||
| + | | ||
| + | |||
| + | |||
| KSM (複数のVM間でメモリを共有する) | KSM (複数のVM間でメモリを共有する) | ||
| 行 41: | 行 50: | ||
| ==== ネットワーク設定 ==== | ==== ネットワーク設定 ==== | ||
| + | === macvtapを利用する場合 === | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | ネットワークに関して当初は以下のようにしていたが、macvtapで物理NICに直接接続する方法もある。NICが複数ある場合は、余計なブリッジを構成しなくてよいので、こちらの方が便利かもしれない。ただし、いまのところGentooではmacvtapを起動スクリプトで扱えないので、仮想マシンを起動する時などにインタフェースを構成する必要がある。また、Qemuからも直接扱えないので、ネットワークデバイスに関するパラメータも少し変更が必要になる。 | ||
| + | |||
| + | 既にnetifrcパッケージに修正がなされつつあるようなので、Gentooの起動スクリプトでmacvtapが扱えるようになったら設定を見直そう。 | ||
| + | |||
| + | macvtapデバイスの構成 | ||
| + | |||
| + | 以下は、/ | ||
| + | |||
| + | # 「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は今のところ/ | ||
| + | # / | ||
| + | chown root:kvm / | ||
| + | chmod 660 / | ||
| + | |||
| + | Qemuのネットワークインターフェースのパラメータ | ||
| + | # Qemu側からはインターフェースを直接利用できないのでtapのファイルディスクリプタを指定する | ||
| + | # fd=3は適当な番号(3未満は標準入出力で利用されている?) | ||
| + | # / | ||
| + | -netdev tap, | ||
| + | | ||
| + | # macアドレスをHostのmacvtapインターフェースとゲストで一致させないと通信できない | ||
| + | # たぶん、物理NICを直接VMに接続するイメージなので、macアドレスが一致していないと通信できない | ||
| + | # macvtapを構成する際に指定してもよいが、自動的に付与されたものを利用する | ||
| + | # macvtapに割り当てられたmacアドレスは/ | ||
| + | -device virtio-net, | ||
| + | |||
| + | === tap + bridgeで構成する場合 === | ||
| + | |||
| Guest用に使う物理NICを増設したので、Host側のNICはHost専用で利用する。HostとGuestが別のネットワークに接続されることを前提に、両者の通信用に内部でローカルネットワークを構成する。QEMUでuserモードのネットワークデバイスを使うこともできるが、Guest側からもHostの物理NICが接続しているネットワークに接続する可能性を考えて、Bridgeを用意する(nftablesなどでフォワード、マスカレードすることもできるが、設定が面倒なので使わないことにする)。 | Guest用に使う物理NICを増設したので、Host側のNICはHost専用で利用する。HostとGuestが別のネットワークに接続されることを前提に、両者の通信用に内部でローカルネットワークを構成する。QEMUでuserモードのネットワークデバイスを使うこともできるが、Guest側からもHostの物理NICが接続しているネットワークに接続する可能性を考えて、Bridgeを用意する(nftablesなどでフォワード、マスカレードすることもできるが、設定が面倒なので使わないことにする)。 | ||
| 行 117: | 行 164: | ||
| -drive file=exam_vm_raw.img, | -drive file=exam_vm_raw.img, | ||
| -boot c \ | -boot c \ | ||
| - | -netdev tap, | + | -netdev tap, |
| - | -netdev tap, | + | |
| - | -monitor unix:/ | + | -netdev tap, |
| + | | ||
| + | -monitor unix:/ | ||
| + | -serial unix:/ | ||
| -display none \ | -display none \ | ||
| -daemonize \ | -daemonize \ | ||
| 行 158: | 行 208: | ||
| * 上記コマンドにパイプでモニタコマンドを与えてやると直接モニタを操作できる。例えば「echo " | * 上記コマンドにパイプでモニタコマンドを与えてやると直接モニタを操作できる。例えば「echo " | ||
| * telnetの場合は「-monitor telnet: | * telnetの場合は「-monitor telnet: | ||
| + | * -serial unix:/ | ||
| + | * LinuxやGrubのコンソールを出すためのシリアルポートを仮想マシン上に作成し、その出力をUNIXドメインソケットとして/ | ||
| * -display none | * -display none | ||
| * 本番でサーバ運用の場合はディスプレイは不要なのでnone。 | * 本番でサーバ運用の場合はディスプレイは不要なのでnone。 | ||
| 行 202: | 行 254: | ||
| | | ||
| - | | + | === シリアルポートにコンソールを出力 === |
| + | |||
| + | カーネルにシリアルポートのドライバ等を組み込む。「Console on 8250/16550 and compatible serial port」を有効にしないと、起動からログインプロンプトまでのカーネルメッセージや起動メッセージが表示できないので注意。PNPサポートは、どちらでもよい気がする。 | ||
| + | |||
| + | Device Drivers | ||
| + | Character devices | ||
| + | Serial drivers | ||
| + | Serial drivers | ||
| + | [*] 8250/16550 and compatible serial support | ||
| + | [ ] | ||
| + | [*] | ||
| + | [ ] | ||
| + | [ ] | ||
| + | [*] | ||
| + | |||
| + | 起動オプションの変更とGrub自体の出力先をコンソールにも出すようにする。 | ||
| + | / | ||
| + | |||
| + | # カーネルの「console」コマンドラインオプションを追加し、tty0とttyS0(シリアルポート)の両方に | ||
| + | # コンソールメッセージを出力するようにする | ||
| + | GRUB_CMDLINE_LINUX_DEFAULT=" | ||
| + | |||
| + | # Grub自体の出力もconsoleとシリアルポートの両方に出すようにする | ||
| + | GRUB_TERMINAL=" | ||
| + | # 上記パラメータにserialを追加すると以下がないと警告が出る | ||
| + | # シリアルポートの設定 | ||
| + | GRUB_SERIAL_COMMAND=" | ||
| + | |||
| + | |||
| + | |||
| + | 起動後の仮想コンソール(シリアルコンソール)をシリアルポートに出力する。 | ||
| + | |||
| + | この設定がなければ、起動時のカーネルメッセージや起動メッセージはシリアルコンソールに表示されるが、起動してからのログインプロンプトがシリアルポートに出ないので、シリアルコンソールには何も見えなくなる。 | ||
| + | |||
| + | / | ||
| + | # シリアルコンソールをttyS0に | ||
| + | s0: | ||
| + | |||
| + | socatコマンドでUNIXドメインソケット経由で仮想マシンのシリアルコンソールに接続 | ||
| + | # escape=0x11でCtrl+qをエスケープシーケンスに指定する。socat自体を終了させる際のシーケンス | ||
| + | socat stdin, | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
linux/kvm.1597113188.txt.bz2 · 最終更新: by Wiki Editor
