Linux虛擬化 xen的工具棧介紹

試驗環境centos6.10

xen的工具棧介紹:

查看xl目錄的幫助:xl helphtml

查看xen下安裝了哪些虛擬機:xl listnode

# xl list Domain-0
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  1024     2     r-----      53.1

ID:從0開始的編號,即便中間刪除了某個虛擬機,編號不會重用,繼續往下發。linux

Mem:分配給虛擬機多少內存ios

VCPUS:分配給虛擬機幾個CPU核心c++

State:虛擬機的狀態shell

  • r:正常運行中
  • b:阻塞
  • p:暫停
  • s:中止
  • c:崩潰了
  • d:正在關機的過程當中

Time:此虛擬機運行了多久了。centos

建立虛擬機domU微信

首先要指定domu的模式(pv,hvm,pv on hvm)網絡

建立pv模式的domuapp

1,指定kernel,kernel文件放到哪裏?能夠在dom0中,也能夠在domu中

2,initrd或initramfs

3,domu內核模塊

4,根文件系統

5,swap設備

將上述內容定義在domu的配置文件

注意:xm和xl命令啓動domu的配置文件略有區別。

建立domu的配置文件的具體寫法,能夠參考man xl.cfg

name:域名稱,必須惟一,必須有

builder:指明虛擬機的類型。generic表示pv;hvm表示hvm

vcpus:虛擬機使用cpu核心的數量

maxvcpus:最大的cpu核心使用數量,要大於vcpus。當vcpus數量不夠用時,就會增長到maxvcpus

cpus:指明vcpu能夠運行在哪些物理cpu核心

  • all:全部
  • "0-3,5,^1":運行在0,2,3,5物理cpu上

memory=MBYTES:虛擬機使用的內存大小

maxmem=MBYTES:最大內存大小(原理同maxvcpus)

on-poweroff=ACTION:指明當用戶輸入了關機命令後,虛擬機應該怎麼響應。不指定的話,就是關閉虛擬機。

ACTION:destroy(關機),restart(重啓),preserve等

on-reboot=ACTION:指明當用戶輸入了關機命令後,虛擬機應該怎麼響應。不指定的話,就是重啓虛擬機。

on-crash=ACTION:指明當虛擬機崩潰時,應該怎麼響應

uuid:domu的惟一標識

disk=[ "DISK_SPEC_STRING", "DISK_SPEC_STRING", ...]:指明磁盤設備列表。

  • 有2種方式指定磁盤。一個是使用磁盤映像文件;另外一個是dom0在物理磁盤上劃分一個分區給domu使用,這種方式性能好,但不利於xen的總體遷移。

  • disk指定的官方文檔

  • 經常使用選項:[<target>, [<format>, [<vdev>, [<access>]]]],

    target:磁盤映像文件

    format:磁盤的種類,可使用qemu-img命令查看,支持的種類有:raw cow qcow vdi vmdk cloop dmg bochs vpc vvfat qcow2 qed vhdx parallels nbd blkdebug null host_cdrom host_floppy host_device file gluster

    vdev:在domu種的設備文件類型,支持hd[x], xvd[x], sd[x] 等

    access:訪問權限

    ro, r (specifies read-only)

    rw, w (specifies read/write)

    disk=[ "/images/xen/linux.img,raw,xvda,rw"]

  • qemu-img建立磁盤映像:qemu-img create [-f fmt] [-o options] filename [size]

    用-o?,查看都有什麼options

    # qemu-img create -f raw -o? /images/xen/busybox.img
    Supported options:
    size             Virtual disk size
    preallocation    Preallocation mode (allowed values: off, falloc, full)

    下面的命令建立了一個大小爲2G的,格式爲raw的磁盤映像文件,但實際是0字節。

    # qemu-img create -f raw -o size=2G /images/xen/busybox.img
    # qemu-img create -f raw /images/xen/busybox.img 2G
    Formatting '/images/xen/busybox.img', fmt=raw size=2147483648
    # ll -h
    -rw-r--r--. 1 root root 2.0G Feb  1 11:51 busybox.img
    # du -sh busybox.img
    0       busybox.img

vif=[ "NET_SPEC_STRING", "NET_SPEC_STRING", ...]:指明網絡接口列表。

vfb=[ "VFB_SPEC_STRING", "VFB_SPEC_STRING", ...]:指明virtual frame buffer列表

pci=[ "PCI_SPEC_STRING", "PCI_SPEC_STRING", ...]:pci插槽的設備列表。

kernel="PATHNAME":內核文件路徑,此路徑爲dom0中的路徑

ramdisk="PATHNAME":爲kernel指定內核提供的ramdisk文件路徑

