Submitted by admin on 2010, December 14, 3:42 PM
参考vim中的介绍:
要开始编辑一个需要加密的新文件,可以用 “-x” 参数来启动 Vim。例如:
vim -x exam.txt
Vim 提示你确定一个密码,用于为文件加密和解密:
Enter encryption key:
现在仔细键入那个密码。你所键入的字符将为星号代替,因此你看不到。为了避免由于
打字错误引起麻烦,Vim 要求你再输入一次密码:
Enter same key again:
现在你可以像平时一样编辑这个文件并把你所有的秘密放进去。当你编完文件要退出 Vim
时,这个文件就被加密存盘了。
当你用 Vim 编辑这个文件时,它就会要求你再输入那同一个密码。你不需要用 “-x”
参数。你也可以用普通的 “:edit” 命令编辑加密的文件。Vim 给这个文件加上一句标记,
据以识别那是经过加密的文件。
如果你试图用另一个程序来阅读这个文件,你将读到一堆乱码。如果你用 Vim 来编辑
这个文件,但输入了错误的密码,你也只能得到乱码。Vim 并不具备检验密码正确性的机
理 (这一点使得破译密码更为困难)。
开 / 关 加 密
要给一个文件撤除加密,设定 ‘key’ 选项为空字符串:
:set key=
你下次把这个文件存盘时,存盘的文件就是未经加密的。
设定 ‘key’ 选项来启用加密是个坏主意。因为密码会被清清楚楚地显示在屏幕上。任
何人都可以偷看到你的密码。
为了避免这样的问题,创造了 “:X” 命令。它会像 “-x” 参数向你索取一个密码:
:X
Enter encryption key: ******
Enter same key again: ******
加 密 的 局 限 性
Vim 采用的加密算法有弱点的。它对于防止那种偷窥者是绰绰有余了,但不足以防止一
个手上有大量时间的密码专家。而且, 你应该知道交换文件是不加密的;所以当你在编辑
文件时,拥有超级用户权限的人能够读取未经加密的文件文本。
不让人们读到你的交换文件的一个方法就是不使用交换文件。如果在命令行上用了 -n
参数,交换文件就不会被创建了 (Vim 把所有的东西都存放在内存里)。例如,要编辑经
过加密的文件 “file.txt”,但不用交换文件,请用下面的命令:
vim -x -n file.txt
如果你已在经编辑这个文件了,那么交换文件 swapfile 可以用下面的命令禁止:
:setlocal noswapfile
由于没了交换文件,文件复原就不可能了。为了避免失去编辑的成果,要比平时更勤快地
存盘你的文件。
文件在内存中以明文形式存在。因此任何具备权限的人都能进入编辑者的内存浏览,从而,
发现这个文件的内容。
如果你使用信息文件 viminfo,别忘了文本寄存器的内容也是明明白白写在其中的。
如果你真的要保证一个文件内容的安全,那么,你必须永远只在一个不联网的可携式
计算机上编辑这个文件,使用优良的加密工具,并且在不用时,把你的计算机锁进一个
大保险箱。
============
#!/bin/bash
# Encrypt file with vim
if (test $# -lt 2) then
echo Usage: decrypt password filename
else
vim -e -s -c “:set key=$1″ -c ‘:wq’ $2
echo “$2 encrypted.”
fi
linux | 评论:0
| Trackbacks:0
| 阅读:1233
Submitted by admin on 2010, December 14, 3:31 PM
测试:
以 I386/RedHat6.2 为测试环境
目录:
★ 命令行参数简介
★ xxd使用中的注意事项
★ xxd使用举例
. 从偏移0x10开始显示,也就是缺省情况下的第一行不显示
. 显示倒数0x30个字节(缺省情况下倒数3行)
. 显示120字节,连续显示,每行20字节
. 显示120字节,每行12字节
. 显示0x6c偏移开始的12个字节
. 创建一个65537字节大小的文件,除了最后一个字节是'A',其余都是0x00
. 使用autoskip选项
. 创建只包含一个'A'字节的文件
. 复制输入文件到输出文件,且给输出文件前部增加100字节的0x00
. 二进制文件打补丁
. Read single characters from a serial line
★ 命令行参数简介
xxd -h
xxd [options] [infile [outfile]]
xxd -r [options] [infile [outfile]]
xxd可以创建给定文件或标准输入的hexdump,也可以还原一个hexdump成以前的二进
制文件。如果没有指定文件或指定文件名为-,则采用标准输入。如果没有指定输出
文件或指定文件名为-,则采用标准输出。
-a
toggle autoskip: A single '*' replaces nul-lines. Default off.
-b
采用2进制显示,而不是默认的16进制
xxd -l 32 -b scz.sh
0000000: 00100011 00100001 00100000 00101111 01100010 01101001 #! /bi
0000006: 01101110 00101111 01110011 01101000 00001010 00100011 n/sh.#
000000c: 00001010 00100011 00100000 11001000 10100001 11010110 .# ...
0000012: 11110111 11001001 11101000 10110001 10111000 10111010 ......
0000018: 11000101 00001010 00100011 00100000 01100011 01100001 ..# ca
000001e: 01110100 00100000 t
-c cols
默认16,-i指定时采用12,-p指定时采用30,-b指定时采用6,最大256
-c8、-c 8、-c 010是等价的,其他选项类似。
xxd -c 8 -l 32 -g 1 scz.sh
0000000: 23 21 20 2f 62 69 6e 2f #! /bin/
0000008: 73 68 0a 23 0a 23 20 c8 sh.#.# .
0000010: a1 d6 f7 c9 e8 b1 b8 ba ........
0000018: c5 0a 23 20 63 61 74 20 ..# cat
-E
不用ASCII显示,而采用EBCDIC编码,不影响16进制显示
xxd -E -l 32 -g 1 scz.sh
0000000: 23 21 20 2f 62 69 6e 2f 73 68 0a 23 0a 23 20 c8 ......>........H
0000010: a1 d6 f7 c9 e8 b1 b8 ba c5 0a 23 20 63 61 74 20 .O7IY...E..../..
-g bytes
比较下面三种显示方式,缺省bytes为2,指定-b时采用1。
xxd -l 32 -g 0 scz.sh
0000000: 2321202f62696e2f73680a230a2320c8 #! /bin/sh.#.# .
0000010: a1d6f7c9e8b1b8bac50a232063617420 ..........# cat
xxd -l 32 -g 1 scz.sh
0000000: 23 21 20 2f 62 69 6e 2f 73 68 0a 23 0a 23 20 c8 #! /bin/sh.#.# .
0000010: a1 d6 f7 c9 e8 b1 b8 ba c5 0a 23 20 63 61 74 20 ..........# cat
xxd -l 32 -g 2 scz.sh
0000000: 2321 202f 6269 6e2f 7368 0a23 0a23 20c8 #! /bin/sh.#.# .
0000010: a1d6 f7c9 e8b1 b8ba c50a 2320 6361 7420 ..........# cat
-h
显示帮助信息
-i
以C语言数组形式显示,如果输入来自stdin,则有所区别
unsigned char scz_sh[] = {
0x23, 0x21, 0x20, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x73, 0x68, 0x0a, 0x23,
0x0a, 0x23, 0x20, 0xc8, 0xa1, 0xd6, 0xf7, 0xc9, 0xe8, 0xb1, 0xb8, 0xba,
0xc5, 0x0a, 0x23, 0x20, 0x63, 0x61, 0x74, 0x20
};
unsigned int scz_sh_len = 32;
注意区分下面两条命令执行效果的不同
xxd -l 12 -i < scz.sh
0x23, 0x21, 0x20, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x73, 0x68, 0x0a, 0x23
xxd -l 12 -i scz.sh
unsigned char scz_sh[] = {
0x23, 0x21, 0x20, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x73, 0x68, 0x0a, 0x23
};
unsigned int scz_sh_len = 12;
-l len
只显示<len>这么多字节
-p
以连续的16进制表示显示,比较下面的不同显示效果
xxd -u -l 32 scz.sh
0000000: 2321 202F 6269 6E2F 7368 0A23 0A23 20C8 #! /bin/sh.#.# .
0000010: A1D6 F7C9 E8B1 B8BA C50A 2320 6361 7420 ..........# cat
xxd -u -l 32 -p scz.sh
2321202F62696E2F73680A230A2320C8A1D6F7C9E8B1B8BAC50A23206361
7420
-r
reverse operation: convert (or patch) hexdump into binary.
If not writing to stdout, xxd writes into its output file without
truncating it. Use the combination -r -p to read plain hexadecimal
dumps without line number information and without a particular
column layout. Additional Whitespace and line-breaks are allowed
anywhere.
这个选项要用的话,一定要提前测试
-seek offset
When used after -r : revert with <offset> added to file positions
found in hexdump.
-s [+][-]seek
start at <seek> bytes abs. (or rel.) infile offset. + indicates
that the seek is relative to the current stdin file position
(meaningless when not reading from stdin). - indicates that the seek
should be that many characters from the end of the input (or if
combined with + : before the current stdin file position).
Without -s option, xxd starts at the current file position.
-u
采用大写16进制字母显示,缺省采用小写16进制字母
-v
显示版本信息
★ xxd使用中的注意事项
xxd -r has some builtin magic while evaluating line number information. If the ouput file
is seekable, then the linenumbers at the start of each hexdump line may be out of order,
lines may be missing, or overlapping. In these cases xxd will lseek(2) to the next position.
If the output file is not seekable, only gaps are allowed, which will be filled by null-
bytes.
xxd -r never generates parse errors. Garbage is silently skipped.
When editing hexdumps, please note that xxd -r skips everything on the input line after
reading enough columns of hexadecimal data (see option -c). This also means, that changes to
the printable ascii (or ebcdic) columns are always ignored. Reverting a plain (or
postscript) style hexdump with xxd -r -p does not depend on the correct number of columns.
Here an thing that looks like a pair of hex-digits is interpreted.
xxd -s +seek may be different from xxd -s seek , as lseek(2) is used to "rewind" input. A
'+' makes a difference if the input source is stdin, and if stdin's file position is not at
the start of the file by the time xxd is started and given its input. The following
examples may help to clarify (or further confuse!)...
Rewind stdin before reading; needed because the `cat' has already read to the end of stdin.
% sh -c 'cat > plain_copy; xxd -s 0 > hex_copy' < file
Hexdump from file position 0x480 (=1024+128) onwards. The `+' sign means "relative to the
current position", thus the `128' adds to the 1k where dd left off.
% sh -c 'dd of=plain_snippet bs=1k count=1; xxd -s +128 > hex_snippet' < file
Hexdump from file position 0x100 ( = 1024-768) on.
% sh -c 'dd of=plain_snippet bs=1k count=1; xxd -s +-768 > hex_snippet' < file
However, this is a rare situation and the use of `+' is rarely needed. the author prefers
to monitor the effect of xxd with strace(1) or truss(1), whenever -s is used.
★ xxd使用举例
.. 从偏移0x10开始显示,也就是缺省情况下的第一行不显示
xxd -s 0x10 scz.sh
.. 显示倒数0x30个字节(缺省情况下倒数3行)
xxd -s -0x30 -g 1 scz.sh
.. 显示120字节,连续显示,每行20字节
xxd -l 120 -p -c 20 scz.sh
.. 显示120字节,每行12字节
xxd -l 120 -c 12 -g 1 scz.sh
.. 显示0x6c偏移开始的12个字节
xxd -l 12 -c 12 -g 1 -s 0x6c scz.sh
.. 创建一个65537字节大小的文件,除了最后一个字节是'A',其余都是0x00
echo 10000: 41 | xxd -r > scz.txt
od -A x -t x1 scz.txt
000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
010000 41
010001
.. 使用autoskip选项
xxd -a scz.txt
0000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................
*
0010000: 41 A
注意,缺省情况下autoskip功能是关闭的,但od看样子缺省就是打开的。
.. 创建只包含一个'A'字节的文件
echo '010000: 41' | xxd -r -s -0x10000 > scz_1
注意对比这些效果
echo '010: 41 42 43 44 45 46' | xxd -r -s 0 > scz_1
echo '010: 41 42 43 44 45 46' | xxd -r -s -0x10 > scz_1
等价于
echo '0: 41 42 43 44 45 46' | xxd -r -s 0 > scz_1
echo '010: 41 42 43 44 45 46' | xxd -r -s -0x12 > scz_1
执行的时候报错,xxd: sorry, cannot seek backwards.
echo '010: 41 42 43 44 45 46' | xxd -r -s 0x10 > scz_1
等价于
echo '020: 41 42 43 44 45 46' | xxd -r -s 0 > scz_1
.. 复制输入文件到输出文件,且给输出文件前部增加100字节的0x00
xxd scz_1 | xxd -r -s 100 > scz_2
od -A x -t x1 scz_2
000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
000060 00 00 00 00 41
000065
.. 二进制文件打补丁
echo '0: 41 42 43 44 45 46' | xxd -r -s 0 > scz_1
od -A x -t x1 scz_1
echo '4: 47 48' | xxd -r - scz_1
od -A x -t x1 scz_1
.. Use xxd as a filter within an editor such as vim(1) to hexdump a region
marked between `a' and `z'.
:'a,'z!xxd
.. Use xxd as a filter within an editor such as vim(1) to recover a
binary hexdump marked between `a' and `z'.
:'a,'z!xxd -r
.. Use xxd as a filter within an editor such as vim(1) to recover one line
of a hexdump. Move the cursor over the line and type:
!!xxd -r
.. Read single characters from a serial line
xxd -c1 < /dev/term/b &
stty < /dev/term/b -echo -opost -isig -icanon min 1
echo -n foo > /dev/term/b
linux | 评论:0
| Trackbacks:0
| 阅读:1381
Submitted by admin on 2010, December 14, 1:24 AM
OpenVZ是基于Linux内核和系统的操作系统级虚拟化技术,OpenVZ允许物理服务器运行多个操作系统,被称虚拟专用服务器(VPS,Virtual Private Server)或虚拟环境(VE, Virtual Environment),更详细的信息可以参照:http://zh.wikipedia.org/zh/OpenVZ;下面来简要的介绍下openvz的安装和虚拟机的部署:
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# wget http://download.openvz.org/openvz.repo
[root@localhost yum.repos.d]# yum -y install ovzkernel.x86_64 ovzkernel-devel.x86_64 vzctl.x86_64 vzquota.x86_64 //安装openvz内核和客户端工具
[root@localhost ~]# grep -v '^#' /etc/grub.conf //确认下次启动时以openvz核启动
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.18-194.3.1.el5.028stab069.5)
root (hd0,0)
kernel /vmlinuz-2.6.18-194.3.1.el5.028stab069.5 ro root=LABEL=/1 rhgb quiet
initrd /initrd-2.6.18-194.3.1.el5.028stab069.5.img
title Red Hat Enterprise Linux Server (2.6.18-164.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-164.el5 ro root=LABEL=/1 rhgb quiet
initrd /initrd-2.6.18-164.el5.img
[root@localhost ~]# uname -r //重启并确定当前内核为openvz内核
2.6.18-194.3.1.el5.028stab069.5
[root@localhost ~]# service vz status //启动vz服务
OpenVZ is running...
[root@localhost ~]# ls /vz/
dump lock private root template
openvz默认的工作目录为/vz,如何修改这个目录还有待研究,dump目录应该是存放虚拟机备份文件的位置,private和root都是存放当前虚拟机系统文件的目录,template是存放虚拟机模板的目录,lock目录何用,也需要继续研究…
openvz支持的guest操作系统版本模板下载地址:
http://download.openvz.org/template/precreated/
[root@localhost ~]# ls /vz/template/cache/*.gz //下载相应的模板并移动的这个目录
/vz/template/cache/centos-5-i386-afull.tar.gz
/vz/template/cache/centos-5-i386-hostinabox576.tar.gz
[root@localhost ~]# vzctl create 101 --ostemplate centos-5-i386-afull //创建虚拟机,101为ID号,从100开始,需要注意的是只能写模板文件的名称去掉后缀(.tar.gz)的部分,否则会报错
Creating container private area (centos-5-i386-afull)
Performing postcreate actions
Container private area was created
[root@localhost ~]# vzctl set 101 --ipadd 192.168.50.249 --save //设定虚拟机的ip参数,并保存
Adding IP address(es): 192.168.50.249
Saved parameters for CT 101
[root@localhost ~]# vzctl start 101 //启动虚拟机101
Starting container ...
Container is mounted
Adding IP address(es): 192.168.50.249
Setting CPU units: 1000
Configure meminfo: 49152
Container start in progress...
[root@localhost ~]# vzctl enter 101 //进入虚拟机
entered into CT 101
[root@localhost /]# ifconfig |grep 'inet addr' //查看虚拟机网卡信息
inet addr:127.0.0.1 Mask:255.0.0.0
inet addr:127.0.0.1 P-t-P:127.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.255
inet addr:192.168.50.249 P-t-P:192.168.50.249 Bcast:192.168.50.249 Mask:255.255.255.255
[root@localhost /]# df -h //查看虚拟机磁盘信息,可以看到,其实所有的虚拟机都是共享/vz目录,因而在生产环境中使用openvz的时候,最好要独立划出/vz分区,并做lvm
Filesystem Size Used Avail Use% Mounted on
/dev/simfs 23G 501M 21G 3% /
none 96M 4.0K 96M 1% /dev
[root@localhost /]# free //同样,共享系统内存和cpu
total used free shared buffers cached
Mem: 196608 15568 181040 0 0 0
-/+ buffers/cache: 15568 181040
Swap: 0 0 0
[root@localhost /]# cat /proc/cpuinfo |less
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Xeon(R) CPU 5110 @ 1.60GHz
stepping : 6
………………………………………………………………………………………
[root@localhost /]# exit //退出虚拟机101
exited from CT 101
[root@localhost ~]# cat /vz/root/101/etc/sysconfig/network-scripts/ifcfg-venet0:1 //也可以直接编辑/vz/root下的文件修改虚拟机相关参数
DEVICE=venet0:1
ONBOOT=yes
IPADDR=192.168.50.249
NETMASK=255.255.255.255
[root@localhost ~]# ls /vz/root/
101 102 103 104 105 106
[root@localhost ~]# ls /vz/private/
101 102 103 104 105 106
总结:
1:openvz是一款独树一帜的虚拟机,同传统的虚拟机,例如xen,kvm,MS hypev-v,VMWARE等相比,安装虚拟机操作系统变的相当的容易,且快速,这些传统的虚拟机安装都需要和真实机安装操作系统的方式一样(这里排除了使用克隆和dd的方式),openvz则使用模板这种方式,从安装上变的高效;
2:默认openvz有一张venet0网卡,虚拟机的网段和物理机的网段通过这个网卡桥接在一起,并没有提供其他的虚拟网卡,这个也有待进一步研究;
3:另外,openvz支持多种方式的管理,例如:hypervm,vtonf等...
4:对硬件没有特殊的要求,kvm需要cpu vt技术的支持,xen装windows也需要vt支持
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:1233
Submitted by admin on 2010, December 14, 1:21 AM
系统环境:ubuntu server 9.04
1、openvz简介
OpenVZ是基于Linux内核和作业系统的操作系统级虚拟化技术。OpenVZ允许物理服务器运行多个操作系统,被称虚拟专用服务器(VPS,Virtual Private Server)或虚拟环境(VE, Virtual Environment)。
与VMware这种虚拟机和Xen这种半虚拟化技术相比,OpenVZ的host OS和guest OS都必需是Linux(虽然在不同的虚拟环境里可以用不同的Linux发行版)。但是,OpenVZ声称这样做有性能上的优势。根据OpenVZ网站的说法,使用OpenVZ与使用独立的服务器相比,性能只会有1-3%的损失。
OpenVZ是SWsoft, Inc.公司开发的专有软件Virtuozzo的基础。OpenVZ的授权为GPLv2。
2、安装前准备
删除apparmor(apparmor是一个安全软件,但是与openvz内核配合不太好)
Java代码
sudo /etc/init.d/apparmor stop
sudo update-rc.d -f apparmor remove
sudo apt-get remove apparmor apparmor-utils
sudo /etc/init.d/apparmor stop
sudo update-rc.d -f apparmor remove
sudo apt-get remove apparmor apparmor-utils
更新源列表sources.list,找到有linux-openvz的源。可以用命令查看是否有linux-openvz:
Java代码
sudo apt-get update
sudo apt-cache search openvz
sudo apt-get update
sudo apt-cache search openvz
3、安装openvz及基本配置
linux-openvz:有openvz的linux内核补丁
vztcl:openvz管理工具
vzquota:openvz限额管理工具
Java代码
sudo apt-get install linux-openvz vzctl vzquota
sudo apt-get install linux-openvz vzctl vzquota
内核参数调整:
Java代码
sudo vi /etc/sysctl.conf
#确认有如下几项
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.ip_forward=1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.eth0.proxy_arp=1
#保存退出
sudo sysctl -p
sudo vi /etc/sysctl.conf
#确认有如下几项
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.ip_forward=1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.eth0.proxy_arp=1
#保存退出
sudo sysctl -p
修改openvz全局配置文件/etc/vz/vz.conf。选项NEIGHBOUR_DEVS定义VE使用的网卡。
Java代码
sudo vi /etc/vz/vz.conf
NEIGHBOUR_DEVS=all
sudo vi /etc/vz/vz.conf
NEIGHBOUR_DEVS=all
修改vps.basic配置文件,默认OpenVz创建VE时会复制/etc/vz/conf/ve-vps.basic.conf-sample的内容为新VE配置文件。修改此文件可以避免每次创建VE时重复修改配置文件。大部分是限额调整,可以根据实际情况调整。这里在末尾加一行打开部分功能。
Java代码
sudo vi /etc/vz/conf/ve-vps.basic.conf-sample
#加入以下
CAPABILITY="CHOWN:on DAC_READ_SEARCH:on SETGID:on SETUID:on NET_BIND_SERVICE:on NET_ADMIN:on SYS_CHROOT:on SYS_NICE:on"
sudo vi /etc/vz/conf/ve-vps.basic.conf-sample
#加入以下
CAPABILITY="CHOWN:on DAC_READ_SEARCH:on SETGID:on SETUID:on NET_BIND_SERVICE:on NET_ADMIN:on SYS_CHROOT:on SYS_NICE:on"
修改引导文件,默认启动进入openvz内核。然后重启,用 uname -a 查看是否进入openvz的内核。
Java代码
sudo vi /boot/grub/menu.lst
#修改default
sudo vi /boot/grub/menu.lst
#修改default
4、openvz基本操作
openvz创建ve十分简单,只需下载官方的模板放到/var/lib/vz/template/cache里,用vzctl工具创建后稍加修改即可。
模板下载地址:http://download.openvz.org/template/precreated/
Java代码
wget http://download.openvz.org/template/precreated/old/ubuntu-8.04-i386-minimal.tar.gz
sudo mv ubuntu-8.04-i386-minimal.tar.gz /var/lib/vz/template/cache/
sudo vzctl create 101 --ostemplate ubuntu-8.04-i386-minimal
wget http://download.openvz.org/template/precreated/old/ubuntu-8.04-i386-minimal.tar.gz
sudo mv ubuntu-8.04-i386-minimal.tar.gz /var/lib/vz/template/cache/
sudo vzctl create 101 --ostemplate ubuntu-8.04-i386-minimal
运行vzctl creat命令后会生成101(VE的ID,简称VEID,必须设置成100以上)VE的配置文件/etc/vz/conf/101.conf。101VE的根目录被默认放到/var/lib/vz/private/101。
5、VE管理与vzctl的使用
常用命令:
Java代码
#启动VE
sudo vzctl start 101
#关闭VE
sudo vzctl stop 101
#进入VE与退出VE
sudo vzctl enter 101
exit
#删除VE
sudo vzctl destroy 101
#设置主机名
sudo vzctl set 101 --hostname test --save
#在VE中执行命令
sudo vzctl exec 101 ps -aux
#启动VE
sudo vzctl start 101
#关闭VE
sudo vzctl stop 101
#进入VE与退出VE
sudo vzctl enter 101
exit
#删除VE
sudo vzctl destroy 101
#设置主机名
sudo vzctl set 101 --hostname test --save
#在VE中执行命令
sudo vzctl exec 101 ps -aux
更多关于vzctl的配置命令可以参考官方的openvvz文档。
6、其他
VE的限制资源使用情况可以在VE里运行命令查看:more /proc/user_beancounters
其中held是正在使用的资源数,maxheld是做大使用资源数。failcnt是超过限制的资源数。可以根据failcnt和maxheld调整VE的资源限制(UBC)。
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:1180
Submitted by admin on 2010, December 14, 12:51 AM
现在多数的主机虚拟系统是基于管理程序的(hypervisor-based),而基于容器的虚拟化(container-based)技术提供了另外一种虚拟化的途径。通过在一台物理机上创建并运行多个独立的容器,所有的容器都运行在预先安装的主操作系统之上,管理员可以在容器中创建虚拟机 (VM)。每个虚拟机的运行都是独立于其他容器中的虚拟机,通过这样的方式保障虚拟机的安全性。开源程序OpenVZ使用的就是这种虚拟机技术。下面我就来给大家讲一讲使用openvz构建linux虚拟化的解决方案。
OpenVZ实现虚拟化的方式完全不同于其他的开源虚拟化产品(如Xen和KVM)。跟其他虚拟化技术相比而言,OpenVZ有一点限制要求: 宿主机(host)和子系统(guest)都必须运行Linux,子系统可以支持不同版本的Linux。基于容器虚拟化技术的商业化产品 Parallels Virtuozzo Containers就是在OpenVZ的原理基础上实现的。
这种实现方式最大的优势就是它的性能。在OpenVZ中,所有通讯都是在Linux系统之间完成的,因此不需要复杂的翻译和转化过程。同时,它的安装方式也从根本上保证了高安全性,因为在不同的容器之间实现了完全的独立性。
安装
OpenVZ可以运行在Red Hat 和 Debian等主流Linux操作系统之上,目前还不支持Ubuntu。如下的安装过程是OpenVZ在Red Hat Linux系统下实现的。在64位操作系统中,安装过程支持通过Yum或RPM安装包的方式来完成。
1. 下载OpenVZ安装包:在开始安装前,下载库源文件(repository file),并把下载的文件放在”/etc/yum.repos.d”目录下。您可以使用如下的wget命令来下载库源文件。
wget http://download.openvz.org/openvz.repo
使用下面这条命令,您可以加载库源文件中的GPG key 校验码:
rpm –import http://download.openvz.org/RPM-GPG-Key-OpenVZ
2. 安装OpenVZ内核。OpneVZ提供了不同的内核方式供选择,选择哪种内核取决于您的硬件条件及您将要创建的容器数量。首先是SMP内核,用于对称式 多处理器环境。支持高达到4GB的RAM及10到20个容器。第二种是”entnosplit” 内核,这种内核支持PAE (Physical Address Extension)技术,可以支持到高达64GB的RAM及10到30个容器。最后一种是Enterprise内核,这种方式同时支持SMP和PAE, 是多容器环境的最佳配置,最多可以同时运行20到30个容器。当在32位操作系统中安装OpenVZ时,选择合适内核形式对您而言是非常重要的。
如果您是在64位操作系统环境中安装,选择SMP内核就可以满足所有的需求。因为在64位的系统中不存在操作系统只能支持4GB缓存的限制(PAE技术本身就是为了解决缓存限制的问题)。如果您使用的64位操作系统,通过如下命令来安装内核:
yum install ovzkernel-smp
现在,OpenVZ内核已经安装并被自动加载到GRUB配置中。重启之后,OpenVZ内核会自动加载运行。
3. 在重启之前,您需要设置几个sysctl参数。请确保在列表1中设计涉及的所有参数设置都已经保存在”/etc/sysctl.conf”文件中
列表1 :. 在 /etc/sysctl.conf文件中需要设置的参数:
net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.all.rp_filter = 1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
4. 确保SELinux选项是关闭的。您可以通过在”/etc/sysconfig/selinux”文件中设置如下的值来关闭该选项:
SELINUX=disabled
5. 安装OpenVZ工具。用如下命令来实现:
yum install vzctl vzquota
6. 编辑”/etc/vz.conf”文件。如果您计划在虚拟机中使用的IP地址和宿主机的IP地址不在一个地址段中,就需要确保该文件包含如下参数:
NEIGHBOUR_DEVS=all
7. 重启系统,OpenVZ内核将激活。
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:1124
Submitted by admin on 2010, December 14, 12:51 AM
缩主机与VPS的IP不同段时
#NEIGHBOUR_DEVS=detect
NEIGHBOUR_DEVS=all
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:1091
Submitted by admin on 2010, December 14, 12:13 AM
下面的这篇翻译自hostingfu.com,Observer进行了翻译,本人进一步加了注释。
一、Openvz和Xen的技术规格分析
1.Xen与Openvz的区别
Xen和Openvz同样是虚拟化主机技术,区别在于Xen是半虚拟化技术,它并不是一个真正的虚拟机,而是相当于自己运行了一个内核的实例,可以自由的加载内核模块,虚拟的内存和IO,稳定而且可预测。Openvz则是操作系统级别的虚拟化技术,是底层操作系统上的一层应用,这意味着易于理解和低权重开销,一般来说也意味着更优的性能。
这里有一个问题,可以看到实际上openvz因为免去了大量的公共开销,理论上来说性能会比xen更好。为什么大家都会认为openvz过分压榨性能呢?我认为是因为openvz配置起来比较灵活,给黑心 openvz服务商改低限制的机会。
比如mediatemple,号称512M内存的dv方案,kmemsize才12M,不了解的人看了512M觉得很哈皮啊,可是使用的时候一般这512M能分到你手里一半就不错了。此消彼长,所以才会有xen 能更好地利用机器性能的错觉。
2.Openvz的内核模型
首先当OpenVZ的主机说”256MB的保证”,它实际上意味着约232MB的”privvmpages”,14M的”kmemsize”和其他杂项资源。当应用程序调用 malloc()分配的内存将被添加到”privvmpages”。
当”privvmpages”超过限制,malloc()将失败并返回一个NULL。当主机服务器内存用光了,然后虚拟环境下的进程超过 “oomguarpages”的将被终止。
OpenVZ的内存管理方法既有问题也有优势。最大的问题之一是内存容量的应用程序使用的内存和应用程序实际上分配到的内存是不同的,不同的应用程序他们的差别可能会很大。以Java为例,它通常分配一大块的内存,但是,它可能只使用一小部分分配的内存。如果privvmpages受限,java会立即停止运行。调整参数可以解决一部分问题,但它处理得绝对没有Xen来得干净利落。事实上,几乎所有使用内存分配的应用程序都会受OpenVZ这个问题的影响。
/proc/meminfo 本身也有问题。虽然OpenVZ的已经为内存进行了虚拟,但是用”free”命令依然会返回主机的内存。这样就会使小内存的openvz的vps无法运行诸如java或者gcc编译这样的程序。
OpenVZ的内存模型的优点是, 它容易理解: 你几乎就只有privvmpages受限。与专用的服务器或Xen的服务器不一样的是,你的磁盘高速缓存和页面缓存并不计入您的总内存使用情况。因此,在一个没有过度销售的openvz主机上,由于拥有较大冗余的公共资源,它实际上可能会比同类规格的Xen的VPS表现更佳。
3.Xen的内存模型
Xen的系统模型更容易解释。256MB的Xen的VPS是就像一个256MB的专用服务器-该内存段是预留作VPS专用,没有其他VPS能够使用这部分内存,这就像一个真正的专用服务器。
此外,当内存不足时,VPS会使用Swap。一般每个VPS带有两倍大小的交换分区,当您的应用需要更多的内存,不常使用的页面从内存中被换出到交换分区,从而腾出使更多的房间。因此,256MB的Xen的VPS系统实际上共有768MB内存(256MB内存+ 512MB的交换空间),请相信我,交换空间是非常有用的,特别是处理突发的需求高峰时。
这么说来,Xen是永远远优于OpenVZ?不然,你的256MB的VPS理论可以使用高达768MB内存,而实际上内核,高速缓存,缓冲,他们都占用内存。这部分系统开销也是可观的。另外,Swap会严重降低性能。
4.稳定性和可预测性
当内存耗尽时,xen和openvz表现大相径庭。xen会把不常用的内存页面换入Swap,这将大大降低性能,当Swap也用尽,那么xen的系统会响应得越来越慢,就像一台真实的服务器一样。
而openvz一旦内存用尽,则会突然死亡:开不出新的程序,只能等待系统资源可用。更有甚者,本来运行的好好的程序也可能因为不断增长而超过限制,然后突然死亡。这就像开车开到70码,然后突然撞墙上了,一般会死得很惨。
毫无疑问这点上我倾向于xen技术,可预测,稳定。
5.结论
如果xen和openvz一样贵,我肯定选xen,因为可预测性,即使openvz打8折,我还是追求稳定。
上面的话总结一下,得出几个结论:
1、XEN比openvz主机对买家更有利,比如分配给你512M内存后,这一部分内存就从服务器上专门划给你了,别人将无法使用,而openvz则是共用内存,比如分配给你512M内存是指最大你能使用512M内存,比如你占用了200M内存,那么就只从物体内存中分配200M给你,所以卖家非常容易在服务器上面超卖!
2、openvz更高效,xen是硬件底层虚拟,更接近真实服务器,而openvz是操作系统虚拟,虚拟服务自身占用内存少,同样的程序执行效率更高!
3、如果购买openvz应看卖家是否会超卖,应选择良好声誉明确申明不会超卖的
4、如果购买xen主机,应同时关注swap大小
5、测试VPS主机性能使用Unixbench(很多人不知道),国外非常流行这个东西!
这是它的一些参数说明:
dhry2reg 内存的register性能
whetstone-double 双精度浮点性能
execl execl call性能
fstime 文件系统性能
fsbuffer 文件系统性能
fsdisk 文件系统性能
pipe 管道(pipe)的性能
context1 管道上下文切换的性能
spawn 创建进程的性能
shell shell并发性能
syscall 系统调用性能
6、VPS用途:服务器、软交换、代理和反向代理、离线BT下载等等
7、通常一般的使用条件下,两者性能应该相差不大。
同时VM类似openvz,共用内存,超卖的情况很是严重,在安全和性能的稳定方面要比xen的差一些,选购的时候这些一定要注意的,要相信在这个世界上,一分价钱一分货的道理在那都是通用的。
VPS推荐:
Openvz:
ramhost.us 介于牛A和牛C之间的一家VPS提供商,价格非常便宜,速度飞快,不过经常卖完了买不到,唯一一家在自家网站上提供服务器状态的厂家
Xen:
Hellohost 国内的一家,口碑不错,同时提供Openvz和Xen的VPS,512M 内存20G 硬盘1000G 月流量2 个 IP 地址OpenVZ 虚拟化只要49,虽然Xen主机只有一款512M 内存5000M 硬盘1000G 月流量1 个 IP 地址Xen主机也只要109,最重要的swap达到1G(你可以理解为有1.5G内存,尽管这么理解是不对的),Xen是不能超卖的,所以绝对的物美价廉!
英文原文:http://hostingfu.com/article/xen-or-openvz
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:1220
Submitted by admin on 2010, December 13, 4:26 PM
首先要说一说OpenVZ的安装
cd /etc/yum.repos.d
wget http://download.openvz.org/openvz.repo
yum install ovzkernel
即可完成安装。重启后,从http://download.lxlabs.com/?software=hypervm选择下载需要的安装脚本(master的地址为http://download.lxlabs.com/download/hypervm/production/hypervm-install-master.sh),在服务器上运行sh ./hypervm-install-master.sh –-virtualization-type=openvz
安装过程是会自动完成的,安装完HyperVM后init 6重启,然后通过浏览器访问http://<server address>:8888就能操作虚拟机了。
最后,推荐个关于OpenVZ安装的页面http://linux.chinaunix.net/docs/2006-11-13/3187.shtml
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:1247