KVMでRocky Linux 9を起動する
どうも、インフラエンジニアです。
最近、業務でKVMを使うことがありました。
使ってみるとそこそこ便利だったのでプライベートでも使えるようにメモを残しておきます。
(純粋に技術的なメモです。当然ですが業務上の秘密等は載っていません。)
KVMとは?
KVM(Kernel-based Virtual Machine)は書いて字の如く仮想化基盤です。
Linuxをハイパーバイザーとして仮想マシン(VM)を起動することができます。
VirtualBoxを使ったことがあれば実現する機能としてはあんな感じだと思ってください。
実際には仮想化の実現方法が異なるのですが今回はそこら辺はあまり話題にはしません。
(仮想化の実現方法について知りたい方は「ハイパーバイザ」や「ホスト型仮想化」などの単語でググってください。)
使用するハードウェア
今回使用するハードウェアには私が大学時代に使っていたノートパソコンを使用します。
パーツ | スペック |
---|---|
CPU | i7-5500U |
Memory | 16GB |
ストレージ | 256GB |
OS | Rocky Linux 9 |
ノートパソコンなので蓋を閉じるとスリープします。
面倒なのでスリープの設定は切っておきます。
sudo vi /etc/systemd/logind.conf
HandleLidSwitch=ignore
sudo systemctl restart systemd-logind
パッケージのインストール
いつもの
sudo dnf update
まずはKVMをインストールしましょう。
sudo dnf install qemu-kvm qemu-img libvirt virt-manager virt-install virt-viewer libvirt-client guestfs-tools
インストールが終わったらlibvirtdを起動します。
sudo systemctl enable libvirtd
sudo systemctl start libvirtd
問題なければKVMが起動するはずです。
sudo systemctl status libvirtd
これでKVMは起動しました。
この状態になればVMを起動することが可能です。
ただし、VMの起動まだ行いません。
今回はVMとホストOSをブリッジ接続します。
そのため、ブリッジ接続に必要なネットワーク設定を追加します。
ブリッジとは?
VMに限らずコンピュータ同士の通信を実現するにはそのための装置が必要になります。
そのための装置の一つがネットワークブリッジです。
ブリッジはL2レイヤで動作する装置です。
一応書いておくと
L1が物理層(電気信号を扱う)
L2がデータリンク層(MACアドレスを扱う)
L3がネットワーク層(IPアドレスを扱う)
という違いになっています。
最もよく使われるネットワーク機器はルーターだと思いますがこれはL3スイッチです。
(リンク:こういうやつ)
みなさんがインターネットでこの記事を見ているのであれば、パソコンから伸びているケーブルがルーターに刺さっているはずです。
Wi-Fiを使っている場合もルーターに電波が届いているはずです。
(電波は目視で確認できませんが。)
ルーター(L3スイッチ)の機能はIPアドレスを参照して異なるネットワークを接続することです。
ルーターはネットワークを接続する
一方ブリッジ(L2スイッチ)は物理的に分割されている機器を接続します。
単純に言えばブリッジにケーブルを刺せばMACアドレスを持つデバイス同士が通信できるようになります。
(厳密には異なるのですがこの記事ではこの理解で十分です。)
ブリッジはMACアドレスを持つデバイスを接続する
今回はブリッジをLinux上に作成します。
ネットワーク設定
ではブリッジを作成します。
既存のプロファイルを削除するのでsshでログインしている場合はスクリプトか何かで実行してください。
ネットワーク設定も各自の環境に合わせてください。
nmcli c del enp0s20u1
nmcli c add type bridge autoconnect yes con-name br0 ifname br0
nmcli c modify br0 ipv4.addresses 192.168.10.10/24 ipv4.method manual ipv4.gateway 192.168.10.1 ipv4.dns 192.168.10.1
nmcli c add type bridge-slave autoconnect yes con-name enp0s20u1 ifname enp0s20u1 master br0
reboot
私がやった時はうまくいきませんでしたが、/etc/sysconfig/network-scripts/ifcfg-*を編集する方法もあります。
物理デバイスの名前は以下に従います。
(私が使っているノートパソコンはEthernetアダプタが壊れているのでUSB接続しています)
* Two character prefixes based on the type of interface:
* en -- ethernet
* sl -- serial line IP (slip)
* wl -- wlan
* ww -- wwan
*
* Type of names:
* b<number> -- BCMA bus core number
* ccw<name> -- CCW bus group name
* o<index>[d<dev_port>] -- on-board device index number
* s<slot>[f<function>][d<dev_port>] -- hotplug slot index number
* x<MAC> -- MAC address
* [P<domain>]p<bus>s<slot>[f<function>][d<dev_port>]
* -- PCI geographical location
* [P<domain>]p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>]
* -- USB port number chain
最終的に以下の様な構成になります。
ネットワーク設定
あとはVMを作成してブリッジに接続すればホストと同様の通信をVMでも可能になります。
一見すると物理デバイスについていたIPアドレスがなくなってホストにアクセスできなくなっているように見えますがそこは大丈夫です。
ブリッジに対するアクセスをホストに対するアクセスとしてきちんと解釈してくれます。
(オプション)ストレージ設定
私のノートパソコンはストレージが少ないのでKVM用にストレージを追加します。
流れとしては
- fdiskでデバイスのパーティションを設定
- mkfsでファイルシステムを作成
- mount
という流れです。
メモのためにコマンド列だけ載せておきます。
fdisk /dev/sdb
mkfs -t xfs /dev/sdb1
mount /dev/sdb1 /mnt
このやり方だと再起動するたびにマウントする必要があります。
それは嫌なので設定を永続化しておきます。
echo UUID=b9202c63-3659-47de-bd2e-76e37384f166 /mnt xfs defaults 0 0 | sudo tee -a /etc/fstab
VMの起動
VMを起動します。
起動したいVMのisoは事前にダウンロードしておきましょう。
wget https://download.rockylinux.org/pub/rocky/9/isos/x86_64/Rocky-9.0-x86_64-minimal.iso
起動します。
virt-install --name rocky --vcpus 1 --memory 2048 --disk /mnt/images/rocky9.qcow2,size=30,device=disk,bus=virtio,format=qcow2 --network bridge=br0 --virt-type kvm --os-variant rocky9.0 --location /mnt/isos/Rocky-9.0-x86_64-minimal.iso --graphics none --console pty,target_type=serial --extra-args 'console=ttyS0,115200n8'
随分長いですがこれでも必要最低限です。
オプションは以下です
オプション | 意味 |
---|---|
name | VMの名前 |
vcpus | vCPUの数 |
memory | メモリ(MB)、vCPU*1.5GBくらいが目安 |
disk | VMのディスク保管場所、sizeはGB |
network | ネットワークタイプ |
virt-type | 使用する仮想化方法、virsh capabilities で何が使えるか確認可能 |
os-variant | os名、osinfo-query os で確認可能 |
location | osのisoファイルの場所 |
graphics | spiceとかvncとかいろいろあるらしいけどあまり知らない |
console | コンソールタイプ |
extra-args | ゲストのカーネルに渡すパラメータ、コンソールを使うために必要 |
起動が終わったら繰り返し使えるようにイメージをコピーしておきましょう。
qemu-img create -b /mnt/images/rocky9.qcow2 -f qcow2 -F qcow2 /mnt/images/rocky9_base.qcow2 30G
コピーしたイメージからの起動は以下のコマンドで可能です。
(新規にVMを作成します。)
virt-install --name rocky-clone --vcpus 1 --memory 2048 --import --disk /mnt/images/rocky9_base.qcow2,device=disk,bus=virtio,format=qcow2 --network bridge=br0 --virt-type kvm --os-variant rocky9.0 --graphics none
Discussion