虛擬化技術之kvm虛擬機器建立工具virt-install

1874發表於2020-08-18

  在前邊的部落格中,我們建立KVM虛擬機器用到了virt-manager,這個工具是一個圖形化工具,建立虛擬機器很方便;除此我們還是用virsh define/create +虛擬機器配置檔案來建立虛擬機器,這種方式是通過配置檔案的方式,我們把定義虛擬機器的資訊寫成一個.xml格式的描述檔案,然後使用virsh這個工具來讀取配置檔案,從而根據我們定義的配置檔案建立虛擬機器;今天我們來了解下直接在命令列使用virt-install命令的方式來建立虛擬機器;

  1、virt-install的幫助資訊

[root@node1 ~]# virt-install -h
usage: virt-install --name NAME --memory MB STORAGE INSTALL [options]

從指定安裝源建立新虛擬機器。

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  --connect URI         通過 libvirt URI 連線到虛擬機器管理程式

通用選項:
  -n NAME, --name NAME  客戶機例項名稱
  --memory MEMORY       Configure guest memory allocation. Ex:
                        --memory 1024 (in MiB)
                        --memory 512,maxmemory=1024
                        --memory 512,maxmemory=1024,hotplugmemorymax=2048,hotplugmemoryslots=2
  --vcpus VCPUS         Number of vcpus to configure for your guest. Ex:
                        --vcpus 5
                        --vcpus 5,maxvcpus=10,cpuset=1-4,6,8
                        --vcpus sockets=2,cores=4,threads=2
  --cpu CPU             CPU model and features. Ex:
                        --cpu coreduo,+x2apic
                        --cpu host-passthrough
                        --cpu host
  --metadata METADATA   配置客戶機後設資料。例如:
                        --metadata name=foo,title="My pretty title",uuid=...
                        --metadata description="My nice long description"

