文档库 最新最全的文档下载
当前位置:文档库 › Xen源代码分析

Xen源代码分析

Xen源代码分析
Xen源代码分析

Xen源代码分析

Xen源代码分析(一)——head.s

https://www.wendangku.net/doc/f611935299.html,/bulllbat/archive/2012/11/15/27709 79.html启动汇编部分代码是xen

的引导启动程序,位于./xen/arch/x86/boot目录下。代码描述了从xen加载到调用第一个C函数“__start_xen”之间的初始化

系统环境过程。主要涉及的文件流程为

head.S->trampoline.S->x86_32.s,其中head.s为冲GRUB进入

XEN的入口文件,首先看看head.s部分都做了什么(只看32位体系)。1234567891011121314151617181920212223242526272 8293031323334353637383940414243444546474849505 1525354555657585960616263646566676869707172737 4757677787980818283848586878889909192939495969 7989910010110210310410510610710810911011111211 3114115116117118119120121122123124125126127128 1291301311321331341351361371381391401411421431 4414514614714814915015115215315415515615715815 9160161162163164165166167168169170171172173174

1751761771781791801811821831841851861871881891 9019119219319419519619719819920020120220320420 5206207208209210211212213214215216217218219220 2212222232242252262272282292302312322332342352 3623723823924024124224324424524624724824925025 1252253254255256257258259260261262263264265266 2672682692702712722732742752762772782792802812 8228328428528628728828929029129229329429529629 7298299300301302303304305306307308309310311312 3133143153163173183193203213223233243253263273 2832933033133233333433533633733833934034134234 3344345346347348349350351352353354355356357358 3593603613623633643653663673683693703713723733 74375376377/* 只能由grub 来引导,head.S 是从GRUB 进入XEN 的入口文件;开始执行的第一个汇编文件,包括初始化页表,解析早期命令行参数等工作*/#include

<xen/config.h>#include

<xen/multiboot.h>#include

<public/xen.h>#include

<asm/asm_defns.h>#include

<asm/desc.h>#include <asm/page.h>#include <asm/msr.h> .text .code32/*当xen运

行时,cpu已经处于保护模式了,和LINUX内核的处理方式一致,虚拟地址等于物理地址加上固定值*//*在

xen\include\asm-x86\x86_32\page.h中有

__XEN_VIRT_START的定义*/#define sym_phys(sym) ((sym) - __XEN_VIRT_START) /***xen 编译时的映像布局由xen\arch\x86\xen.lds.S 控制: ...#ifdef

__x86_64__#define FORMAT "elf64-x86-64"#else#define FORMAT "elf32-i386"#endif ENTRY(start) #endif OUTPUT_FORMAT(FORMAT, FORMAT, FORMAT) #ifdef __x86_64__OUTPUT_ARCH(i386:x86-64)#elseOUTPUT_ ARCH(i386)#endif PHDRS{ text

