#author("2019-01-30T08:09:06+00:00","default:sysosa","sysosa") #author("2019-01-30T08:13:53+00:00","default:sysosa","sysosa") &color(white,blue){留意}; /dev/kvmの所有者に注意 [[libvirt]]にて、ユーザ qemu をlibvirtdの担当にさせたのなら /dev/kvm のグループパーミッションは qemu にしないとだめみたい #code(nonumber){{ [root@c ~]# ls -l /dev/kvm crw-rw---- 1 root qemu 10, 232 1月 31 23:48 /dev/kvm [root@c ~]# }} [[libvirt/仮想マシン作成/windowsPC]] ***qemu-imgでディスクイメージを作成 [#u0e74b8b] ストレージを直接指定するなら、まず&color(magenta){qemu-img};コマンドで仮想マシンのディスクイメージを作ります ここでは、場所を /opt/kvm として、作成するイメージは qcow2 形式で 32GBほどとします。 #code(nonumber){{ [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 ~]# }} 一応確認してみます #code(nonumber){{ [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の仮想マシンを作ってみます。 ***virt-installで仮想マシンを作成 [#s36e4e9f] CentOS7の例 #code(nonumber){{ [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 }} と実行すると、続く画面で下記が表記された #code(nonumber){{ WARNING グラフィカルコンソールに接続できません: virt-viewer がインストールされていません。'virt-viewer' パッケージをインストールしてください。 WARNING ゲストのコンソールがないため、デフォルト値 --wait -1 を適用します。 インストールの開始中... 割り当て中 'HDD1.qcow2.img' | 8.0 GB 00:00:00 ドメインを作成中... | 0 B 00:00:00 仮想マシンのインストールが進行中です。インストールが完了するまで を待っています。 }} この段階で vnc で 仮想化サーバの 5900 番に繋げると、下図の様に表示される。 &ref(2017y02m01d_223035988.png,nolink);&ref(2017y02m01d_224857256.png,nolink); このvnc画面を経由して、仮想マシンにOSをインストールします。 ***仮想マシンの制御 [#e6358de5] 作成した仮想マシンを停止、起動させるには、仮想マシンに&color(orangered){acpid};がインストールされていることが必要 #code(nonumber){{ [root@c103 ~]# yum install acpid [root@c103 ~]# systemctl enable acpid.service [root@c103 ~]# systemctl start acpid.service }} こうすることで、仮想化サーバから virsh コマンドで制御可能に #code(nonumber){{ [root@c ~]# virsh virsh # list --all Id 名前 状態 ---------------------------------------------------- 5 c20 実行中 virsh # shutdown c20 ドメイン c20 はシャットダウン中です virsh # start c20 ドメイン c20 が起動されました virsh # }} こんな感じで。 ***コマンドラインで仮想マシンを作る [#ifa16d91] 参照先 &size(10){[[https://qiita.com/jimaoka/items/d528a7f55e832982c193>+https://qiita.com/jimaoka/items/d528a7f55e832982c193]]}; コマンドラインしか利用できない環境で仮想マシンを作る #code(nonumber){{ [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 }} 実行した画面で起動シーケンスが始まり、下記のような画面になる &ref(2018y03m20d_221029322.png,nolink); &color(red){*};&size(10){ただこれだと指値でhddを区分けできないみたい}; インストール完了後、再びコマンドラインで接続するには virsh コマンドから console で繋げる。 #code(nonumber){{ [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: }} ***qemuからkvm [#kadcf86f] #code(nonumber){{ <domain type='qemu'> ↓ <domain type='kvm'> <emulator>/usr/libexec/qemu-kvm</emulator> }} ***kickstartファイルを使って [#p805d2bf] [[kickstart]]にて自動インストールなisoを別途作って仮想マシンを作っているが、 isoを別途作成せずとも、標準提供なMinimalなisoとkickstartファイルで仮想マシンを作ってみる。 まずは、ディスクイメージを作る #code(nonumber){{ [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)に割り当てている #code(nonumber){{ [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が構築されます #code(nonumber){{ [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 らをインストールすれば完了かな ***virshからconsoleで仮想マシンに接続するには [#uf5f2eb3] CentOS6では仮想マシンの/etc/grub.confを下記のように修正して再起動する。 #code(nonumber,diff){{ --- /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」を修正します。 CentOS7では、同じくgrubを修正しますが、まずはテンプレートの「/etc/default/grub」を修正します。 #code(nonumber,diff){{ --- /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" }} その後、システムがUEFIでbootするなら その後、grubを作ります #code(nonumber){{ (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と判断すればいいのかも。 とする。 UEFIかBIOSなのかは、「/boot/efi/EFI/BOOT/」があればUEFIと判断すればいいのかも。