安裝方法選項:
  --cdrom CDROM         光碟機安裝介質
  -l LOCATION, --location LOCATION
                        安裝源 (例如:nfs:host:/path, http://host/path,
                        ftp://host/path)
  --pxe                 使用 PXE 協議從網路引導
  --import              在已有的磁碟映象中構建客戶機
  --livecd              將光碟機介質視為 Live CD
  -x EXTRA_ARGS, --extra-args EXTRA_ARGS
                        將附加引數新增到由 --location
                        引導的核心中
  --initrd-inject INITRD_INJECT
                        新增指定檔案到由 --location 指定的 initrd
                        根中
  --os-variant DISTRO_VARIANT
                        在客戶機上安裝的作業系統,例如:'fedor
                        a18'、'rhel6'、'winxp' 等。
  --boot BOOT           配置客戶機引導設定。例如:
                        --boot hd,cdrom,menu=on
                        --boot init=/sbin/init (針對容器)
  --idmap IDMAP         為 LXC 容器啟用使用者名稱稱空間。例如:
                        --idmap uid_start=0,uid_target=1000,uid_count=10

裝置選項:
  --disk DISK           指定儲存的各種選項。例如:
                        --disk size=10 (在預設位置建立 10GiB 映象)
                        --disk /my/existing/disk,cache=none
                        --disk device=cdrom,bus=scsi
                        --disk=?
  -w NETWORK, --network NETWORK
                        配置客戶機網路介面。例如:
                        --network bridge=mybr0
                        --network network=my_libvirt_virtual_net
                        --network network=mynet,model=virtio,mac=00:11...
                        --network none
                        --network help
  --graphics GRAPHICS   配置客戶機顯示設定。例如:
                        --graphics vnc
                        --graphics spice,port=5901,tlsport=5902
                        --graphics none
                        --graphics vnc,password=foobar,port=5910,keymap=ja
  --controller CONTROLLER
                        配置客戶機控制器裝置。例如:
                        --controller type=usb,model=ich9-ehci1
  --input INPUT         配置客戶機輸入裝置。例如:
                        --input tablet
                        --input keyboard,bus=usb
  --serial SERIAL       配置客戶機串列埠裝置
  --parallel PARALLEL   配置客戶機並口裝置
  --channel CHANNEL     配置客戶機通訊通道
  --console CONSOLE     配置文字控制檯連線主機與客戶機
  --hostdev HOSTDEV     配置物理 USB/PCI 等主機裝置與客戶機共享
  --filesystem FILESYSTEM
                        傳遞主機目錄到客戶機。例如:
                        --filesystem /my/source/dir,/dir/in/guest
                        --filesystem template_name,/,type=template
  --sound [SOUND]       配置客戶機聲音裝置模擬
  --watchdog WATCHDOG   配置客戶機 watchdog 裝置
  --video VIDEO         配置客戶機視訊硬體。
  --smartcard SMARTCARD
                        配置客戶機智慧卡裝置。例如:
                        --smartcard mode=passthrough
  --redirdev REDIRDEV   配置客戶機重定向裝置。例如:
                        --redirdev usb,type=tcp,server=192.168.1.1:4000
  --memballoon MEMBALLOON
                        配置客戶機 memballoon 裝置。例如:
                        --memballoon model=virtio
  --tpm TPM             配置客戶機 TPM 裝置。例如:
                        --tpm /dev/tpm
  --rng RNG             Configure a guest RNG device. Ex:
                        --rng /dev/urandom
  --panic PANIC         配置客戶機 panic 裝置。例如:
                        --panic default
  --memdev MEMDEV       Configure a guest memory device. Ex:
                        --memdev dimm,target_size=1024

客戶機配置選項:
  --security SECURITY   設定域安全驅動配置。
  --cputune CPUTUNE     Tune CPU parameters for the domain process.
  --numatune NUMATUNE   為域程式調整 NUMA 策略。
  --memtune MEMTUNE     為域程式調整記憶體策略。
  --blkiotune BLKIOTUNE
                        為域程式調整 blkio 策略。
  --memorybacking MEMORYBACKING
                        為域程式設定記憶體後備策略。例如:
                        --memorybacking hugepages=on
  --features FEATURES   設定域 <features> XML。例如:
                        --features acpi=off
                        --features apic=on,eoi=on
  --clock CLOCK         設定域 <clock> XML。例如:
                        --clock offset=localtime,rtc_tickpolicy=catchup
  --pm PM               配置 VM 電源管理功能
  --events EVENTS       配置 VM 生命週期管理策略
  --resource RESOURCE   配置 VM 資源分割槽(cgroups)
  --sysinfo SYSINFO     Configure SMBIOS System Information. Ex:
                        --sysinfo emulate
                        --sysinfo host
                        --sysinfo bios_vendor=Vendor_Inc.,bios_version=1.2.3-abc,...
                        --sysinfo system_manufacturer=System_Corp.,system_product=Computer,...
                        --sysinfo baseBoard_manufacturer=Baseboard_Corp.,baseBoard_product=Motherboard,...
  --qemu-commandline QEMU_COMMANDLINE
                        Pass arguments directly to the qemu emulator. Ex:
                        --qemu-commandline='-display gtk,gl=on'
                        --qemu-commandline env=DISPLAY=:0.1

虛擬化平臺選項:
  -v, --hvm             這個客戶機應該是一個全虛擬化客戶機
  -p, --paravirt        這個客戶機應該是一個半虛擬化客戶機
  --container           這個客戶機應該是一個容器客戶機
  --virt-type HV_TYPE   要使用的管理程式名稱 (kvm, qemu, xen, ...)
  --arch ARCH           模擬 CPU 架構
  --machine MACHINE     機器型別為模擬型別

其它選項:
  --autostart           主機啟動時自動啟動域。
  --transient           Create a transient domain.
  --wait WAIT           請等待數分鐘以便完成安裝。
  --noautoconsole       不要自動嘗試連線到客戶端控制檯
  --noreboot            安裝完成後不啟動客戶機。
  --print-xml [XMLONLY]
                        列印生成的 XML 域,而不是建立客戶機。
  --dry-run             執行安裝程式,但不建立裝置或定義客戶
                        機。
  --check CHECK         啟用或禁用驗證檢查。例如:
                        --check path_in_use=off
                        --check all=off
  -q, --quiet           抑制非錯誤輸出
  -d, --debug           輸入故障排除資訊

使用 '--option=?' 或 '--option help' 來檢視可用的子選項
請參考 man 手冊,以便了解示例和完整的選項語法。
[root@node1 ~]#

  提示:如果要檢視某一個選項的子選項,可以使用選項加?或者選項加--help來檢視,如下所示

[root@node1 ~]# virt-install   --memorybacking ?
--memorybacking options:
  clearxml
  hugepages
  locked
  nodeset
  nosharepages
  size
  unit

[root@node1 ~]# virt-install   --memorybacking help
--memorybacking options:
  clearxml
  hugepages
  locked
  nodeset
  nosharepages
  size
  unit

[root@node1 ~]#

  2、建立一個虛擬機器

  2.1、上傳一個映象到宿主機

[root@node1 ~]# cd /kvm/iso/
[root@node1 iso]# ls
[root@node1 iso]# rz 
rz waiting to receive.
 zmodem trl+C ȡ

  100%  811008 KB 26161 KB/s 00:00:31       0 Errors-1708.iso...

[root@node1 iso]# ls
CentOS-7-x86_64-Minimal-1708.iso
[root@node1 iso]#

  提示:建議把映象單獨放在一個目錄下;

  2.2、建立磁碟

[root@node1 iso]# cd
[root@node1 ~]# cd /kvm/images/
[root@node1 images]# ls
c1.qcow2  c2.qcow2  c3.qcow2  cirros-0.5.0-x86_64-disk.img
[root@node1 images]# qemu-img create -f qcow2 ./centos7.qcow2 10G
Formatting './centos7.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off 
[root@node1 images]# ll 
總用量 41989476
-rw-r--r-- 1 root root      197120 8月  15 13:23 c1.qcow2
-rw------- 1 qemu qemu 21478375424 8月  18 13:07 c2.qcow2
-rw------- 1 root root 21478375424 8月  17 00:23 c3.qcow2
-rw-r--r-- 1 root root      197120 8月  18 13:08 centos7.qcow2
-rw-r--r-- 1 qemu qemu    40108032 8月  18 13:01 cirros-0.5.0-x86_64-disk.img
[root@node1 images]# 

  提示:建立磁碟可以使用-o preallocation來指定磁碟分配策略,它支援 off, metadata, falloc, full,其中off表示不預分配(預設不指定就是這個),metadate,表示分配元素據資訊,falloc表示隨檔案的增大而增大,full表示全部分配;

  2.3、建立虛擬機器,並指定使用我們剛才上傳的映象

[root@node1 images]# virt-install --virt-type kvm --name c7 --ram 1024 --vcpus 2 --cdrom=/kvm/iso/CentOS-7-x86_64-Minimal-1708.iso --disk path=/kvm/images/centos7.qcow2 --network=default --graphics vnc,listen=0.0.0.0 --noautoconsole 

開始安裝......
域安裝仍在進行。您可以重新連線
到控制檯以便完成安裝程式。
[root@node1 images]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 1     generic                        running
 2     c2                             running
 3     centos7.0                      running
 4     c7                             running

[root@node1 images]# 

  提示:--virt-type用來指定虛擬機器型別,--name用來指定建立的虛擬機器名稱,--ram 用於指定記憶體大小 --vcpus用於指定虛擬cpu核心數量 --cdrom用於指定關盤映象檔案位置 --disk path用於指定磁碟路徑,--network用於指定網路名稱 --graphics用於指定虛擬圖形顯示卡,--noaustart用於指定不隨宿主機啟動而啟動;到此虛擬機器就建立好了,接下來我們需要用影像軟體VNC或者virt-manager連線到虛擬機器的控制檯介面進行安裝系統操作;

  3、使用vnc連線虛擬機器安裝作業系統

  3.1、檢視宿主機上的監聽埠情況

[root@node1 images]# ss -tnl
State      Recv-Q Send-Q          Local Address:Port                         Peer Address:Port              
LISTEN     0      1                           *:5903                                    *:*                  
LISTEN     0      128                         *:111                                     *:*                  
LISTEN     0      5               192.168.122.1:53                                      *:*                  
LISTEN     0      128                         *:22                                      *:*                  
LISTEN     0      128                 127.0.0.1:631                                     *:*                  
LISTEN     0      100                 127.0.0.1:25                                      *:*                  
LISTEN     0      128                 127.0.0.1:5900                                    *:*                  
LISTEN     0      128                 127.0.0.1:5901                                    *:*                  
LISTEN     0      128                 127.0.0.1:5902                                    *:*                  
LISTEN     0      128                        :::111                                    :::*                  
LISTEN     0      128                        :::22                                     :::*                  
LISTEN     0      128                       ::1:631                                    :::*                  
LISTEN     0      100                       ::1:25                                     :::*                  
[root@node1 images]# 

  提示:預設情況vnc的第一個虛擬顯示器(視窗)監聽在5900這個埠,第二個視窗監聽5901,依次類推;從上面的資訊可以看到,我們宿主機上有4個vnc視窗,我們最後建立的虛擬機器應該是第四個視窗,監聽在5903這個埠;

  3.2、使用VNC連線宿主機的5903埠

  提示:使用tightvnc viewer連線宿主機上的非第一個視窗需要在後面用雙冒號+埠的方式來連線指定視窗;如果是第一個視窗直接寫宿主機的ip地址即可;這裡需要注意一點,用virsh或virt-manager建立的虛擬機器,預設它是把vnc監聽在127.0.0.1上,所以用外部的vnc軟體是無法正常連線進去的;

  提示:至此我們就可以安裝虛擬機器操作了,安裝完成後重啟即可;安裝系統的過程就不過多演示了;

  3.3、建立windows系統虛擬機器

  virtio 是一種 I/O 半虛擬化解決方案,是一套通用 I/O 裝置虛擬化的程式,是對半虛擬化 Hypervisor 中的一組通用I/O 裝置的抽象。提供了一套上層應用與各 Hypervisor 虛擬化裝置(KVM,Xen,VMware等)之間的通訊框架和程式設計介面,減少跨平臺所帶來的相容性問題,大大提高驅動程式開發效率,windows 系統需要單獨安裝virtio驅動,linux系統自帶virtio驅動。

  3.3.1、建立目錄,並下載virtio驅動(根據安裝的windos版本架構下載驅動)下載地址https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.96/

[root@node1 kvm]# ls
images  iso
[root@node1 kvm]# mkdir virtio
[root@node1 kvm]# cd virtio
[root@node1 virtio]# wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.96/virtio-win_amd64.vfd
--2020-08-18 13:58:51--  https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.96/virtio-win_amd64.vfd
正在解析主機 fedorapeople.org (fedorapeople.org)... 152.19.134.199, 2610:28:3090:3001:5054:ff:fea7:9474
正在連線 fedorapeople.org (fedorapeople.org)|152.19.134.199|:443... 已連線。
已發出 HTTP 請求,正在等待回應... 301 Moved Permanently
位置:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.96/virtio-win-0.1.96_amd64.vfd [跟隨至新的 URL]
--2020-08-18 13:58:54--  https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.96/virtio-win-0.1.96_amd64.vfd
再次使用存在的到 fedorapeople.org:443 的連線。
已發出 HTTP 請求,正在等待回應... 200 OK
長度:2949120 (2.8M) [application/x-troff-man]
正在儲存至: “virtio-win_amd64.vfd”

100%[====================================================================>] 2,949,120   8.04KB/s 用時 6m 8s  

2020-08-18 14:05:03 (7.83 KB/s) - 已儲存 “virtio-win_amd64.vfd” [2949120/2949120])

