常用命令
1、查看運行的虛擬機
# virsh list
查看所有的虛擬機(關閉和運行的,不包括摧毀的)
# virsh list --all
2.、啟動虛擬機
# virsh start 虛擬機名稱
虛擬機隨物理機啟動而啟動
# virsh autostart 虛擬機名稱
取消虛擬機隨物理機啟動而啟動
# virsh autostart --disable 虛擬機名稱
3、連接虛擬機
#virsh console 虛擬機名稱
4、退出虛擬機
快捷鍵: ctrl+]
5、關閉虛擬機
virsh shutdown 虛擬機名稱
#前提虛擬機需要(安裝acpid服務)
yum install -y acpid
/etc/init.d/acpid start
6、在virsh list中刪除該虛擬機
virsh destroy 虛擬機名稱
7、徹底刪除虛擬機
#解除標記
virsh undefine 虛擬機名稱
然后刪除虛擬機存儲所在的位置
8、掛起虛擬機
virsh suspend 虛擬機名稱 #掛起
virsh resume 虛擬機名稱 #恢復被掛起的
virsh console 無法連接虛機
進入虛擬機操作
grubby --update-kernel=ALL --args="console=ttyS0"
reboot
未試過
1、在KVM(客戶機)下開機啟動並啟動服務
systemctl enable serial-getty@ttyS0.service
systemctl start serial-getty@ttyS0.service
2、在宿主機下訪問
virsh console KVM名稱
其他
1,建立磁盤
#qemu-img create /opt/kvm/centos7.img 50G
#qemu-img create -f qcow2 -o preallocation=metadata /opt/kvm/centos7.qcow2 50G (支持快照)
以上兩條命令都表示在/opt/kvm下創建50G系統盤。
第一是以默認格式img創建一個50G系統盤,測試使用時推薦使用。
第二條以qcow2格式創建一個50G系統盤,推薦在正式環境中使用,支持快照等高級功能,該功能將在拓展篇中記錄。
驗證方法:#ls -lh /opt/kvm/centos7.img 看是否顯示占用空間與輸入的一致
2,安裝操作系統
#virt-install -n Centos --ram=1024 --disk centos7.img --location CentOS-6.7-x86_64-bin-DVD1.iso --graphics none --check all=off --network network=default --vcpus=1 --extra-args='console=tty0 console=ttyS0'
注:
以上命令在當前/opt/kvm目錄下操作,所有文件都為使用絕對路徑-n --指定系統名稱
--ram --指定內存大小
--disk --指定系統盤
--location --指定安裝的鏡像盤路徑、名稱
--network network=default --指定使用的網卡
--vcpus=1 --指定CPU核實
--check all=off --可刪除
--check path_in_use=off 或 --check all=off 選項覆蓋
--extra-args='console=tty0 console=ttyS0' 這串表示可以通過console的方式連接已經創建的虛擬機。
--graphics none這一串是表示在把圖形化輸出到命令行終端上。
另外一種把圖形化輸出到命令行操作終端的方法是修改系統上的/boot/grub/grub.conf文件,在kernel后面加上console ttyS0,vim /etc/securetty,添加ttyS0,然后重啟系統。
驗證方法:
1)安裝過程無報錯、輸入#virsh list --all可以查看到已安裝的系統信息。
2)virsh start Centos
3)virsh console Centos
4)成功進入虛擬系統
來自:https://www.cnblogs.com/chenjiye/p/11271860.html
查看虛機ip
[root@data ~]# virsh dumpxml centos7.0 | grep mac
<partition>/machine</partition>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<mac address='52:54:00:74:ae:f5'/>
[root@data ~]# arp -a
? (192.168.0.106) at 52:54:00:74:ae:f5 [ether] on br0
######一個小腳本#########未測試
#!/bin/bash
#ping當前網段內在線的主機,以便產生arp記錄.
for ip in 10.2.2.{1..253};do
{
ping -c1 $ip >/dev/null 2>&1
}&
done
#依次查找arp記錄.
running_vms=`virsh list |grep running`
echo -ne "共有`echo "$running_vms"|wc -l`個虛擬機在運行.\n"
for i in `echo "$running_vms" | awk '{ print $2 }'`;do
mac=`virsh dumpxml $i |grep "mac address"|sed "s/.*'\(.*\)'.*/\1/g"`
ip=`arp -ne |grep "$mac" |awk '{printf $1}'`
printf "%-30s %-30s\n" $i $ip
done
------
安裝kvm
概述
KVM(Kernel-based Virtual Machine, 即內核級虛擬機) 是一個開源的系統虛擬化模塊。它使用Linux自身的調度器進行管理,所以相對於Xen,其核心
源碼很少。目前KVM已成為學術界的主流VMM之一,它包含一個為處理器提供底層虛擬化 可加載的核心模塊kvm.ko(kvm-intel.ko 或 kvm-amd.ko)。kvm
還需要一個經過修改的QEMU 軟件(qemu-kvm),作為虛擬機上層控制和界面。KVM的虛擬化需要硬件支持(如 Intel VT技術或者AMD V技術)。是基於硬件的
完全虛擬化。 KVM可以運行多個其本身運行未改動的鏡像的虛擬機,例如Windows,Mac OS X ,每個虛擬機都有各自的虛擬硬件,比如網卡、硬盤核圖形適配
器等。
KVM和QEMU的關系
QEMU是個獨立的虛擬化解決方案,從這個角度它並不依賴KVM。而KVM是另一套虛擬化解決方案,不過因為這個方案實際上只實現了內核中對處理器(Intel VT)
, AMD SVM)虛擬化特性的支持,換言之,它缺乏設備虛擬化以及相應的用戶空間管理虛擬機的工具,所以它借用了QEMU的代碼並加以精簡,連同KVM一起構成了
另一個獨立的虛擬化解決方案:KVM+QEMU。
組件
qemu-kvm 主要的KVM程序包
python-virtinst 創建虛擬機所需要的命令行工具和程序庫
virt-manager GUI虛擬機管理工具
virt-top 虛擬機統計命令
virt-viewer GUI連接程序,連接到已配置好的虛擬機
libvirt C語言工具包,提供libvirt服務
libvirt-client 虛擬客戶機提供的C語言工具包
virt-install 基於libvirt服務的虛擬機創建命令
bridge-utils 創建和管理橋接設備的工具
安裝kvm
1)檢查cpu是否支持虛擬化
[root@kevin ~]# grep vmx /proc/cpuinfo
如果有vmx信息輸出,就說明支持VT;如果沒有任何的輸出,說明你的cpu不支持,將無法使用KVM虛擬機。
2)確保BIOS里開啟虛擬化功能,即查看是否加載KVM模塊
[root@kevin ~]# lsmod | grep kvm
kvm_intel 170086 0
kvm 566340 1 kvm_intel
irqbypass 13503 1 kvm
=========================================================
如果沒有加載,運行以下命令:
[root@kevin ~]# modprobe kvm
[root@kevin ~]# modprobe kvm-intel
[root@kevin ~]# lsmod | grep kvm
kvm_intel 170086 0
kvm 566340 1 kvm_intel
irqbypass 13503 1 kvm
=========================================================
內核模塊導出了一個名為/dev/kvm的設備,這個設備將虛擬機的的地址空間獨立於內核或者任何應用程序的地址空間。
[root@kevin ~]# ll /dev/kvm
crw-rw-rw-. 1 root kvm 10, 232 1月 29 11:56 /dev/kvm
3)橋接網絡
如果沒有brctl命令(用來管理網橋的工具),則需要安裝bridge-utils
[root@kevin ~]# yum -y install bridge-utils
[root@kevin ~]# systemctl restart network
配置KVM的網橋模式
[root@kevin ~]# cd /etc/sysconfig/network-scripts/
[root@openstack network-scripts]# cp ifcfg-eno1 ifcfg-br0
[root@openstack network-scripts]# cat ifcfg-br0
TYPE="Bridge" //這一行修改為Bridge
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="br0" //修改設備名稱為br0
#UUID="fdbad04f-dae3-440e-8a8b-01d6a7bc9fe0" //這一行注釋
DEVICE="br0" //修改設備為br0
ONBOOT="yes"
IPADDR="192.168.10.210"
PREFIX="24"
GATEWAY="192.168.10.1"
DNS1="8.8.8.8"
[root@openstack network-scripts]# cat ifcfg-eno1
TYPE="Ethernet"
BRIDGE=br0 //添加這一行
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eno1"
UUID="fdbad04f-dae3-440e-8a8b-01d6a7bc9fe0"
DEVICE="eno1"
ONBOOT="yes"
#IPADDR="192.168.10.210" //注釋掉這幾行
#PREFIX="24"
#GATEWAY="192.168.10.1"
#DNS1="8.8.8.8"
#########################示例配置文件#########################
##網卡
cd /etc/sysconfig/network-scripts/
cat ifcfg-eth1
TYPE=Ethernet
#添加類型
BRIDGE=br0
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth1
UUID=f7920a47-e843-4c67-a85a-03081cb69305
DEVICE=eth1
ONBOOT=yes
#IPADDR=10.20.200.4
#PREFIX=16
##網橋
#原來網卡的基礎上修改
cat ifcfg-br0
TYPE="Bridge" #類型
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME="br0" ##name
#UUID=f7920a47-e843-4c67-a85a-03081cb69305 ##注釋掉
DEVICE=br0 ##device
ONBOOT=yes
IPADDR=10.20.200.4
PREFIX=16
#############################################################
重啟網卡服務
[root@openstack network-scripts]# systemctl restart network
查看網卡
[root@openstack network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.0894ef518b22 no eno1
virbr0 8000.52540095d7c2 yes virbr0-nic
查看ip信息
[root@openstack network-scripts]# ifconfig |head -20
#
#這里安裝必要的非圖形即可
4)安裝libvirt及kvm
libvirt是管理虛擬機的API庫,不僅支持KVM虛擬機,也可以管理Xen等方案下的虛擬機。
[root@kevin ~]# yum -y install libcanberra-gtk2 qemu-kvm.x86_64 qemu-kvm-tools.x86_64 libvirt.x86_64 libvirt-cim.x86_64 libvirt-client.x86_64
libvirt-java.noarch libvirt-python.x86_64 libiscsi-1.7.0-5.el6.x86_64 dbus-devel virt-clone tunctl virt-manager libvirt libvirt-python python-virtinst
由於要用virt-manager圖形化安裝虛擬機,所以還需要安裝X-window(這個在前面部署VNC環境里就已經安裝了)
[root@kevin ~]# yum groupinstall "X Window System"
安裝中文字符,解決界面亂碼問題
[root@kevin ~]# yum install -y dejavu-lgc-sans-fonts
[root@kevin ~]# yum groupinstall -y "Fonts"
啟用libvirt
[root@kevin ~]# systemctl enable libvirtd
[root@kevin ~]# systemctl start libvirtd
##創建磁盤並查看
qemu-img create -f qcow2 kvm-test.qcow2 10G
qemu-img info kvm-test.qcow2
##修改kvm配置文件使程序使用root用戶啟動
vim /etc/libvirt/qemu.conf
systemctl restart libvirtd ##啟動服務
##創建命令
virt-install --name=study01 --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --location=/root/CentOS-7-x86_64-Minimal-1810.iso --disk path=/root/kvm-test.qcow2,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"
執行后需要填寫安裝系統的選項
命令說明:
--name 指定虛擬機的名稱
--memory 指定分配給虛擬機的內存資源大小
maxmemory 指定可調節的最大內存資源大小,因為KVM支持熱調整虛擬機的資源
--vcpus 指定分配給虛擬機的CPU核心數量
maxvcpus 指定可調節的最大CPU核心數量
--os-type 指定虛擬機安裝的操作系統類型
--os-variant 指定系統的發行版本
--location 指定ISO鏡像文件所在的路徑,支持使用網絡資源路徑,也就是說可以使用URL
--disk path 指定虛擬硬盤所存放的路徑及名稱,size 則是指定該硬盤的可用大小,單位是G
--bridge 指定使用哪一個橋接網卡,也就是說使用橋接的網絡模式
--graphics 指定是否開啟圖形
--console 定義終端的屬性,target_type 則是定義終端的類型
--extra-args 定義終端額外的參數
##查看運行的虛擬機:
virsh list --all
##常用命令url
https://www.cnblogs.com/kevingrace/p/5570504.html
##vnc 配置
https://www.cnblogs.com/kevingrace/p/5821450.html
##安裝kvm
https://www.cnblogs.com/kevingrace/p/8377645.html
https://blog.csdn.net/dhRainer/article/details/83411555
https://blog.csdn.net/andy9900010/article/details/106108362
#虛擬機遷移
https://blog.csdn.net/swimming_in_IT_/article/details/53914197
##########################################
##kvm 使用
Kvm虛擬機默認配置文件位置
/etc/libvirt/qemu
virsh list ##正在運行的虛擬機
virsh list --all ##所有
virsh start CentOS6.5 ##啟動虛機 名字
virsh shutdown CentOS6.5 ##關閉
virsh destroy CentOS6.5 ##強制關閉
virsh undefine CentOS6.5 ##移除
virsh autostart CentOS6.5 ##設置開機自啟動
#默認情況下virsh工具不能對linux虛擬機進行關機操作
#linux操作系統需要開啟與啟動acpid服務。在安裝KVM linux虛擬機必須配置此服務。
# yum -y install acpid
# /etc/init.d/acpid start
##通過配置文件啟動虛擬機
virsh create /etc/libvirt/qemu/CentOS6.5.xml
virsh suspend CentOS6.5 #掛起虛機
virsh resume CentOS6.5 #恢復虛機
###重命名虛機
#停止虛擬機
[root@kvm qemu]# virsh shutdown CentOS6u5
#導出虛擬機的配置文件
[root@kvm qemu]# pwd
/etc/libvirt/qemu
[root@kvm qemu-img]# virsh dumpxml CentOS6u5 > test-CentOS6u5.xml
#更改配置文件
[root@kvm qemu]# sed -i 's/CentOS6u5/test-CentOS6u5/g' test-CentOS6u5.xml
#注 可以不用更改鏡像名
#移除原有的虛擬機
[root@kvm qemu]# virsh undefine CentOS6u5
#加載新建的虛擬機
[root@kvm qemu]# virsh define test-CentOS6u5.xml
#啟動虛擬機
[root@kvm qemu]# virsh start test-CentOS6u5
###虛擬機創建快照
https://blog.csdn.net/demonson/article/details/84140143
##通過vnc 連接
https://www.cnblogs.com/linuxprobe/p/5724546.html
##根據虛機生成xml 文件
virsh domxml-to-native qemu-argv –xml xxx.xml
https://blog.51cto.com/brighttime/2176928
yum -y install libcanberra-gtk2 qemu-kvm.x86_64 qemu-kvm-tools.x86_64 libvirt.x86_64 libvirt-cim.x86_64 libvirt-client.x86_64 libvirt-java.noarch libvirt-python.x86_64 libiscsi-1.7.0-5.el6.x86_64 dbus-devel virt-clone tunctl virt-manager libvirt libvirt-python python-virtinst
virt-install --name yon --ram=1024 --vcpus=2 --location=CentOS-7-x86_64-Minimal-1804.iso --disk path=kvm-test.qcow2,size=10 --network bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"
virt-install --name=study01 --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --location=/root/CentOS-7-x86_64-Minimal-1810.iso --disk path=/root/kvm-test.qcow2,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"
