KVM使い方(Ubuntu 22.04)
Ubuntu 20.04からのアップグレードでvirshが動かなくなった。修復するには次のパッケージのインストールが必要。
% sudo apt install libvirt-daemon-system
KVM使い方(Ubuntu 18.04)
Ubutnu18.04でネットワーク周りの設定に変更があった。それも含めて設定方法を書いているリンクを以下にペースト。
- How to Install and Configure KVM on Ubuntu 18.04 LTS Server
- Virtual Machines with KVM on Ubuntu 18.04 | by LH Fong | ESTL Lab Notes
DHCPで固定IPが割り振られる時は、br0のmacaddressを実際のネットワークデバイス(以下の場合eno1)のものにする必要がある。
network: version: 2 ethernets: eno1: dhcp4: false dhcp6: false bridges: br0: dhcp4: true macaddress: xx:xx:xx:xx:xx:xx interfaces: - eno1
ufwでNATの設定をしている場合は、/etc/ufw/before.rules
のデバイス名の変更(-> br0)が必要。
KVM使い方(Ubuntu 16.04)
virt-installでVMの作成、virshでVMの管理ができる。
KVMのインストール
% sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils virtinst
ubuntu22.04の場合
% sudo apt install qemu-kvm libvirt-daemon-system virtinst libvirt-clients bridge-utils
ブリッジネットワークデバイスの作成と物理ネットワークデバイスとの関連付け
ホストと同じネットワークの固定IPをふるためにはブリッジを作る必要があるらしい。
auto eth0 iface eth0 inet manual iface br0 inet static address 192.168.1.xxx network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.255 gateway 192.168.1.1 dns-nameservers xxx.xxx.xxx.xxx bridge_ports eth0 bridge_stp off auto br0
ネットワークの再起動後、仮想ブリッジの確認
% brctl show bridge name bridge id STP enabled interfaces br0 8000.6805ca2f9aab no eth0 virbr0 8000.5254006ccac0 yes virbr0-nic
/etc/sysctl.confで
net.ipv4.ip_forward=1
として、再起動(再起動したほうがいいと思う)。Ubuntu 16.04 desktopではこれを設定しないとホスト・ゲスト間でしたコミュニケーションができない。同serverではこれは設定していなくても動いている(今はこの設定が必要2019-1-10)。
VM作成
vncで接続できる状態でのインストール。Ubuntu20.04サーバのインストールCDイメージ(ubuntu-20.04.6-live-server-amd64.iso)がカレントディレクトリにあることを想定。
% sudo virt-install --name vmname --memory 4096 --disk size=50,path=/home/kvm_images/vmname.qcow2 --vcpus 1 --os-variant ubuntu20.04 --network bridge=virbr0 --noautoconsole --cdrom ubuntu-20.04.6-live-server-amd64.iso --graphics vnc,listen=0.0.0.0,password=vnc
size=50は50GB。virbr0はbr0の場合もあり。環境設定の書かれたファイルは
/etc/libvirt/qemu/vmname.xml
に作成されるが、通常はsudo virsh edit vmname
でアクセスする。
ブート時に/dev/vda1 ...だけ表示されフリーズする場合、もしかしたら以下のようにして解決できるかもしれない。 まず、vmの起動時にshiftを連打してrecoverty modeで起動できるようならば、/etc/default/grubを以下のようにしてupdate-grubする。
GRUB_CMDLINE_LINUX_DEFAULT=""
これでrebootして普通にブートすればよし。"quiet splash"のどちらか、もしくは両方が悪さをしているということになる。
Ubuntuのインストール
UbuntuのインストールはVNCを設定したならVNC経由で行える。KVMのVNCの使い方は下の通り。
KVMのVNC
一つ目のVMのvncのデフォルトポートは5900。パスワードは次のコマンドで確認できる。
% virsh edit vmname
以下のような感じでpasswdが設定されている。
<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' passwd='hoge'/>
二つ目以降順次5901, 5902となっていく模様。5900 + xのxは次のコマンドで確認できる。
% virsh vncdisplay vmname :1
の場合、5901がポート番号。MacOSの場合、Finder->Go->Connect to serverから
vnc://hostmachine:5901
のようにして接続できる。アクセスを拒否される場合はsshでkvmサーバにX forwardして、kvmサーバ内でvinagreなんかを起動する方が良いかも。
コンソールアクセスによるVMのインストール
- Ubuntu 17.04 : KVM : Create Virtual Machine#1 : Server World
- KVM: Creating an Ubuntu VM with console-only access | Fabian Lee : Software Engineer
% virt-install --name vmname --memory 4096 \ --disk path=/vmdir/vmname.qcow2,size=50,format=qcow2 \ --vcpus 1 --os-type linux --os-variant ubuntu16.04 \ --network bridge=br0 --location ubuntu-16.04.5-server-amd64.iso \ --extra-args 'console=ttyS0,115200n8 serial' \ --console pty,target_type=serial \ --graphics vnc,listen=0.0.0.0,password=vnc
% virsh console vmname
KVMメモリサイズ変更
% virsh edit mydata
KVM仮想マシンをプライベートネットワークに入れる(NAT)
virsh edit
でbridge
をvirbr0
にする。普通はIPアドレスはDHCPで配られるようになっている。KVM仮想マシンのプライベートネットワーク内でのIPアドレスをDHCPで固定で振るにはvirsh net-edit default
でmacアドレスとipアドレスを設定すれば良い。以下のように書き換える。
<dhcp> <range start='192.168.122.2' end='192.168.122.254'/> <host mac='xx:xx:xx:xx:xx:xx' name='hostname' ip='192.168.122.2'/> </dhcp>
設定後は次のようにしてKVMネットワークの再起動が必要。
virsh net-destroy default virsh net-start default
この場合、全てのVMを止める必要がある。追加するだけなら次のようにしてシステムを止めずに設定することができる。
sudo virsh net-update default add-last ip-dhcp-host '<host mac="xx:xx:xx:xx:xx:xx" name="addedhostname" ip="192.168.122.8"/>' --live --config --parent-index 0
KVM仮想マシンの削除
Undefineしたのちimageファイルをrmで削除。
sudo virsh undefine <vm-name>
仮想マシンがものすごく遅い。
virsh edit vmnameで一番最初の行がこうなっているか確認。
<domain type='kvm'>
ものすごく遅い仮想マシンではこうなっていた。
<domain type='qemu'>
kvmに書き換えて仮想マシンを起動しようとすると、Check that virtualization is enabled in the host BIOS、というメッセージがでた。そういうことなのか。
rootでvirshが使えない
user = "root" group = "root"
既存KVMイメージのインポート
sudo virt-install --name mynewvm --ram 8192 --disk path=/home/kvm_images/myimage.qcow2 --vcpus 2 --os-type linux --os-variant ubuntu18.04 --network bridge=virbr0 --noautoconsole --graphics vnc,listen=0.0.0.0,password=vnc --import
VirtualboxからKVMへの移行
参考
qemu-img convert -O raw vmname.vdi vmname.img
% sudo virt-install \ --name vmname \ --ram 1024 \ --disk path=/var/lib/libvirt/images/vmname.img,bus=sata,format=raw \ --vcpus 1 \ --os-type linux \ --os-variant ubuntutrusty \ --network bridge=br0 \ --noautoconsole \ --graphics vnc,listen=0.0.0.0,password=vnc \ --import
VMをコピーして別のVMとして使う
- virt-cloneする(次のセクション参照)
- DHCPサーバから見えてるならDHCPにする。
virt-edit -d vmname /etc/netplan/01-netcfg.yaml
でVMイメージ内のファイルを編集する。virt-edit
に関しては↓。 virsh net-dhcp-leases default
でIPアドレスをチェックしてsshログインする。sshが通らない場合はvncで様子をチェックする。- IPアドレスが振られていない場合はデバイス名が変わっている可能性あり。
virt-edit -d vmname /etc/netplan/01-netcfg.yaml
でVMイメージ内のファイルを編集する。virt-edit
に関しては↓。 - DHCP固定でIPアドレスを振りたい場合は、
virsh net-edit default
する。この場合は全VMを止める必要がある。virsh net-update default add ip-dhcp-host
というのもある。これなら他のVMを止める必要がない。virsh edit vmname
でmac addressを変えるのもあり。
VMのファイルシステムをホストから編集する(virt-edit)
virt-editという便利コマンドがあるらしい。libguestfs-toolsをインストールすれば良い。
IP addressは以下のような方法で探すことができる。
VMの移行 or コピー
virt-cloneというコマンドがあるらしい。
% sudo virt-clone --original myoldvm --name mynewvm --file /kvm_images/mynewvm.qcow2
How to create and manage KVM virtual machines from CLI - Linux Tutorials - Learn Linux Configuration
他の方法。