root="STRING":指明根文件系統。

extra="STRING":額外傳遞給內核引導時使用的參數。

pv模式下的專用的bootloader="PROGRAM":若是domu使用本身的kernel和ramdisk,此時須要一個dom0中的應用程序來實現其bootloader功能。

要麼使用kernel和ramdisk的組合,要麼使用bootloader。

下面建立一個虛擬機:

1,建立一個磁盤映像

# qemu-img create -f raw -o size=2G /images/xen/busybox.img
# qemu-img create -f raw /images/xen/busybox.img 2G
Formatting '/images/xen/busybox.img', fmt=raw size=2147483648
# ll -h
-rw-r--r--. 1 root root 2.0G Feb  1 11:51 busybox.img
# du -sh busybox.img
0       busybox.img

2,給磁盤分區建立ext4文件系統

不給此磁盤映像分區了,就按一個分區使用。分區命令(fdisk)

# mkfs -t ext2 busybox.img
mke2fs 1.41.12 (17-May-2010)
busybox.img is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 39 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

會提示【busybox.img is not a block special device.】,輸入y回車。

使用df和du命令確認一下,文件系統的類型和分區的實際大小。分區大小不是0了,變成了97M了,由於在分區裏安裝了文件系統。

# df -T busybox.img
Filesystem           Type 1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg_c610-lv_root
                     ext4   6795192 2644828   3782136  42% /
[root@c610 xen]# du -sh busybox.img
97M     busybox.img

3,掛載此文件系統到/mnt目錄。

掛載本地迴環文件(ios文件,img文件等)

# mount -o loop busybox.img /mnt
[root@c610 xen]# ls /mnt/
lost+found

發現有了文件lost+found,說明掛載成功。

如今就能夠在此文件系統裏安裝操做系統了。爲了簡單起見,用busybox模擬操做系統。因此編譯安裝busybox。

到此爲止咱們發現,對domu的分區建立,文件系統建立等,都是在dom0裏操做進行的。

爲了編譯,先安裝開發環境:

# yum  -y groupinstall "Development Tolls" "Server Platform Development"

下載busybox源代碼,解壓縮源代碼壓縮包

# tar xf busybox.tar.bz2

若是在操做系統上安裝busybox的話,busybox使用的庫是操做系統上的動態庫,但咱們domu上沒有操做系統,因此就沒有庫能夠供busybox使用,因此編譯busybox時,就須要把所使用的庫靜態鏈接進busybox,因此先安裝busybox所使用的靜態庫。

# yum -y install glibc-static
# yum -y install gcc

配置busybox的編譯選項:

# make menuconfig

出現以下畫面:

勾選:Build Busybox as a static binary (no shared libs),保存退出

編譯:make

安裝:make install

安裝成功後,會出現[_install]目錄,把此目錄裏的全部內容,並保持原屬性,複製到掛載這domu文件系統的/mnt目錄下。

# cp -a _install/* /mnt

查看/mnt目錄:

# ll
drwxr-xr-x. 2 root root  4096 Feb  1 14:17 bin
lrwxrwxrwx. 1 root root    11 Feb  1 14:17 linuxrc -> bin/busybox
drwx------. 2 root root 16384 Feb  1 12:30 lost+found
drwxr-xr-x. 2 root root  4096 Feb  1 14:17 sbin
drwxr-xr-x. 4 root root  4096 Feb  1 14:17 usr

發現已經有了幾個目錄,但還缺乏幾個目錄,在/mnt下手動建立這些目錄。最主要的是proc,sys,dev。

# mkdir proc sys dev etc var boot home

嘗試使用busybox裏的sh

# chroot /mnt /bin/sh
/ # ls
bin         dev         home        lost+found  sbin        usr
boot        etc         linuxrc     proc        sys         var
/ #

發現咱們建立的目錄都存在,說明一切正常。

到此爲止,domu的根文件系統,咱們已經準備穩當了,就差啓動文件了。

前面說過,centos6不能安裝在dom0上,可是能夠安裝在domu上,全部就直接使用原來centos上的啓動文件.

在/boot下建立一個軟鏈接。

# ln -sv vmlinuz-2.6.32-754.el6.x86_64 vmlinuz
`vmlinuz' -> `vmlinuz-2.6.32-754.el6.x86_64'
# ll -h
lrwxrwxrwx. 1 root root   29 Feb  1 14:30 vmlinuz -> vmlinuz-2.6.32-754.el6.x86_64
-rwxr-xr-x. 1 root root 4.2M Jun 20  2018 vmlinuz-2.6.32-754.el6.x86_64

在/boot下再建立一個軟鏈接

