KVM(Kernel-based Virtual Machine)是衆多虛擬化技術之一,它是Linux內核中的一個模塊,該模塊依賴於CPU,若是CPU支持虛擬化,那麼該模塊才能夠被加載。KVM技術是硬件層面的虛擬化,它會爲咱們虛擬各類硬件設備,這樣咱們能夠在已有操做系統上運行別的操做系統。node
sudo apt install cpu-checker -y sudo kvm-ok
先安裝cpu-checker工具,而後使用其帶的kvm-ok命令檢查kvm模塊是否加載ubuntu
注:lsmod | grep kvm也能夠查看kvm模塊是否加載緩存
sudo apt install ubuntu-virt-server
軟件包ubuntu-virt-server依賴的兩個主要的軟件包是qemu-kvm和libvirt-bin。服務器
sudo apt-get install virtinst
該軟件包提供4個命令來管理虛擬機網絡
默認狀況下,KVM新建立的虛擬機使用NAT網絡(虛擬機能夠訪問外面,外面看不到它)。這種NAT機制不經過網卡,只經過內核內部的IP轉發來進行數據傳輸,因此外面的機器訪問不到虛擬機。爲了能讓外面的機器訪問虛擬機,須要建立虛擬網橋,把虛擬機的虛擬網卡與外部物理網卡經過網橋橋接起來。dom
編輯/etc/sysctl.conf文件工具
# 去掉該行前面的#號,開啓轉發功能 net.ipv4.ip_forward = 1
執行sudo sysctl -p命令使配置生效ui
在宿主機上安裝bridge-utils軟件包:操作系統
sudo apt-get install bridge-utils
編輯/etc/network/interfaces,而後添加虛擬網橋網橋br0,將物理網卡enp4s0f2添加到網橋。3d
注:將物理網卡enp4s0f2添加到br0後,物理網卡的IP地址將失去做用,因此下面的配置文件中沒有爲enp4s0f2指定IP
[...] auto enp4s0f2 iface enp4s0f2 inet manual auto br0 iface br0 inet dhcp address 10.10.10.2 網橋IP地址 netmask 255.255.255.0 掩碼 gateway 10.10.10.1 bridge_ports enp4s0f2 #將物理網卡添加到虛擬網橋中 bridge_stp off bridge_maxwait 0 bridge_fd 0 [...]
重啓網絡
#sudo /etc/init.d/networking restart 或 #sudo service networking restart
重啓網絡以後,執行brctl show查看網橋是否添加成功,下面顯示個人機器已成功建立網橋,並將enp4s0f2網卡添加到網橋中
首先準備好鏡像文件,我這裏準備了ubuntu-server-adm64.iso鏡像文件,而後經過前面提到的命令來建立虛擬機
sudo virt-install \ --name=myvps1 \ --ram=512 \ --network bridge:br0 \ --disk path=/var/lib/libvirt/images/myvps1.img,bus=virtio,size=10 \ --graphics vnc,listen=0.0.0.0 --noautoconsole \ --hvm \ --cdrom ./ubuntu-server-adm64.iso
下面解釋一下各個參數的做用:
固然關於參數的詳解使用man virt-install來查看
若是虛擬機建立成功則會顯示如下內容
咱們使用VNC軟件來鏈接虛擬機,VNC軟件是一款開源的Linux遠程桌面控制軟件,和Windows下的Teamviewer或者是QQ自帶的遠程桌面控制同樣。VNC分服務端和客戶端,安裝客戶端的電腦能夠遠程控制安裝服務端的電腦,剛纔咱們在建立虛擬機的時候,指定支持vnc遠程控制,因此咱們下載一個vnc客戶端就能夠了。下載地址
下面是vnc軟件的鏈接界面,VNS Server填寫網橋的IP便可,Name能夠隨意命名。
鏈接成功後就會開始裝系統的步驟,這裏就不介紹了。
建立虛擬機的時候會自動建立兩塊虛擬網卡出來,虛擬機內部有一塊(ens3),虛擬機外部也有一塊(vnet0),這個下圖有顯示。在建立虛擬機的咱們指定爲網橋,意思是未來把外部那塊網卡(vnet0)添加到網橋中。而物理機的網卡(enp4s0f2)已被添加的網橋中,這樣外部就能夠和虛擬機進行通訊了(虛擬機內部那塊網卡IP必須和網橋在一個IP段)。
外部虛擬網卡
網橋br0中添加了兩塊網卡(端口)
使用下面的命令來啓動剛建立的虛擬機
# virsh start myvps1
讓虛擬機隨物理機一塊兒啓動
# virsh autostart myvps1
列出正在運行的虛擬機,全部虛擬機,關閉的虛擬機
# virsh list # virsh list --all # virsh list --inactive
重啓
# virsh reboot myvps1
關機
# virsh shutdown myvps1
有時咱們須要把某個虛擬機暫時關閉,而又想啓動時恢復當時的狀態,這是須要用到save命令
# virsh save myvps1 myvps1-20171202.state
執行上面的命令後,虛擬機的內存會被保存到一個文件中,而後虛擬機自動關閉
# virsh restore myvps1-20171202.state
恢復虛擬機
掛起
# virsh suspend myvps1
恢復
# virsh resume myvps1
在虛擬機運行一段時間後可能會須要添加更多的磁盤空間。這裏可使用attach-disk命令對磁盤擴容。
咱們使用dd命令來產生一個文件
# sudo dd if=/dev/zero of=/var/lib/libvirt/images/myvps1-disk2.image bs=1M count=4096
該命令會爲咱們生成一個4GB大小的文件
使用attach-disk命令,把剛剛建立的文件添加到myvps1虛擬機,做爲其磁盤使用:
# virsh attach-disk myvps1 \ /var/lib/libvirt/images/myvps1-disk2.img vdb \ --live \ --cache none
這樣一個名爲vdb的虛擬磁盤就被添加到虛擬機中了
將硬盤添加到虛擬機後,須要在虛擬機中對新的硬盤進行格式化才能使用。下面的操做都是在虛擬機myvps1中進行的
查看硬盤是否添加成功
# sudo fdisk -l
上圖能夠看到已經有磁盤/dev/vdb,可是未分區和格式化,關於Linux下如何對分區進行格式化請自行百度
查看主機cpu核數
# virsh nodeinf0
個人機器顯示兩個核,也就是每一個虛擬機最多能有兩個CPU核
查看當前虛擬機(myvps1)虛擬機核數,顯示只有一個核,vcpu 0表示第0個核,而不是核數爲0
# virsh vcpuinfo myvps1
關閉虛擬機 # virsh shutdown myvps1 修改最大核數爲2核,並設置到配置文件(/etc/libvirt/qemu下) # virsh setvcpus myvps1 2 --maximum --config 設置核數爲2到配置文件(/etc/libvirt/qemu下) # virsh setvcpu2 myvps1 2 --config 重啓虛擬機 # virsh start myvps1
上圖顯示出兩個cpu核表示咱們設置成功
增長內存核增長CPU核數同樣,先設置最大內存,在設置當前內存
查看當前虛擬機信息,能夠看到當前的內存設置 # virsh dominfo myvps1 設置最大內存爲2G # virsh setmaxmem myvps1 2097152 --config 設置當前內存爲1G # virsh setmem myvps1 1048576 --config 重啓虛擬機 # virsh shutdown myvps1 # virsh start myvps1
有時咱們須要幾臺環境相同的虛擬機,這時,咱們不須要從頭建立,只須要克隆便可
先關閉虛擬機 # virsh shutdown myvps1 克隆虛擬機 # sudo virsh-clone \ --original myvps1 \ --name myvps3 \ --file /var/lib/libvirt/images/myvps3.img 啓動克隆的虛擬機 # virsh start myvps3
虛擬機鏡像作好後,咱們可能須要修改虛擬機的IP地址,虛擬機內部的文件等。固然能夠先啓動虛擬機,而後經過VNC或者SSH進去修改。不過,方便的方法時使用virt-edit命令來直接編輯虛擬機鏡像文件便可。virt-edit是libguestfs-tools包提供的命令。
# sudo apt install libguestfs-tools
這個軟件包專門管理虛擬機的虛擬磁盤文件,提供的工具備:
固然還有不少命令,這裏就不一一列出了
# virsh undefine myvps1 # virsh pool-refresh default
在執行virsh undefine myvps1時,虛擬機的虛擬磁盤文件/var/lib/libvirt/images/myvps1.img文件不會被刪除,須要手動刪除。刪除完畢後須要執行virsh pool-refresh default命令清楚虛擬機的緩存記錄