zoukankan      html  css  js  c++  java
  • 虚拟化技术之kvm虚拟机创建工具virt-install

      在前边的博客中,我们创建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实现》;

  • 相关阅读:
    修改mysql root账户登录密码
    taglib的uri问题
    encoding/path可能引起无数奇怪的问题
    查看JSTL的doc解决问题
    matlab 读取nc
    matlab fread
    用matlab将nc数据读出来,写成二进制文件,然后用grads画图
    matlab 三维绘制
    flex label 换行
    Struts2的使用以及Spring整合Struts2
  • 原文地址:https://www.cnblogs.com/qiuhom-1874/p/13520939.html
Copyright © 2011-2022 走看看