# ln -sv initramfs-2.6.32-754.el6.x86_64.img initramfs.img
`initramfs.img' -> `initramfs-2.6.32-754.el6.x86_64.img'
# ll -h
lrwxrwxrwx. 1 root root   35 Feb  1 14:32 initramfs.img -> initramfs-2.6.32-754.el6.x86_64.img
-rw-------. 1 root root 5.9M Jan 31 14:16 initrd-2.6.32-754.el6.x86_64kdump.img

建立xl命令,建立domu所使用的配置文件,配置文件放在/etc/xen目錄。xlexample是例子。

xl.conf文件是xl命令本身的配置文件。

# cd /etc/xen
# ll
total 24
drwx------. 2 root root 4096 Dec 12 20:07 auto
-rw-r--r--. 1 root root  661 Dec 11 20:44 cpupool
drwx------. 2 root root 4096 Jan 31 14:56 scripts
-rw-r--r--. 1 root root 1436 Dec 11 20:44 xl.conf
-rw-r--r--. 1 root root 1386 Dec 11 20:44 xlexample.hvm
-rw-r--r--. 1 root root 1250 Dec 11 20:44 xlexample.pvlinux

複製xlexample.pvlinux

# cp xlexample.pvlinux busybox.pvlinux

修改busybox.pvlinux文件

由於咱們使用的dom0裏的內核文件,dom0裏是使用SELinux功能的,咱們要關閉它。

name = "busybox001.pvlinux"
kernel = "/boot/vmlinuz"
#ramdisk = "/boot/initrd.gz"
ramdisk = "/boot/initramfs.img"
extra = "selinux=0 init=/bin/sh"
memory = 256
vcpus = 2
#vif = [ '' ]
disk = [ '/images/xen/busybox.img,raw,xvda,rw' ]
root = "/dev/xvda ro"
  • name :domu的名字,不能和別的domu重複
  • kernel:內核文件
  • ramdisk:?
  • extar:給內核傳遞的參數,這裏傳遞的參數的目的是關閉selinux功能;init進程是/bin/sh
  • memory:內存大小
  • vcpus:cpu個數
  • vif:網卡
  • disk:文件系統
  • root:系統啓動是,把根文件系統掛載到哪裏。ro是隻讀。

建立domu# xl help create

# xl help create
Usage: xl [-vfN] create <ConfigFile> [options] [vars]

Create a domain from config file <filename>.

Options:

-h                      Print this help.
-p                      Leave the domain paused after it is created.
-c                      Connect to the console after the domain is created.
-f FILE, --defconfig=FILE
                     Use the given configuration file.
-q, --quiet             Quiet.
-n, --dryrun            Dry run - prints the resulting configuration
                         (deprecated in favour of global -N option).
-d                      Enable debug messages.
-F                      Run in foreground until death of the domain.
-e                      Do not wait in the background for the death of the domain.
-V, --vncviewer         Connect to the VNC display after the domain is created.

xl [-vfN]裏的v:顯示詳細信息;f:xl命令使用哪一個配置文件,不指定的話默認使用/etc/xen/xl.conf

<ConfigFile>:建立domu所使用的配置文件

options裏的-d:debug模式;-n:試驗運行

# xl -v create busybox.pvlinux -n
Parsing config from busybox.pvlinux
{
    "c_info": {
        "type": "pv",
        "name": "busybox001.pvlinux",
        "uuid": "23537733-95f2-44d5-84d5-07aa76282134",
        "run_hotplug_scripts": "True"
    },
    "b_info": {
        "max_vcpus": 2,
        "avail_vcpus": [
            0,
            1
        ],
        "max_memkb": 262144,
        "target_memkb": 262144,
        "shadow_memkb": 4096,
        "sched_params": {

        },
        "claim_mode": "True",
        "kernel": "/boot/vmlinuz",
        "cmdline": "root=/dev/xvda ro",
        "ramdisk": "/boot/initramfs.img",
        "type.pv": {

        },
        "arch_arm": {

        }
    },
    "disks": [
        {
            "pdev_path": "/images/xen/busybox.img",
            "vdev": "xvda",
            "format": "raw",
            "readwrite": 1
        }
    ],
    "on_reboot": "restart",
    "on_soft_reset": "soft_reset"

查看試驗運行的結果,若是沒有問題,就建立

[root@c610 xen]# xl -v create busybox.pvlinux

建立成功

# xl -v create busybox.pvlinux
# xl list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  1024     2     r-----     748.7
busybox001.pvlinux                           3   256     2     r-----       2.4

c/c++ 學習互助QQ羣:877684253

本人微信:xiaoshitou5854

相關文章
相關標籤/搜索