[root@node1 virtio]# ls
virtio-win_amd64.vfd
[root@node1 virtio]# pwd
/kvm/virtio
[root@node1 virtio]#

  3.3.2、上傳映象

[root@node1 images]# cd ../iso/
[root@node1 iso]# ls
CentOS-7-x86_64-Minimal-1708.iso
[root@node1 iso]# rz
rz waiting to receive.
 zmodem trl+C ȡ

  100% 3189038 KB 27025 KB/s 00:01:58       0 Errors_with_sp1_x64_dvd_u_677685.iso...

[root@node1 iso]# ll
總用量 4000048
-rw-r--r-- 1 qemu qemu  830472192 2月  22 2018 CentOS-7-x86_64-Minimal-1708.iso
-rw-r--r-- 1 root root 3265574912 3月   6 2018 cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso
[root@node1 iso]# 

  3.3.3、建立磁碟

[root@node1 iso]# cd ../virtio/
[root@node1 virtio]# qemu-img create -f qcow2 /kvm/images/win7.qcow2 50G
Formatting '/kvm/images/win7.qcow2', fmt=qcow2 size=53687091200 encryption=off cluster_size=65536 lazy_refcounts=off 
[root@node1 virtio]# ls /kvm/images/win7.qcow2 
/kvm/images/win7.qcow2
[root@node1 virtio]#

  3.3.4、建立虛擬機器