PT_LOAD ;}SECTIONS{ . = __XEN_VIRT_START +

0x100000; _start = .; .text : { _stext = .;

//Text and read-only data *(.text)

*(.text.cold) *(.text.unlikely) *(.fixup)

*(.gnu.warning) _etext = .; //End of text section } :text = 0x9090 ...**/ /*根据INTEL 手册GDT第一项无用,故而从0x08开始

*//*ring0,code,32-bit mode*/#define BOOT_CS32

0x0008 /*ring0,code,64-bit mode*/#define BOOT_CS64

0x0010 /*ring0,data*/#define BOOT_DS 0x0018 /*real-mode code*/#define BOOT_PSEUDORM_CS

0x0020 /*5 real-mode data*/#define

BOOT_PSEUDORM_DS 0x0028 ENTRY(start)

jmp __start .align 4/*** MULTIBOOT HEADER ****/#define MULTIBOOT_HEADER_FLAGS (MULTIBOOT_HEADER_MODS_ALIGNED | \ MULTIBOOT_HEADER_WANT_MEMORY) /* Magic number indicating a Multiboot header.

*/ .long MULTIBOOT_HEADER_MAGIC

/* Flags to bootloader (see Multiboot spec).

*/ .long MULTIBOOT_HEADER_FLAGS

/* Checksum: must be the negated sum of the first two fields. */ .long

-(MULTIBOOT_HEADER_MAGIC +

MULTIBOOT_HEADER_FLAGS)/*** 上面的定义是给grub 看的,表明支持multiboot,详细内容见multiboot协议

**/ .section .init.text, "ax" /*.asciz is just like .ascii, but each string is followed by a zero

byte.*/.Lbad_cpu_msg: .asciz "ERR: Not a 64-bit

CPU!".Lbad_ldr_msg: .asciz "ERR: Not a Multiboot bootloader!" bad_cpu:/*打印bad cpu错误*/ mov $(sym_phys(.Lbad_cpu_msg)),%esi # Error message

jmp print_errnot_multiboot:/*打印非多启动错误*/

mov $(sym_phys(.Lbad_ldr_msg)),%esi # Error messageprint_err:/*这里的打印用的是最基本的往显卡缓存写入数据的方式*/ mov $0xB8000,%edi # VGA framebuffer1: mov (%esi),%bl

test %bl,%bl # Terminate on '\0' sentinel2:

je 2b mov $0x3f8+5,%dx # UART Line Status Register3: in %dx,%al

test $0x20,%al # Test THR Empty flag

je 3b mov $0x3f8+0,%dx # UART Transmit Holding Register mov %bl,%al

out %al,%dx # Send a character over the serial line movsb # Write a character to the VGA framebuffer mov

$7,%al stosb # Write an attribute to the VGA framebuffer jmp 1b

gdt_boot_descr:/*GDT定义,传统模式下的全局描述符表寄存器(GDTR)长48位,由16位的界限和32位的基地址构成。由于段描述符总是8字节长,故界限的值应为8N-1。Trampoline_gdt共定义了6个描述符项,界限是6*8-1。

*/ .word 6*8-1 .long

sym_phys(trampoline_gdt) __start: cld cli /* Initialise GDT and basic data segments. */

lgdt %cs:sym_phys(gdt_boot_descr) mov $BOOT_DS,%ecx mov %ecx,%ds

mov %ecx,%es mov %ecx,%ss /*

验证并存储多重启动信息,详见“多重启动规范”。当boot loader引导32位操作系统的时候,机器必须有如下的状态:EAX:必须包含魔数0X2BADB002,这个值告诉操作系统目前它是由兼容的Multiboot 的boot loader引导的。EBX:必须包含boot loader提供的多重引导信息结构的32位物理地址。CS:必须是32位的读/执行的代码段,偏移是0以及界限是0XFFFFFFFF。具体值没有定义。SS:必须是32位的读/执行数据段,偏移是0以及界限是0XFFFFFFFF。具体值没有定义。A20 GATE :必须enable。CR0: 31位(PG)必须清除,第0位(PE)必须设置。其他位没有定义。EFLAGS:第17(VM)位必须清除,第9位(IF)必须清除,其他位没有定义。*/ /* Check for Multiboot bootloader */ cmp $0x2BADB002,%eax jne

not_multiboot /* Set up trampoline segment 64k below EBDA */ movzwl 0x40e,%eax

/* EBDA segment */ cmp $0xa000,%eax

/* sanity check (high) */ jae 0f cmp $0x4000,%eax /* sanity check (low) */ jae

1f0: movzwl 0x413,%eax /* use base memory size on failure */ shl $10-4,%eax1: sub $0x1000,%eax /* From

arch/x86/smpboot.c: start_eip had better be page-aligned! */ xor %al, %al shl $4, %eax mov %eax,sym_phys(trampoline_phys) /* Save the Multiboot info struct (after relocation) for later use. */ mov $sym_phys(cpu0_stack)+1024,%esp push %ebx call reloc

mov %eax,sym_phys(multiboot_ptr) /* Initialize BSS (no nasty surprises!) */ /*初始化BSS 段,存放程序中未初始化的全局变量。BSS段在xen\arch\x86\x86_32\xen.lds.S中定义*/ mov $sym_phys(__bss_start),%edi mov

$sym_phys(_end),%ecx sub %edi,%ecx

xor %eax,%eax rep stosb /*查询并保存CPU拓展信息。CPUID指令可提供关于处理器的实现及其能力的完整信息,任意特权级的软件都可以使用它。EAX寄存器用于决定CPUID生成什么信息EAX = 0x80000000,返回信息: EAX: Maximum Input Value for Extended Function CPUID Information. PIV之后的CPU,均大于

0x80000000EBX: ReservedECX: ReservedEDX:

ReservedEAX = 0x80000001,返回信息: EAX:Extended Processor Signature and Feature Bits.EBX:ReservedECX:Bit 0: LAHF/SAHF available in

64-bit modeBits 31-1 ReservedEDX:Bits 10-0: ReservedBit 11: SYSCALL/SYSRET available (when in

64-bit mode)Bits 19-12: Reserved = 0Bit 20: Execute Disable Bit availableBits 28-21: Reserved = 0Bit 29: Intel?

64 Architecture available if 1Bits 31-30: Reserved =

0cpuid_ext_features在xen\arch\x86\boot\trampoline.S中定义。boot_cpu_data在\xen\include\asm-x86 \ processor.h 中定义,是cpuinfo_x86的实例。CPUINFO86_ext_features 在xen\arch\x86\x86_32 \ asm-offsets.c中定义:

OFFSET(CPUINFO86_ext_features,

struct cpuinfo_x86, x86_capability[1]); OFFSET解释如下:#define offsetof (s, m) (size_t)&(((s*)0)->m)

m为结构体s中的一项,返回m距结构体起始地址的偏移量。ANSI C中常数0允许转换成任何类型的指针,但转换后指针为NULL。例中&(((s*)0)->m)这一步,并不访问m 元素,只是获取m的地址,编译时不生成访问m的代码。#define DEFINE(_sym,_val) __asm__ __volatile__ (“\n->” #_sym “%0” #_val:: “i”(_val)) #是注释

符号;%0是占位符,这里指代“i”(_val)。#define

OFFSET(_sym, _str, _mem) DEFINE(_sym, offsetof(_str, _mem)) 这条宏是将_str结构体的_mem项的偏移量赋值给_sym。*/ /* Interrogate CPU extended features via CPUID. */ mov

$0x80000000,%eax cpuid

xor %edx,%edx cmp

$0x80000000,%eax # any function > 0x80000000? jbe 1f mov $0x80000001,%eax

cpuid1:

mov %edx,sym_phys(cpuid_ext_features)

mov %edx,sym_phys(boot_cpu_data)+CPUINFO86_ ext_features #if defined(__x86_64__) /* Check for availability of long mode. */ bt $29,%edx jnc bad_cpu /* Initialise L2 identity-map and xen page table entries (16MB). */ mov

$sym_phys(l2_identmap),%edi mov

$sym_phys(l2_xenmap),%esi mov

$sym_phys(l2_bootmap),%edx mov

$0x1e3,%eax /*

PRESENT+RW+A+D+2MB+GLOBAL */ mov $8,%ecx1: mov %eax,(%edi) add $8,%edi mov %eax,(%esi) add

$8,%esi mov %eax,(%edx) add $8,%edx add

$(1<<L2_PAGETABLE_SHIFT),%eax loop

1b /* Initialise L3 identity-map page directory entries. */ mov

$sym_phys(l3_identmap),%edi mov

$(sym_phys(l2_identmap)+7),%eax mov

$4,%ecx1: mov %eax,(%edi) add $8,%edi add $PAGE_SIZE,%eax

loop 1b /* Initialise L3 xen-map page directory entry. */ mov

$(sym_phys(l2_xenmap)+7),%eax

mov %eax,sym_phys(l3_xenmap) +

l3_table_offset(XEN_VIRT_START)*8 /* Initialise L3 boot-map page directory entry. */ mov $(sym_phys(l2_bootmap)+7),%eax

mov %eax,sym_phys(l3_bootmap) + 0*8 /* Hook identity-map, xen-map, and boot-map L3 tables into PML4. */ mov

$(sym_phys(l3_bootmap)+7),%eax

mov %eax,sym_phys(idle_pg_table) + 0*8

mov $(sym_phys(l3_identmap)+7),%eax

mov %eax,sym_phys(idle_pg_table) +

l4_table_offset(DIRECTMAP_VIRT_START)*8

mov $(sym_phys(l3_xenmap)+7),%eax

mov %eax,sym_phys(idle_pg_table) +

l4_table_offset(XEN_VIRT_START)*8#else/*32位下2M页面大小,开PAE方式映射,在这里我们也看出32位内核为XEN需要开启PAE,初始化页表,将线性空间的0-12M和__PAGE_OFFSET-__PAGE_OFFSET+12M都映射到物理地址的0-12M;而将线性空间的12M-16M映射到物理地址的12M-16M(注意,这时并没有启用分页机制):*/ /* Initialize low and high mappings of memory with 2MB pages */ mov

$sym_phys(idle_pg_table_l2),%edi mov

$0xe3,%eax /*

PRESENT+RW+A+D+2MB */1:

mov %eax,__PAGE_OFFSET>>18(%edi) /* high mapping */ stosl

/* low mapping */ add $4,%edi add $(1<<L2_PAGETABLE_SHIFT),%eax cmp $DIRECTMAP_PHYS_END+0xe3,%eax jne

1b1: stosl /* low mappings cover up to 16MB */ add $4,%edi add

$(1<<L2_PAGETABLE_SHIFT),%eax cmp $(16<<20)+0xe3,%eax jne 1b#endif

/* Initialize 4kB mappings of first 2MB or 4MB of memory. */ mov $sym_phys(l1_identmap),%edi mov

$0x263,%eax /*

PRESENT+RW+A+D+SMALL_PAGES */#if

defined(__x86_64__) or $0x100,%eax

/* GLOBAL */#endif xor %ecx,%ecx1:

stosl add $4,%edi add

$PAGE_SIZE,%eax inc %ecx /* VGA hole (0xa0000-0xc0000) should be mapped UC. */ cmp $0xa0,%ecx jne 2f or

$0x10,%eax /* +PCD */2: cmp $0xc0,%ecx jne 2f and

$~0x10,%eax /* -PCD */2: cmp $L1_PAGETABLE_ENTRIES,%ecx jne 1b sub $(PAGE_SIZE-0x63),%edi#if

defined(__x86_64__)

mov %edi,sym_phys(l2_identmap)

mov %edi,sym_phys(l2_xenmap)

mov %edi,sym_phys(l2_bootmap)#else

mov %edi,sym_phys(idle_pg_table_l2)

mov %edi,sym_phys(idle_pg_table_l2) +

(__PAGE_OFFSET>>18)#endif /* Apply relocations to bootstrap trampoline. */ mov

sym_phys(trampoline_phys),%edx mov

$sym_phys(__trampoline_rel_start),%edi

mov %edx,sym_phys(trampoline_phys)1:

mov (%edi),%eax

add %edx,(%edi,%eax) add $4,%edi cmp $sym_phys(__trampoline_rel_stop),%edi

jb 1b /* Patch in the trampoline segment. */ shr $4,%edx mov

$sym_phys(__trampoline_seg_start),%edi1: mov (%edi),%eax mov %dx,(%edi,%eax)

add $4,%edi cmp

$sym_phys(__trampoline_seg_stop),%edi jb

1b call cmdline_parse_early /* Switch to low-memory stack. */ mov

sym_phys(trampoline_phys),%edi lea

0x10000(%edi),%esp lea

trampoline_boot_cpu_entry-trampoline_start(%edi),%eax pushl $BOOT_CS32 push %eax

/* Copy bootstrap trampoline to low memory, below 1MB. */

mov $sym_phys(trampoline_start),%esi mov $trampoline_end - trampoline_start,%ecx rep movsb /* Jump into the relocated trampoline. */

/*由上面的push代码段和IP后在这里执行ret相当于两个pop指令,直接跳转到trampoline.s中*/ lret

#include "cmdline.S" reloc:#include

"reloc.S" .align 16 .globl trampoline_start, trampoline_end/*第二阶段初始化,实模式

*/trampoline_start:#include

"trampoline.S"trampoline_end: .text/*第三阶段初始化*/__high_start:#ifdef __x86_64__#include

"x86_64.S"#else#include

"x86_32.S"#endif-----------------------------------------------------------

Xen源代码分析(二)——trampoline.s

汇编文件trampoline.s,为启动汇编程序第二阶段,主要工作为进入实模式,读取内存,磁盘,视频信息然后再次进入保护模式装入新的GDT(gdt_table),英文注释了很大部分,很容易理解。下面的代码注释中,从标号0开始运行,然后是标号1。

.code16

/* NB. bootsym() is only usable in real mode, or via BOOT_PSEUDORM_DS. */

#undef bootsym

/*bootsym(s)定义的是s的相对位置*/

#define bootsym(s) ((s)-trampoline_start)#define bootsym_rel(sym, off, opnd...) \

bootsym(sym),##opnd; \ 111:; \ .pushsection .trampoline_rel, "a"; \

.long 111b - (off) - .; \

.popsection#define bootsym_segrel(sym, off) \

$0,$bootsym(sym); \ 111:; \ .pushsection .trampoline_seg, "a"; \

.long 111b - (off) - .; \

.popsection .globl

trampoline_realmode_entry

trampoline_realmode_entry:

mov %cs,%ax

mov %ax,%ds

movb

$0xA5,bootsym(trampoline_cpu_started)

cld

cli

lidt bootsym(idt_48)

lgdt bootsym(gdt_48)

mov $1,%bl # EBX != 0 indicates we are an AP

xor %ax, %ax

inc %ax

lmsw %ax #

CR0.PE = 1 (enter protected mode)

ljmpl

$BOOT_CS32,$bootsym_rel(trampoline_protmode_entry,6 )idt_48: .word 0, 0, 0 # base = limit = 0

gdt_48: .word 6*8-1

.long bootsym_rel(trampoline_gdt,4) trampoline_gdt:

/* 0x0000: unused */

.quad 0x0000000000000000

/* 0x0008: ring 0 code, 32-bit mode */

.quad 0x00cf9a000000ffff

/* 0x0010: ring 0 code, 64-bit mode */

.quad 0x00af9a000000ffff

/* 0x0018: ring 0 data */

.quad 0x00cf92000000ffff

/* 0x0020: real-mode code @

BOOT_TRAMPOLINE */

.long 0x0000ffff

.long 0x00009a00

/* 0x0028: real-mode data @

BOOT_TRAMPOLINE */

.long 0x0000ffff

.long

0x00009200 .pushsection .trampoline_rel, "a"

.long trampoline_gdt +

BOOT_PSEUDORM_CS + 2 - .

.long trampoline_gdt +

BOOT_PSEUDORM_DS + 2 - .

.popsection .globl cpuid_ext_features cpuid_ext_features:

.long 0 .globl

trampoline_xen_phys_start

trampoline_xen_phys_start:

.long 0 .globl trampoline_cpu_started trampoline_cpu_started:

.byte 0 .code32

/*1: 从实模式跳转到这里运行,也就是正式进入保护模式*/

trampoline_protmode_entry:

/* Set up a few descriptors: on entry only CS is guaranteed good. */

mov $BOOT_DS,%eax

mov %eax,%ds

mov %eax,%es /* Set up FPU. */

fninit /* Initialise CR4. */

mov $X86_CR4_PAE,%ecx

mov %ecx,%cr4 /* Load pagetable base register. */

mov $sym_phys(idle_pg_table),%eax

add

bootsym_rel(trampoline_xen_phys_start,4,%eax)

mov %eax,%cr3 /* Set up EFER (Extended Feature Enable Register). */

mov

bootsym_rel(cpuid_ext_features,4,%edi)

test $0x20100800,%edi /*

SYSCALL/SYSRET, No Execute, Long Mode? */

jz .Lskip_efer

movl $MSR_EFER,%ecx

rdmsr

#if CONFIG_PAGING_LEVELS == 4

btsl $_EFER_LME,%eax /* Long Mode

*/

btsl $_EFER_SCE,%eax /*

SYSCALL/SYSRET */

#endif

btl $20,%edi /* No Execute? */

jnc 1f

btsl $_EFER_NX,%eax /* No Execute

*/

1: wrmsr

.Lskip_efer: mov $0x80050033,%eax /*

hi-to-lo: PG,AM,WP,NE,ET,MP,PE */

mov %eax,%cr0

jmp 1f

1:#if defined(__x86_64__) /* Now in compatibility mode. Long-jump into 64-bit mode. */

ljmp

$BOOT_CS64,$bootsym_rel(start64,6) .code64 start64:

/* Jump to high mappings. */

mov high_start(%rip),%rax

jmpq *%raxhigh_start:

.quad __high_start#else

/* !defined(__x86_64__) */ /* Install relocated selectors. */

lgdt gdt_descr/*正式装载初始化后的GDT,这里装入的GDT为汇编期间最终的GDT,在x86_32.s中定义*/

mov $(__HYPERVISOR_DS),%eax

mov %eax,%ds

mov %eax,%es

mov %eax,%fs

mov %eax,%gs

mov %eax,%ss

/*长跳转到x86_32.s的入口__high_start,该变量在head.s中定义,为x86_32.s的入口,x86_32.s

在head.s中以包含的方式调用*/

ljmp

$(__HYPERVISOR_CS),$__high_start#endif .cod

citrix常用命令

XenServer 如何重置XenServer5.6密码? 忘记了Root帐号的密码是一件很烦心的事情,因为我们没法去做某些事情,甚至在没有cache过帐号信息的机器上,就没法管理了。所以我们需要重置(恢复)XenServer5.6的密码,以下介绍的方法支持XenServer5.0以及后续版本。 在恢复前,我们需要进行一些操作; ●如果XenServer在资源池中,最好先迁移VM到其他XenServer服务器,然后 关机;如果只是一台单独的服务器,可以把所有的VM关掉,然后关机; ●需要直接通过控制台操作 重置Root帐号密码: 1.启动XenServer,在看到boot文字提示的时候(也就是XenServer引导前),输入 menu.c32,然后回车;

2.出现启动选项的时候,在5秒内,按TAB选择。(如果默认没有高亮,可以按两下ESC键); 3.然后在现实的启动参数中,在最后的---/boot前面,加上single参数; 4.此时,XenServer将启动到单用户模式,并返回sh3.2#提示符;

5.在该提示符下,输入password命令,然后输入新密码即可。修改成功后将提示: “passwd:all authentication tokens updated successfully”; 6.输入命令重启:shutdown –r –h now; 7.等服务器重启以来,进入XenServer,即可使用新密码登录。 修改时间

date -u --universal 03300813 注意:这个命令修改后的时间为UTC(世界时间),如果需要改为CST(中央时间)需减去时差。 修改dom0的vcpu配置个数 /etc/sysconfig/unplug-vcpus 回到控制台界面 Xsconsole (全是小写)

XenServer 6.0 XE 命令快速参考

Pool appliance-assert-can-be-recovered *appliance-create *appliance-destroy *appliance-list * appliance-param-clear *appliance-param-get *appliance-param-list *appliance-param-set *appliance-recover *appliance-shutdown *appliance-start * Appliance Commands audit-log-get Audit Commands bond-create bond-destroy bond-list bond-param-get bond-param-list bond-set-mode * Bond Commands cd-list CD/DVD Commands console-list console-param-add console-param-clear console-param-get console-param-list console-param-remove console-param-set Console Commands drtask-create *drtask-destroy *drtask-list * drtask-param-get *drtask-param-list * appliance-assert-can-be-recovered *appliance-recover * vm-assert-can-be-recovered *vm-recover * sr-enable-database-replication *sr-disable-database-replication * Disaster Recovery (DR) Commands event-wait Event Commands Virtual GPU (vGPU)vgpu-create *vgpu-destroy *vgpu-list * vgpu-param-add *vgpu-param-clear *vgpu-param-get *vgpu-param-list *vgpu-param-remove *vgpu-param-set *Physical GPU (pGPU)pgpu-list * pgpu-param-add *pgpu-param-clear *pgpu-param-get *pgpu-param-list *pgpu-param-remove *pgpu-param-set * GPU group gpu-group-list * gpu-group-param-add *gpu-group-param-clear *gpu-group-param-get *gpu-group-param-list *gpu-group-param-remove *gpu-group-param-set * GPU Commands * New in XenServer 6.0 (command does not exist in 5.6 SP2) host-all-editions *host-apply-edition host-backup host-bugreport-upload host-call-plugin host-compute-free-memory host-compute-memory-overhead host-cpu-info host-cpu-list host-cpu-param-get host-cpu-param-list host-crashdump-destroy host-crashdump-list host-crashdump-param-get host-crashdump-param-list host-crashdump-upload host-data-source-forget host-data-source-list host-data-source-query host-data-source-record host-disable host-disable-local-storage-caching host-dmesg host-emergency-ha-disable host-emergency-management-reconfigure host-enable host-enable-local-storage-caching host-evacuate host-forget host-get-cpu-features host-get-server-certificate host-get-sm-diagnostics *host-get-system-status host-get-system-status-capabilities host-get-thread-diagnostics *host-get-uncooperative-vms host-get-vms-which-prevent-evacuation host-is-in-emergency-mode host-license-add host-license-view host-list host-logs-download host-management-disable host-management-reconfigure host-param-add host-param-clear host-param-get host-param-list host-param-remove host-param-set host-power-on host-reboot host-reset-cpu-features host-restore host-retrieve-wlb-evacuate-recommendations host-send-debug-keys host-set-cpu-features host-set-hostname-live host-set-power-on-mode host-shutdown host-shutdown-agent host-sm-dp-destroy *host-sync-data host-syslog-reconfigure Host Commands log-get log-get-keys log-reopen log-set-output Log Commands message-create message-destroy message-list message-param-get message-param-list Message Commands network-create network-destroy network-list network-param-add network-param-clear network-param-get network-param-list network-param-remove network-param-set Network Commands patch-apply patch-clean patch-destroy patch-list patch-param-clear patch-param-get patch-param-list patch-pool-apply patch-precheck patch-upload Patch Commands Hosts Storage Networking pbd-create pbd-destroy pbd-list pbd-param-add pbd-param-clear pbd-param-get pbd-param-list pbd-param-remove pbd-param-set pbd-plug pbd-unplug PBD (Physical Block Devices) Commands pif-forget pif-introduce pif-list pif-param-add pif-param-clear pif-param-get pif-param-list pif-param-remove pif-param-set pif-plug pif-reconfigure-ip pif-scan pif-unplug PIF (Phys. Network Interface) Commands pool-certificate-install pool-certificate-list pool-certificate-sync pool-certificate-uninstall pool-crl-install pool-crl-list pool-crl-uninstall pool-deconfigure-wlb pool-designate-new-master pool-disable-external-auth pool-disable-local-storage-caching pool-disable-redo-log pool-dump-database pool-eject pool-emergency-reset-master pool-emergency-transition-to-master pool-enable-external-auth pool-enable-local-storage-caching pool-enable-redo-log pool-ha-compute-hypothetical-max-host-failures-to-tolerate pool-ha-compute-max-host-failures-to-tolerate pool-ha-disable pool-ha-enable pool-initialize-wlb pool-join pool-list pool-param-add pool-param-clear pool-param-get pool-param-list pool-param-remove pool-param-set pool-recover-slaves pool-restore-database pool-retrieve-wlb-configuration pool-retrieve-wlb-diagnostics pool-retrieve-wlb-recommendations pool-retrieve-wlb-report pool-send-test-post pool-send-wlb-configuration pool-sync-database pool-vlan-create Pool Commands sr-create sr-destroy sr-disable-database-replication *sr-enable-database-replication *sr-forget sr-introduce sr-list sr-param-add sr-param-clear sr-param-get sr-param-list sr-param-remove sr-param-set sr-probe sr-scan sr-update SR (Storage Repositories) Commands task-cancel task-list task-param-get task-param-list Task Commands template-export template-list template-param-add template-param-clear template-param-get template-param-list template-param-remove template-param-set template-uninstal Template Commands Virtual Machines update-upload Update Commands user-password-change subject-add subject-list subject-param-clear subject-param-get subject-param-list subject-remove subject-role-add subject-role-remove role-list role-param-get role-param-list session-subject-identifier-list session-subject-identifier-logout session-subject-identifier-logout-all User Commands vbd-create vbd-destroy vbd-eject vbd-insert vbd-list vbd-param-add vbd-param-clear vbd-param-get vbd-param-list vbd-param-remove vbd-param-set vbd-plug vbd-unplug VBD (Virtual Block Devices) Commands vdi-clone vdi-copy vdi-create vdi-destroy vdi-forget vdi-import vdi-introduce vdi-list vdi-param-add vdi-param-clear vdi-param-get vdi-param-list vdi-param-remove vdi-param-set vdi-resize vdi-snapshot vdi-unlock vdi-update VDI (Virtual Disk Images) Commands vif-create vif-destroy vif-list vif-param-add vif-param-clear vif-param-get vif-param-list vif-param-remove vif-param-set vif-plug vif-unplug VIF (Virt. Network Interface) Commands vlan-create vlan-destroy vlan-list vlan-param-get vlan-param-list VLAN Commands vm-assert-can-be-recovered *vm-cd-add vm-cd-eject vm-cd-insert vm-cd-list vm-cd-remove vm-checkpoint vm-clone vm-compute-maximum-memory vm-compute-memory-overhead vm-copy vm-copy-bios-strings vm-crashdump-list vm-data-source-forget vm-data-source-list vm-data-source-query vm-data-source-record vm-destroy vm-disk-add vm-disk-list vm-disk-remove vm-export vm-import vm-install vm-is-bios-customized vm-list vm-memory-dynamic-range-set vm-memory-limits-set vm-memory-shadow-multiplier-set vm-memory-static-range-set vm-memory-target-set vm-migrate vm-param-add vm-param-clear vm-param-get vm-param-list vm-param-remove vm-param-set vm-pause vm-reboot vm-recover * vm-reset-powerstate vm-resume vm-retrieve-wlb-recommendations vm-shutdown vm-snapshot vm-snapshot-with-quiesce vm-start vm-suspend vm-uninstall vm-unpause vm-vcpu-hotplug vm-vif-list VM Commands XenServer 6.0 XE-Command Reference Version: 1.1 ? Bjorn Andersson (www.DiverseTips.se) Corrections and improvements are highly welcome (Send to Twitter: @DiverseTips or DiverseTips@live.se) Newest version of dokument can be found at: https://www.wendangku.net/doc/f611935299.html,/2011/12/poster-xenserver-xe-command-reference.html XenServer?, XenCenter? are registered trademarks of Citrix Systems, Inc. All other trademarks and registered trademarks are property of their respective owners. pool-initialize-wl pool-param-set other-config pool-retrieve-wlb-diagnostics host-retrieve-wlb-evacuate-recommendations vm-retrieve-wlb-recommendations pool-certificate-list pool-certificate-install pool-certificate-sync pool-param-set pool-deconfigure-wlb pool-retrieve-wlb-configuration pool-retrieve-wlb-recommendations pool-retrieve-wlb-report pool-send-wlb-configuration Workload Balancing (WLB) Commands snapshot-clone snapshot-copy snapshot-destroy snapshot-disk-list snapshot-export-to-template snapshot-list snapshot-param-add snapshot-param-clear snapshot-param-get snapshot-param-list snapshot-param-remove snapshot-param-set snapshot-reset-powerstate snapshot-revert snapshot-uninstal Snapshot Commands sm-list sm-param-get sm-param-list Storage Manager (SM) Commands vmpp-create vmpp-destroy vmpp-list vmpp-param-add vmpp-param-clear vmpp-param-get vmpp-param-list vmpp-param-remove vmpp-param-set VM Protection Policy (VMPP) Commands tunnel-create tunnel-destroy tunnel-list tunnel-param-add tunnel-param-clear tunnel-param-get tunnel-param-list tunnel-param-remove tunnel-param-set Tunnel Commands secret-create secret-destroy secret-list secret-param-clear secret-param-get secret-param-list secret-param-set Secrets Commands diagnostic-compact diagnostic-db-log diagnostic-db-stats diagnostic-gc-stats diagnostic-license-status diagnostic-timing-stats diagnostic-vdi-status diagnostic-vm-status Diagnostics Commands Nice-to-have Linux commands (not XE-commands)xe-toolstack-restart Restarts the XAPI-tools df -h Shows the amount of free disk space xsconsole Starts the text based menu console fdisk -l List the disk partitions xentop Lists top Xen processes iostat -d 2 6 Shows Storage trafic stats (6 reports, 2sec a part)top Lists top processes in Dom0 netstat -s Shows networking statistics xen-bugtool --yes Builds a status report when Xapi is down mpstat 2Shows processor statistics in Dom0 (every 2 sec)less /var/log/dmesg Displays Boot Messages from Linux vmstat 2Show virtual memory in Dom0 (every 2 sec)tail /var/log/xensource.log Look at xapi messages as they happen list_domains Lists all VMs that are running (on this server) Some good logfiles (for troubleshooting)/var/log/messages L ogs for the system (the host)/var/log/xensource XenServer only logs (XAPI)/var/log/xha Logs regarding High Availability /var/log/audit K inda what it sounds like... J Audit logs. /etc/xensource-inventory I nfo about the server (version, build, hypvervisor, when the server was installe...)/var/log/dmesg Boot messages from Linux Some good links at https://www.wendangku.net/doc/f611935299.html, https://www.wendangku.net/doc/f611935299.html,/article/CTX130418XenServer 6.0 Release Notes https://www.wendangku.net/doc/f611935299.html,/article/CTX131214Hotfix XS60E001 - For XenServer 6.0 https://www.wendangku.net/doc/f611935299.html,/article/CTX130421XenServer 6.0 Installation Guide https://www.wendangku.net/doc/f611935299.html,/article/CTX131400Hotfix XS60E002 - For XenServer 6.0 https://www.wendangku.net/doc/f611935299.html,/article/CTX130420XenServer 6.0 Administrator's Guide https://www.wendangku.net/doc/f611935299.html,/article/CTX130924 Designing XS 6.0 Network Configurations https://www.wendangku.net/doc/f611935299.html,/article/CTX130422XenServer 6.0 Virtual Machine Installation Guide https://www.wendangku.net/doc/f611935299.html,/article/CTX130423XenServer 6.0 vSwitch Controller User Guide https://www.wendangku.net/doc/f611935299.html,/article/CTX130437XenServer 6.0 Web Self Service Administrator's Guide https://www.wendangku.net/doc/f611935299.html,/article/CTX131047 XenServer 6.0 Configuration Limits

Xen与虚拟化技术

目录 2010-6-21 1.虚拟化发展历史 (2) 1.1硬件虚拟化 (2) 1.2处理器虚拟化 (2) 1.3指令集虚拟化 (2) 2.虚拟化技术的类型 (3) 2.1硬件仿真 (3) 2.2完全虚拟化 (3) 2.3超虚拟化 (3) 2.4操作系统级的虚拟化 (4) 2.5内核虚拟机(Linux KVM) (4) 3.与Linux相关的虚拟化项目 (5) 4.Xen (6) 4.1Xen的体系架构 (6) 4.2Xen Hypervisor,操作系统,应用程序 (8) 4.3Xen的半虚拟化和全虚拟化 (9) 4.4Xen的网络架构 (11) 4.4.1Xen支持三种网络工作模式 (11) 4.4.2Xen Domain U Guests发送数据包处理流程 (12) 4.4.3xen中虚拟网卡与物理网卡之间的关系 (12) 5.Xen的配置和管理 (13) 5.1Xen相关配置文件 (13) 5.2/etc/xen/下的配置文件 (14)

1.虚拟化发展历史 1.1硬件虚拟化 IBM早在20世纪60年代开发System/360?Model67大型机时就开始使用该技术。Model67通过VMM(Virtual Machine Monitor)对所有的硬件接口都进行了虚拟化。在早期计算机中,操作系统被称为supervisor。能够在其他操作系统上运行的操作系统被称为hypervisor(这个术语是在20世纪70年代出现的)。 VMM可以直接在底层硬件上运行,允许运行多个虚拟机(VM)。每个VM都可以运行一个自己私有操作系统的实例——称为CMS(Conversational Monitor System) 1.2处理器虚拟化 虚拟化早期的另外一种用法是P-code(或伪码)机。P-code是一种机器语言,运行于虚拟机而不是实际硬件。它将Pascal程序编译成P-code,然后在一个P-code虚拟机上运行。这就使P-code程序具有了高度的可移植性,而且,只要有可用的P-code虚拟机,P-code 程序就可以运行。Java语言的虚拟机沿用了这种P-code模型。 1.3指令集虚拟化 虚拟化最新的发展称为指令集虚拟化,或者二进制转换。在这种模型中,虚拟指令集被转换成底层硬件的物理指令集,这个过程通常都是动态的。当代码执行时,就会对代码的某个段进行转换。如果出现分支情况,就会导入新代码集并进行转换。这使它与缓存操作非常类似,后者是将指令块从内存移动到本地快速缓存中执行。

Xen基本原理

1Xen概述 1.1 简介 Xen是由剑桥大学计算机实验室开发的一个开源项目。是一个直接运行在计算机硬件之上的用以替代操作系统的软件层,它能够在计算机硬件上并发的运行多个客户操作系统(Guest OS)。目前已经在开源社区中得到了极大的推动。 Xen支持x86、x86-64、安腾( Itanium)、Power PC和ARM多种处理器,因此Xen可以在大量的计算设备上运行,目前Xen支持Linux、NetBSD、FreeBSD、Solaris、Windows和其他常用的操作系统作为客户操作系统在其管理程序上运行。 标准计算机硬件和操作系统 使用Xen进行虚拟化的计算机硬件和操作系统

1.2 Xen虚拟化类型 Xen对虚拟机的虚拟化分为两大类,半虚拟化(Paravirtualization)和完全虚拟化(Hardware Virtual Machine)。 1.2.1 半虚拟化 半虚拟化(Paravirtualization)有些资料称为“超虚拟化”,简称为PV,是Xen主导的虚拟化技术。这种技术允许虚拟机操作系统感知到自己运行在Xen Hypervisor上而不是直接运行在硬件上,同时也可以识别出其他运行在相同环境中的客户虚拟机。 在Xen Hypervisor上运行的半虚拟化的操作系统,为了调用系统管理程序(Xen Hypervisor),要有选择地修改操作系统,然而却不需要修改操作系统上运行的应用程序。由于Xen 需要修改操作系统内核,所以您不能直接让当前的Linux 内核在Xen 系统管理程序中运行,除非它已经移植到了Xen 架构。不过,如果当前系统可以使用新的已经移植到Xen 架构的Linux 内核,那么您就可以不加修改地运行现有的系统。 半虚拟化虚拟机示意图 1.2.2 完全虚拟化 完全虚拟化(Hardware Virtual Machine)又称“硬件虚拟化”,简称HVM,是指运行在虚拟环境上的虚拟机在运行过程中始终感觉自己是直接运行在硬件之上的,并且感知不到在相同硬件环境下运行着其他虚拟机的虚拟技术。 在Xen Hypervisor运行的完全虚拟化虚拟机,所运行的操作系统都是标准的操作系统,即:无需任何修改的操作系统版本。同时也需要提供特殊的硬件设备。 值的注意的是,在Xen上虚拟的Windows虚拟机必须采用完全虚拟化技术。

(完整版)Linux基础命令汇总.

内容: Linux下常用命令 虚拟机Vmware6.0的安装和使用 在Vmware6.0下安装RedHat 9.0 Linux驱动班环境搭建 一、L inux下常用命令 1、Linux命令格式 Linux命令的组成部分:命令字、命令选项、命令参数 2、命令格式举例 3、命令中的其他组成 命令提示符表示命令输入的状态 管理员root用户的提示符“#” [root@localhost ~]# 普通用户提示符“$” [teacher@localhost ~]$ 4、获得命令帮助 (1)help命令 $ help pwd (2)“--help”命令选项 $ touch --help (3)使用man命令阅读手册页 $ man ls (4)使用info命令阅读信息页 $ info ls 5、目录操作命令 (1)列目录 $ls

ls 主要选项参数如下所示: 选项参数含义 -l 一行输出一个文件(单列输出) -a,-all 列出目录中所有文件,包括以“.”开头的文件 实例:$ls -al /home 详细查看/home目录下所有文件及目录(2)显示当前目录名称 $ pwd a)作用 在Linux层次目录结构中,用户可以在被授权的任意目录下利用mkdir命令创建新目录,也可以利用cd命令从一个目录转换到另一个目录。然而,没有提示符来告知用户目前处于哪一个目录中。要想知道当前所处的目录,可以使用pwd命令,该命令显示整个路径名。此命令显示出当前工作目录的绝对路径。 b)实例 [root@localhost ~]#cd /usr/bin;pwd /usr/bin (3)更改当前目录 a)格式 cd [路径] 其中的路径为要改变的工作目录,可为相对路径或绝对路径。 b)使用实例 [root@localhost ~]# cd /home/yft/ [root@localhost yft]# pwd [root@localhost yft]# /home/yft/ 该实例中变更工作目录为“/home/yft/”,在后面的 pwd(显示当前目录)的结果中可以看出。 (4)建立和删除目录 $ mkdir mydir 建立目录mydir $ rmdir mydir 删除目录mydir 6、路径的标识 (1)相对路径是以“.”或“..”开始的目录路径表示形式 cd ./test 进入当前目录的test目录 ls ../bin 进入上一级目录的子目录bin (2)绝对路径是以“/”开始的路径表示形式 ls / cd /home 7、文件操作命令 (1)建立空文件 $ touch tfile (2)文件查找 按文件名进行查找 $ find . -name “file*”在当前目录查找以file开头的所有文件

