KVM使い方(Ubuntu 18.04)

Ubutnu18.04でネットワーク周りの設定に変更があった。それも含めて設定方法を書いているリンクを以下にペースト。

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

KVM使い方(Ubuntu 16.04)

virt-installVMの作成、virshでVMの管理ができる。

KVMのインストール

sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils virtinst

ブリッジネットワークデバイスの作成と物理ネットワークデバイスとの関連付け

ホストと同じネットワークの固定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で接続できる状態でのインストール。Ubuntu16.04サーバのインストールCDイメージ(ubuntu-16.04.5-server-amd64.iso)がカレントディレクトリにあることを想定。

% sudo virt-install --name vmname --memory 4096 \
--disk size=50 --vcpus 1 --os-type linux \
--os-variant ubuntu16.04 --network bridge=br0 --noautoconsole \
--cdrom ubuntu-16.04.5-server-amd64.iso \
--graphics vnc,listen=0.0.0.0,password=vnc

size=30は30GB。環境設定の書かれたファイルは

/etc/libvirt/qemu/vmname.xml

に作成される。

ブート時に/dev/vda1 ...だけ表示されフリーズする場合、もしかしたら以下のようにして解決できるかもしれない。 まず、vmの起動時にshiftを連打してrecoverty modeで起動できるようならば、/etc/default/grubを以下のようにしてupdate-grubする。

GRUB_CMDLINE_LINUX_DEFAULT=""

これでrebootして普通にブートすればよし。"quiet splash"のどちらか、もしくは両方が悪さをしているということになる。

Ubuntuのインストール

UbuntuのインストールはVNCを設定したならVNC経由で行える。KVMVNCの使い方は下の通り。

KVMVNC

一つ目のVMvncのデフォルトポートは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

のようにして接続できる。

コンソールアクセスによるVMのインストール

% 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

virt-editという便利コマンドがあるらしい。libguestfs-toolsをインストールすれば良い。

IP addressは以下のような方法で探すことができる。

KVMメモリサイズ変更

% virsh edit mydata

KVM仮想マシンをプライベートネットワークに入れる(NAT)

virsh editbridgevirbr0にする。普通はIPアドレスDHCPで配られるようになっている。KVM仮想マシンのプライベートネットワーク内でのIPアドレスDHCPで固定で振るにはvirsh net-edit defaultmacアドレス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仮想マシンの名前変更

KVM仮想マシンのHDD容量変更

KVM仮想マシンの移行

virt-cloneで。

他の方法。

KVM仮想マシンの削除

poolの中にvolumeが居る。

仮想マシンのクローン

virt-cloneというコマンドがあるらしい。

仮想マシンがものすごく遅い。

virsh edit vmnameで一番最初の行がこうなっているか確認。

<domain type='kvm'>

ものすごく遅い仮想マシンではこうなっていた。

<domain type='qemu'>

kvmに書き換えて仮想マシンを起動しようとすると、Check that virtualization is enabled in the host BIOS、というメッセージがでた。そういうことなのか。

rootでvirshが使えない

/etc/libvirt/qemu.confをいじる。

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として使う

  • .qcow2ファイルをコピーする
  • virt-installする。NATの場合は--network bridge=virbr0
  • DHCPサーバから見えてるならDHCPにする。virt-edit -d vmname /etc/netplan/01-netcfg.yaml(もしくは/etc/network/interfaces)でVMイメージ内のファイルを触る。
  • virsh net-dhcp-leases defaultIPアドレスをチェックしてログインする。
  • DHCP固定でIPアドレスを振りたい場合は、virsh net-edit defaultする。この場合は全VMを止める必要がある。virsh net-update default add ip-dhcp-hostというのもあるらしい。これなら他のVMを止める必要がないようだ。virsh edit vmnamemac addressを変えるのもあり。