[root@node1 virtio]# virt-install --virt-type kvm --name win7 --ram 1024 --vcpus=2 --os-type=windows --cdrom=/kvm/iso/cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso --disk path=/kvm/images/win7.qcow2,format=qcow2,bus=virtio --disk path=/kvm/virtio/virtio-win_amd64.vfd,device=floppy --network=default --graphics vnc,listen=0.0.0.0 --noautoconsole  

開始安裝......
域安裝仍在進行。您可以重新連線
到控制檯以便完成安裝程式。
[root@node1 virtio]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 1     win7                           running
 -     c2                             關閉
 -     c7                             關閉
 -     centos7.0                      關閉
 -     generic                        關閉

[root@node1 virtio]# ss -tnl
State       Recv-Q Send-Q        Local Address:Port                       Peer Address:Port              
LISTEN      0      1                         *:5900                                  *:*                  
LISTEN      0      128                       *:111                                   *:*                  
LISTEN      0      5             192.168.122.1:53                                    *:*                  
LISTEN      0      128                       *:22                                    *:*                  
LISTEN      0      128               127.0.0.1:631                                   *:*                  
LISTEN      0      100               127.0.0.1:25                                    *:*                  
LISTEN      0      128                      :::111                                  :::*                  
LISTEN      0      128                      :::22                                   :::*                  
LISTEN      0      128                     ::1:631                                  :::*                  
LISTEN      0      100                     ::1:25                                   :::*                  
[root@node1 virtio]#

   提示:可以看到虛擬機器已經建立好了,並跑起來了,對應vnc5900埠也處於監聽狀態;

  3.3.5、用vnc連線虛擬機器控制檯,安裝系統

 

  提示:這個根據自己安裝的系統來選就可以了;

  提示:如果能夠把我們建立的磁碟識別到,說明我們的驅動選擇是正確的,否則你需要更改驅動;

  提示:等這個安裝完成後重啟,windows系統就裝到我們建立的虛擬機器上了;需要注意一點這個介面重啟,虛擬機器不會自動啟動,需要我們手動的去啟動虛擬機器,才能下面的安裝,安裝完成後如下圖所示;

  到此基於virt-install工具在命令列建立windows虛擬機器,結合vnc連線到虛擬機器上安裝作業系統的過程就結束了;其實在生產中,我們更本不會這樣用,因為生產上用的虛擬機器數量往往很大,用人為手動的方式去安裝顯然是不行的;我們可以藉助自動化工具pxe+kickstart 或者使用cobbler配合這些自動化安裝系統的工具來安裝系統,我們只需要使用指令碼把建立虛擬機器的命令寫好,建立好網路配置好網路,磁碟建立命令寫好,一個指令碼我們可以批量建立很多臺虛擬機器;有關pxe伺服器和cobbler伺服器的搭建,有興趣的可以參考本人部落格《Linux系統自動化安裝之pxe實現》和《Linux系統自動化安裝之cobbler實現》;

相關文章