虚拟机Xen网络配置及原理

虚拟机Xen网络配置 虚拟化是目前一门炙手可热的技术,它给我们带来的好处在各个层次都有体现,作为一个网络管理者来说,搭建和维护服务器更是我们职责所在!目前的服务器配置可以说是相当高了,单核cpu的时代也已经渐渐离我们远去,在我们使用多核cpu以及大内存服务器的的同时,我们是否想过这些服务器的性能是否完全都使用上了?举个例子来说,假设公司有一台IBM System x3650,它配备Xeon 5450cpu(四核心),二级缓存高达12M,最大支持48gb内存,在这样一台如此强劲的服务器上如果只跑一两个应用的话是否浪费了很多的性能呢? 当然,你完全可以把企业中很多的应用都跑在这一台服务器上,这样做虽然是可以的,但是大家都知道,在单个OS上跑的应用越多,出问题的系数也就越高,往往会因为其中某一个应用的问题而导致整个OS崩溃,再或者某个应用支持的系统平台不同,我们需要多个OS来支持,如此以来是否又要购买服务器来达到我们的需求?如果在虚拟化技术没出现之前,我们只能购买更多的服务器来支持更多的应用,无论在维护还是资金上都是一笔不小的投入,不过此刻的我们非常幸运,在这个虚拟化技术流行的时代,那些曾经不可能实现的问题已经不再是问题了,在此我也非常感谢那些在虚拟化技术上投入心血的人们.我们现在完全可以实现在一台物理机上同时跑多个OS! 很多管理员都用过VMware Workstation或者vpc,我们把它们称作虚拟机软件,我们可以在其上安装和物理机不同的OS,在我们需要测试某些程序或者搭建一些环境的时候经常使用到他们,在虚拟机上跑的OS即便是崩溃了也不会影响我们物理机上的任何应用,那我们是否把他们应用在服务器虚拟化层面呢?在这里我不建议这么去做,因为以上提到的两款虚拟机软件只不过是在物理机OS上运行的一个软件而已,此软件运行后会模拟一台真实计算机的环境,只不过是模拟罢了,模拟出来的东西要和物理机上的内核打交道是要经过很多道关卡的,在通过一层一层二进制转换后才能把I/O操作传送到内核中,从而我们会感觉到它们性能是不怎么强的,而服务器在性能上的要求是非常高. 简单介绍一下,在目前的服务器虚拟化方面使用较多的有Xen,hyper-v,VMware esX server等,hyper-v集成在windows server 2k8 64位版中,必须购买windows 2k8以后才可以使用.VMware esX server是一款相当成熟的虚拟机管理器,也是需要购买后才可使用,而Xen则是开源软件,可以直接下载后在linux上编译即可使用,并且最新的Xen3已经支持硬件虚拟化,可以在不修改内核源码的情况下虚拟OS,当然还有其他更多的可以在google上找

