zoukankan      html  css  js  c++  java
  • xen虚拟机操作整理

    1,登陆物理机器

    2,查看物理机建立虚拟机的列表

    root:~ # xm li
    Name                                        ID   Mem VCPUs      State   Time(s)
    Domain-0                                     0 49450     8     r-----  52615.6
    centos1                                     83  2048     2     -b----     86.7
    centos5                                      1  4096     8     -b---- 3545138.5
    centos3                                      3  2048     2     -b----    625.1
    
    其中
    State:
        r -> 运行状态
        b -> 阻塞状态,未占用cpu时间片(如等待IO)或不可运行(启动失败)
        p -> 暂停状态(一般是xm pause),仍消耗内存,但不会被虚拟机调度
        s -> 正在关闭状态(reboot/destroy/shutdown)
        d -> dying state,没有完全关闭

    3,查看物理机对应各自虚拟机存放的路径(比如我想查看centos1具体存放在哪个磁盘)

    root:~ # xm li -l |grep "centos1"
        (name centos1)
                (uname file://opt/xen/image/centos1.img)
    可以看到具体的存放路径

    4,如果某台虚拟机挂死,想重启该机器

    root:~ # xm shutdown centos1   或者直接用ID号来取代名字 比如centos1对应的id号就是83  xm shutdown 83

    5,如果想强制重启机器,将上面的步骤由shutdown 换成 destroy 即可,这个可以在sxp文件配置

    6,如果想创建虚拟机,可用创建脚本如下

    Usage: ./createvm.sh hostname ip disksize[G] memory[M](./createvm.sh vmtest 127.0.0.1 10 512)
    
    脚本内容
    #!/bin/bash
    
    function mk_img_disk() {
        dname=$1
        ddsize=$2
    
        if [ -e "$dname" ] ; then
            echo "$dname exist"
            exit -1
        fi
    
        if [ "$ddsize" -gt "0" ] ; then
            dd if=/dev/zero of="$dname" bs=1G count=$ddsize
            mkfs -t reiserfs -f -q "$dname"
            sed -i "s/^#//" $diskpath/etc/vm*.sxp
        fi
    }
    
    hostname=$1
    vmip=$2
    dsize=$3
    msize=$4
    vcpus=2
    pfvmip=`echo "$vmip" | awk -F. '{print $4}'`
    
    [ "$#" -ne "4" ] && echo "Usage: $0 hostname ip disksize[G] memory[M]" && exit
    
    diskpath=`pwd`
    gw=$(echo $vmip|sed 's/[0-9]*$/1/')  #局域网网关
    vmmac=00:16:$(echo $vmip|awk -F'.' '{printf("%02X:%02X:%02X:%02X",$1,$2,$3,$4)}') #配置mac地址
    vmname=$hostname
    os_disk="/$diskpath/image/${vmname}.img"
    
    mkdir -p etc image mnt
    
    #下面一直到End-of-sxp为sxp文件内容
    cat > etc/${vmname}.sxp <<End-of-sxp
    name="${vmname}"
    memory=$msize
    vcpus=$vcpus
    on_poweroff="destroy"
    on_reboot="restart"
    on_crash="destroy"
    localtime=0
    builder="linux"
    bootloader="/usr/bin/pygrub" #全虚拟化和半虚拟化的bootloader配置不同!
    bootargs=""
    extra=" "
    
    disk=[ 'file:$os_disk,xvda,w',
    #'file:$data_disk,xvdd1,w',
    'file:$log_disk,xvde1,w',
    'file:/vm/iso/SLES-11-SP1-x86_64.iso,xvdb:cdrom,r',
    ]
    
    vif=[ 'mac=${vmmac}',]
    vfb=['type=vnc,vncunused=1']
    
    End-of-sxp
    
    tar zxvf /vm/suse11-x64.img.tar.gz
    mv `pwd`/vm/suse11-x64.img $diskpath/image/$vmname.img
    mk_img_disk "$diskpath/image/$vmname.disk.img" $dsize
    
    mount -o loop,offset=1069286400 image/$vmname.img mnt
    sed -e "s/(^IPADDR=.*)/IPADDR="$vmip"/" -i mnt/etc/sysconfig/network/ifcfg-eth0 #配置ip
    
    echo "xen.independent_wallclock = 1" >> mnt/etc/sysctl.conf
    echo "default $gw - -" > mnt/etc/sysconfig/network/routes #默认网关
    echo $hostname > mnt/etc/HOSTNAME #配置主机名
    
    umount mnt
    rm -r mnt
    
    其中mount -o loop,offset=? image/$vmname.img mnt是把虚拟系统磁盘挂载到mnt目录下,进入mnt目录下可以直接操作虚拟机的系统文件。loop代表光盘格式,offset计算方法如下,为系统分区所在img的偏移。
    root:/xen # fdisk -lu suse11-x64.img
    You must set cylinders.
    You can do this from the extra functions menu.
    
    Disk suse11-x64.img: 0 MB, 0 bytes
    255 heads, 63 sectors/track, 0 cylinders, total 0 sectors
    Units = sectors of 1 * 512 = 512 bytes
    
                 Device Boot      Start         End      Blocks   Id  System
    suse11-x64.img1              63     2088449     1044193+  82  Linux swap / Solaris
    suse11-x64.img2   *     2088450    18860309     8385930   83  Linux
    Partition 2 has different physical/logical endings:
         phys=(1023, 254, 63) logical=(1173, 254, 63)
    
    #2088450 * 512 = 偏移

    7,创建成功后,要启动虚拟机,找到对应的配置文件,默认在当前创建脚本目录的etc 目录下

    xm create vmtest.sxp    或者后面直接跟全路径

    8,创建成功后,发现网络不通 或者其他什么原因 导致远程ssh 连不上该机器

    先用xm li 查看系统虚拟机对应的ID 号

    xm console ID号 或者名字(输入Ctrl+']'跳出)

    9,sxp 文件详解

    name="vmtest"     #虚拟机名字
    memory=1024      #虚拟机内存1G
    vcpus=1      #虚拟机cpu个数
    on_poweroff="destroy"    #强制关闭虚拟机指令
    on_reboot="restart"     #重启虚拟机指令
    on_crash="destroy"
    localtime=0
    builder="linux"
    bootloader="/usr/lib/xen/boot/domUloader.py"
    bootargs="--entry=xvda2:/boot/vmlinuz-xen,/boot/initrd-xen"
    extra=" "
    
    disk=[ 'file://disk/62b53a33-e8d9-49ae-b7b9-97024d64ef1c/image/vm1001.img,xvda,w',
    'file:/vm/iso/SLES-11-SP1-x86_64.iso,xvdb:cdrom,r', #配置软件安装源
    ]
    
    vif=[ 'mac=00:16:0A:06:02:6D',] #虚拟机MAC地址,保证局域网内唯一性
    vfb=['type=vnc,vncunused=1']

    10,其中虚拟镜像img文件的制作方法有好几种

    方法1,参照“如何快速创建 Xen 虚拟机镜像”中提到的打包一个现有系统解压到空img文件
            tar cvpzf centos.tar.gz –exclude=/centos.tar.gz –exclude=/lost+found –exclude=/media /
            dd if=/dev/zero of=centos.img bs=1 count=1 seek=10G
            mount centos.img /mnt
            然后解压centos.tar.gz到/mnt目录,然后umount即可
    方法2,在linux图形界面使用virt-manager或命令行virt-install创建虚拟机,最终生成centos.img文件(推荐)
    方法3,在linux/mac/windows上用qemu创建虚拟机(qemu性能比较差,该项目后来发展为virtualbox,很久未更新了)
            #创建虚拟磁盘
            qemu-img.exe create f:vmcentos.img 8G
            #加载安装操作系统  
            qemu.exe -kernel-kqemu -L . -m 512 -hda f:vmcentos.img -cdrom f:TDDOWNLOADCentOS-6.4-i386-minimal.iso -boot d  
            #启动检查
            qemu.exe -kernel-kqemu -L . -m 512 -hda f:vmcentos.img -boot c 

    参考网页如下:
    使用 Virtual Machine Manager 管理虚拟机
    如何快速创建 Xen 虚拟机镜像
    XEN配置参数解释
    the_book_of_xen.pdf

  • 相关阅读:
    上下文管理器
    创建项目与介绍(2)
    虚拟环境的安装(1)
    爬虫-selenium(14-2)扩展
    爬虫10-1(协程)
    Python3笔记038
    Python3笔记037
    Python3笔记036
    Python3笔记035
    Python3笔记034
  • 原文地址:https://www.cnblogs.com/ciaos/p/3229375.html
Copyright © 2011-2022 走看看