留意
/dev/kvmの所有者に注意
libvirtにて、ユーザ qemu をlibvirtdの担当にさせたのなら /dev/kvm のグループパーミッションは qemu にしないとだめみたい
[root@c ~]# ls -l /dev/kvm
crw-rw---- 1 root qemu 10, 232 1月 31 23:48 /dev/kvm
[root@c ~]#
ストレージを直接指定するなら、まずqemu-imgコマンドで仮想マシンのディスクイメージを作ります
ここでは、場所を /opt/kvm として、作成するイメージは qcow2 形式で 32GBほどとします。
[root@c ~]# mkdir /opt/kvm
[root@c ~]# qemu-img create -f qcow2 /opt/kvm/HDD.qcow2.img 32G
Formatting '/opt/kvm/HDD.qcow2.img', fmt=qcow2 size=34359738368 encryption=off cluster_size=65536 lazy_refcounts=off refcount_bits=16
[root@c ~]#
[root@c ~]# ls -lh /opt/kvm/HDD.qcow2.img
-rw-r--r-- 1 root root 193K 2月 1 22:21 /opt/kvm/HDD.qcow2.img
[root@c ~]#
一応確認してみます
[root@c ~]# qemu-img info /opt/kvm/HDD.qcow2.img
image: /opt/kvm/HDD.qcow2.img
file format: qcow2
virtual size: 32G (34359738368 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
[root@c ~]#
それで、CentOS7の仮想マシンを作ってみます。
CentOS7の例
[root@c ~]# export PATH=/opt/local/bin:$PATH
[root@c ~]# export PYTHONPATH=/opt/local/lib64/python2.7/site-packages
[root@c ~]# export LD_LIBRARY_PATH=/opt/libvirt/lib
[root@c ~]# virt-install --connect qemu:///system --virt-type kvm --machine=pc \
--name c20 --ram 1024 --cpu host --vcpus=1 --description "テストOS" --os-type linux \
--os-variant rhel7 --boot cdrom,hd,menu=on \
--disk path=/opt/kvm/HDD.qcow2.img,format=qcow2,bus=virtio,cache=writeback \
--cdrom /export/CentOS-7-x86_64-DVD-1611.iso --network bridge=br0,model=virtio \
--graphics vnc,port=5900,listen=0.0.0.0,keymap=ja
と実行すると、続く画面で下記が表記された
WARNING グラフィカルコンソールに接続できません: virt-viewer がインストールされていません。'virt-viewer' パッケージをインストールしてください。
WARNING ゲストのコンソールがないため、デフォルト値 --wait -1 を適用します。
インストールの開始中...
割り当て中 'HDD1.qcow2.img' | 8.0 GB 00:00:00
ドメインを作成中... | 0 B 00:00:00
仮想マシンのインストールが進行中です。インストールが完了するまで を待っています。
この段階で vnc で 仮想化サーバの 5900 番に繋げると、下図の様に表示される。
このvnc画面を経由して、仮想マシンにOSをインストールします。
作成した仮想マシンを停止、起動させるには、仮想マシンにacpidがインストールされていることが必要
[root@c103 ~]# yum install acpid
[root@c103 ~]# systemctl enable acpid.service
[root@c103 ~]# systemctl start acpid.service
こうすることで、仮想化サーバから virsh コマンドで制御可能に
[root@c ~]# virsh
virsh # list --all
Id 名前 状態
----------------------------------------------------
5 c20 実行中
virsh # shutdown c20
ドメイン c20 はシャットダウン中です
virsh # start c20
ドメイン c20 が起動されました
virsh #
こんな感じで。
参照先
https://qiita.com/jimaoka/items/d528a7f55e832982c193
コマンドラインしか利用できない環境で仮想マシンを作る
[root@e ~]# virsh net-destroy default
[root@e ~]# virsh net-autostart default --disable
[root@e ~]# mkdir /kvm && cd $_
[root@e kvm]# qemu-img create -f qcow2 /kvm/ad.qcow2.img 32G
[root@e kvm]# virt-install --connect qemu:///system \
--name ad \
--vcpus 1 \
--memory 1024 \
--cpu host \
--metadata description="ad" \
--location "/kvm/CentOS-7-x86_64-Minimal-1708.iso" \
--os-variant rhel7 \
--boot cdrom,hd,menu=on \
--disk path=/kvm/ad.qcow2.img,format=qcow2,bus=virtio,cache=writeback \
--network bridge=br0,model=virtio \
--nographics \
--extra-args='console=tty0 console=ttyS0,115200n8' \
--hvm
実行した画面で起動シーケンスが始まり、下記のような画面になる
*ただこれだと指値でhddを区分けできないみたい
インストール完了後、再びコマンドラインで接続するには virsh コマンドから console で繋げる。
[root@e ~]# virsh
virsh # list
Id 名前 状態
----------------------------------------------------
2 ad 実行中
virsh # console ad
ドメイン ad に接続しました
エスケープ文字は ^] です
CentOS Linux 7 (Core)
Kernel 3.10.0-693.el7.x86_64 on an x86_64
ad login:
<domain type='qemu'>
↓
<domain type='kvm'>
<emulator>/usr/libexec/qemu-kvm</emulator>
kickstartにて自動インストールなisoを別途作って仮想マシンを作っているが、
isoを別途作成せずとも、標準提供なMinimalなisoとkickstartファイルで仮想マシンを作ってみる。
まずは、ディスクイメージを作る
[root@c ~]# cd /kvm/
[root@c kvm]# qemu-img create -f qcow2 i03.qcow2.img 32G
そしてkickstartファイルを作る。
ここでは簡単に、「Minimal」なOSを作る。ipはdhcp由来で、HDDは/bootに512MB、swapに1GB、残りを/(root)に割り当てている
[root@c kvm]# vi i03.ks
cdrom
ignoredisk --only-use=vda
lang ja_JP.UTF-8
keyboard --vckeymap=jp --xlayouts='jp'
network --bootproto=dhcp --device=eth0 --noipv6 --activate
auth --enableshadow --passalgo=sha512
rootpw --plaintext xxxxxxx
firstboot --disabled
firewall --disabled
selinux --disabled
eula --agreed
services --enabled="chronyd"
timezone Asia/Tokyo --isUtc --ntpservers=c.sybyl.local
bootloader --location=mbr --boot-drive=vda --append="net.ifnames=0"
clearpart --drives=vda --all --initlabel
part /boot --fstype="xfs" --ondisk=vda --size=512
part swap --fstype="swap" --ondisk=vda --size=1024
part / --fstype="xfs" --ondisk=vda --size=4096 --grow
part /boot/efi --fstype="efi" --ondisk=vda --size=512 --fsoptions="umask=0077,shortname=winnt"
reboot
%packages
@^minimal
@core
chrony
-biosdevname
%end
[root@c kvm]#
作ったkickstartファイルを使って
仮想マシンを作る。
ほぼ自動でOSが構築されます
[root@c kvm]# virt-install --connect qemu:///system --virt-type kvm --machine=pc \
--name i03 --ram 1024 --cpu host --vcpus=1 --description "kickstart i03" --os-type linux \
--os-variant rhel7 --boot cdrom,hd,menu=on \
--disk path=/kvm/i03.qcow2.img,format=qcow2,bus=virtio,cache=writeback \
--location /export/CentOS-7-x86_64-Minimal-1708.iso --network bridge=br0,model=virtio \
--initrd-inject i03.ks \
--nographics \
--extra-args='ks=file:/i03.ks console=tty0 console=ttyS0,115200n8'
[root@c kvm]#
OSインストール完了後に acpid らをインストールすれば完了かな
CentOS6では仮想マシンの/etc/grub.confを下記のように修正して再起動する。
--- /etc/grub.conf.190130 2019-01-30 16:44:59.660544024 +0900
+++ /etc/grub.conf 2019-01-30 16:46:02.923322087 +0900
@@ -11,9 +11,11 @@
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
+serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1
+terminal --timeout=5 serial console
title CentOS (2.6.32-696.23.1.el6.x86_64)
root (hd0,0)
- kernel /vmlinuz-2.6.32-696.23.1.el6.x86_64 ro root=UUID=027b9ca4-6120-(略) rhgb quiet
+ kernel /vmlinuz-2.6.32-696.23.1.el6.x86_64 ro root=UUID=027b9ca4-6120-(略) rhgb quiet console=ttyS0,11520
initrd /initramfs-2.6.32-696.23.1.el6.x86_64.img
title CentOS 6 (2.6.32-696.el6.x86_64)
root (hd0,0)
一応仮想マシンにserialがあれば、「virsh console <仮想マシン>」で繋がる。
CentOS7では、同じくgrubを修正しますが、まずはテンプレートの「/etc/default/grub」を修正します。
--- /etc/default/grub.orig 2017-08-29 21:46:57.232489257 +0900
+++ /etc/default/grub 2019-01-30 17:02:24.150360582 +0900
@@ -3,5 +3,5 @@
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
-GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
+GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet console=tty0 console=ttyS0,115200n8r"
GRUB_DISABLE_RECOVERY="true"
その後、grubを作ります
(UEFIなら)
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
(BIOSなら)
grub2-mkconfig -o /boot/grub2/grub.cfg
とする。
UEFIかBIOSなのかは、「/boot/efi/EFI/BOOT/」があればUEFIと判断すればいいのかも。