xen的故障与维护

XenServer安全重启xapi的方法 2012-11-29 12:58:07| 分类:虚拟化-XenServer|字号订阅 平常我们很常用到重启xapi命令,在这介绍下xapi: XAPI(或者XenAPI)是XenServer中的一组管理接口的统称,是XenServer 管理的核心,由一系列的toolstack组成。 XAPI主要提供XenCenter以及pool中各主机通信的接口。XenCenter通过XAPI 来读取XenServer的配置、管理、License的管理、数据库的维护等等,同时也包括如存储(SR)、虚机、虚拟网卡、HA等等所有的功能控制。而Pool中的所有XenServer的操作请求也是通过XAPI传递给dom0,同时在池中的所有主机中间通信,例如:Pool中数据库(配置数据库,由XenServer维护的一个小型数据库)会通过XAPI在所有的主机之间同步,以便在Master服务器宕机以后,其他机器能够正确而迅速的取代Master,并维持Pool的功能和服务。 简而言之,XAPI就是个和底层通信的中间层、接口层。 以上可以看到,xapi在整个XenServer的重要性。因为xapi控制着服务器和VPS 的操作等等,所以有些时候VPS无法控制时,我们可以通过重启xapi来解决,但这会有危险性,严重的无法重启xapi,无论什么办法都不行,那么只能重装系统,虽然重装系统不会导致数据丢失,但这个是非常麻烦的事,具体的我就不解释了! 但非常情况下,需要重启xapi,也是可以的(例如,重启VPS卡死等等),但必须达到最重要的条件:服务器必须保持在绝对稳定的情况下 怎么才算绝对稳定呢,嘿嘿,有个办法,要么把其他VPS强制关闭,说起来简单,但这样对客户使用影响很大,所以这个我们就不采用,在不关闭其它VPS 又能重启xapi的办法,有的,首先检查服务器的稳定 命令:top(其实通过这个命令查看就够了),此命令详解请见:linux top命令详解

CitrixXenDesktop及XenServer平台运维方案

Part 1 - Citrix XenServer/XenDesktop配置与维护指南

目录 Part 1 - Citrix XenServer/XenDesktop配置与维护指南 (2) 1 1 安装XenCenter管理程序 (5) 2 2 创建资源池 (8) 3 3 安装及管理虚拟机 (12) 3.1 安装新的虚拟机 (12) 3.2 创建模板虚拟机 (18) 3.3 从模板创建新的虚拟机 (18) 4.4 调整现有虚拟机配置(CPU/内存/磁盘容量等) (23) 3.5 在线迁移 (25) 3.6启用HA功能 (26) 3.7查看服务器硬件基本信息 (28) 3.8查看服务器及虚机硬件使用率 (28) 3.9查看虚机性能报告 (29) 3.10创建快照及从快照中恢复系统 (29) 3.11查看日志 (31) 4 4 物理机到虚拟机的转换 (31) 4.1虚拟桌面平台运维 (32) 4.1.1 虚拟化产品安装、配置、部署功能 (32) 4.1.2 虚拟化产品用户管理功能 (32) 4.1.3 虚拟化实例模板管理功能 (35) 4.1.4 虚拟化实例统一部署功能 (39) 4.1.5 虚拟化实例生命周期管理功能 (41) 4.1.6 物理服务器状态监控功能 (42)

实施环境 XenServer1 Xenserver2 服务器型号IBM 3850 M2 HP 580 G5 CPU 4* E7420 4* E7420 内存64GB 64GB 硬盘RAID 5 RAID 5 HBA 主机名XenServer1 XenServer1 IP 10.128.36.84 10.128.36.85 子网255.255.255.0 255.255.255.0 网关10.128.36.254 10.128.36.254 帐户密码Root/ fcjplp2008 Root/ fcjplp2008 存储共用NetApp 2020/ FC/ 400G可用(已用满)

citrix XenApp 6.5 command SDK 参考手册(2)

XenApp 6.5 server Command (PowerShell) SDK开发手册(2) 翻译人:乖乖兔邮箱:ggt2008@https://www.wendangku.net/doc/f611935299.html, 2012/8/17于东营

1 按主题介绍 本书包含了主要XenApp farm主题对象的描述。关于这些主题对象是按照微软PowerShell控制台帮助文档的风格来编写的。XenApp通常是基于任务的,也有些是基于对象的。这些主题对象是主要XenApp farm管理对象。例如,发布应用、sessions、工作组、服务及load evaluators。 每个主题均包含对讨论对象的简短描述,然后对象的管理则是用描述的相关XenApp命令。通常是对象的创建、读取、更改和删除操作(CRUD)。 1.1 Citrix常用命令(Citrix Common Commands) 主题 Citrix常用cmdlets 描述 Citrix Common Commands 是Citrix独立产品的一组cmdlets,可以被独立使用。 注意:CDF跟踪cmdlets必须运行在32位powershell session上,64位暂时不支持。 详细描述: Citrix Common Commands主要包含CDF跟踪cmdlets。这些cmdlets用来配置跟踪模块、执行citrix模块的实时跟踪和打包跟踪数据。这些数据可发送到Citrix来提供分析。这些cmdlets的名字,在名词部分以Ctx开头。Common Commands包含在单元:https://www.wendangku.net/doc/f611935299.html,mands。 下面按字母排序列出一些Citrix common command:

相关文档