VM性能的快速测试方法

By , December 24, 2012 10:16 pm

前段时间陆续发布了一些对公有云服务性能评测的数据。经常有同行问我怎么样去做这些性能评测。其实这些性能评测都很简单,任何一个具备Linux基础知识的工程师都可以完成。我们通常使用UnixBench来评估虚拟机CPU性能,mbw来评估内存性能,iozone来评估文件IO性能,iperf来评估网络性能,pgbench来评估数据库性能。在这里我将我自己做性能测试的过程整理一下,供各位同行参考。

(0)安装必要的软件

假定VM的操作系统是Ubuntu,可以按照如下步骤安装必要的软件:

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:pitti/postgresql
sudo apt-get update
apt-get install libx11-dev libgl1-mesa-dev libxext-dev perl perl-modules make gcc nfs-common postgresql-9.1 postgresql-contrib-9.1 mbw iperf

cd ~
wget http://www.iozone.org/src/current/iozone3_414.tar
wget http://byte-unixbench.googlecode.com/files/UnixBench5.1.3.tgz
tar xvf iozone3_414.tar
tar zxvf UnixBench5.1.3.tgz

cd ~/iozone3_414/src/current
make

cd ~/UnixBench
make

(1)CPU性能测试

我们使用UnixBench来进行CPU性能测试。UnixBench是一套具有悠久历史的性能测试工具,其测试结果反映的是一台主机的综合性能。从理论上来说UnixBench测试结果与被测试主机的CPU、内存、存储、操作系统都有直接的关系。但是根据我们的观察,对于现代的计算机系统来说,UnixBench测试结果受CPU 处理能力的影响更大一些。因此,在这里我们用UnixBench测试结果来代表虚拟机的vCPU 处理能力。每个UnixBench测试结果包括两个数据,一个是单线程测试结果,另一个是多线程测试结果(虚拟机上有几颗虚拟CPU,就有几个并发的测试线程)。

cd ~/UnixBench

./Run

下面是一个可供参考的测试结果。在这个测试中使用了两台物理机,每台物理机各配置一颗Intel Core i3 540 @ 3.07 GHz (双核四线程),16 GB内存(DDR3 @ 1333 MHz),一块Seagate ST2000DL003-9VT1硬盘(SATA,2TB,5900RPM),运行Ubuntu 10.04 AMD64 Server操作系统,使用的文件系统为ext4,使用的Hypervisor为KVM(qemu-kvm-0.12.3)。我们分别测试了宿主机、磁盘映像以文件格式(RAW格式,没有启用virtio)存储在本地磁盘上的虚拟机、磁盘映像以文件格式(RAW格式,没有启用virtio)存储在NFS上的虚拟机的CPU性能。虚拟机的配置为2 颗vCPU(占用两个物理线程,也就是一个物理核心)和4 GB内存,运行Ubuntu 12.04 AMD64 Server操作系统。在这个测试中没有对操作系统、文件系统、NFS、KVM等等进行任何性能调优。

测试场景 宿主机 本地磁盘上的虚拟机 NFS服务上的虚拟机
单线程 1360 1365 1374
多线程 3250 2529 2536

从如上测试结果可以看出,在没有进行任何性能调优的情况下,在单线程CPU性能方面,宿主机 >> 本地磁盘上的虚拟机 >> NFS服务上的虚拟机;在多线程CPU性能方面,宿主机 >> 本地磁盘上的虚拟机 = NFS服务上的虚拟机。需要注意的是,在多线程测试结果方面,宿主机所占的优势完全是由于宿主机比虚拟机多占用了两个物理线程,也就是一个物理核心。可以认为,在如上所述测试中,物理机和虚拟机的CPU性能基本上是一致的,虚拟化基本上没有导致CPU性能损失。

(2)文件IO性能测试

我们使用iozone来进行文件IO性能测试。iozone性能测试结果表示的是文件IO的吞吐量(KBps),但是通过吞吐量可以估算出IOPS。在如下命令中,我们评估的是以256K为数据块大小对文件进行写、重写、读、重读、随机读、随机写性能测试,在测试过程当中使用/io.tmp作为临时测试文件,该测试文件的大小是4 GB。需要注意的是,命令中所指定的测试文件是带路径的,因此我们可以测试同一虚拟机上不同文件系统的性能。例如我们通过NFS将某一网络共享文件系统挂载到虚拟机的/mnt目录,那么我们可以将该测试文件的路径设定为/mnt/io.tmp。

cd ~/iozone3_414/src/current

./iozone -Mcew -i0 -i1 -i2 -s4g -r256k -f /io.tmp

下面是一个可供参考的测试结果。在这个测试中使用了两台物理机,每台物理机各配置一颗Intel Core i3 540 @ 3.07 GHz (双核四线程),16 GB内存(DDR3 @ 1333 MHz),一块Seagate ST2000DL003-9VT1硬盘(SATA,2TB,5900RPM),运行Ubuntu 10.04 AMD64 Server操作系统,使用的文件系统为ext4,使用的Hypervisor为KVM(qemu-kvm-0.12.3)。我们分别测试了宿主机、NFS、磁盘映像以文件格式(RAW格式,没有启用virtio)存储在本地磁盘上的虚拟机、磁盘映像以文件格式(RAW格式,没有启用virtio)存储在NFS上的虚拟机、以及从虚拟机内部挂载宿主机NFS服务(虚拟网卡启用了virtio)的磁盘IO性能。虚拟机的配置为2 颗vCPU(占用两个物理线程,也就是一个物理核心)和4 GB内存,运行Ubuntu 12.04 AMD64 Server操作系统。在这个测试中没有对操作系统、文件系统、NFS、KVM等等进行任何性能调优。

测试场景 write re-write random write read re-read random read
宿主机 114398 115766 67757 4621231 4897959 4899447
NFS 51482 51253 35867 114914 4332976 476465
本地磁盘上的虚拟机 12447 22257 19664 542379 887648 468469
NFS服务上的虚拟机 7414 4433 4975 97238 581717 209665
虚拟机中的NFS 32650 31772 22076 84982 111296 88263

从如上测试结果可以看出,在如上所述特定测试场景中,在文件IO性能方面,宿主机 > NFS > 虚拟机中的NFS > 本地磁盘上的虚拟机 >NFS服务上的虚拟机。值得注意的是,即使是从虚拟机中挂载NFS服务,其文件IO性能也远远超过本地磁盘上的虚拟机。

[特别说明]需要注意的是,当我们说文件(或者磁盘)IO性能的时候,我们指的通常是应用程序(例如iozone)进行文件读写操作时所看到的IO性能。这个性能通常是与系统相关的,包括了多级缓存(磁盘自身的缓存机制、操作系统的缓存机制)的影响,而不仅仅是磁盘本身。利用iozone进行文件IO性能测试时,测试结果与主机的内存大小、测试数据块的大小、测试文件的大小都有很大的关系。如果要全面地描述一个特定系统(CPU、内存、硬盘)的文件IO性能,往往需要对测试数据块的大小和测试文件的大小进行调整,进行一系列类似的测试并对测试结果进行全面分析。本文所提供的仅仅是一个快速测试方法,所提供的测试参数并没有针对任何特定系统进行优化,仅仅是为了说明iozone这个工具的使用方法。如上所述之测试数据,仅仅在如上所述之测试场景下是有效的,并不足以定性地说明任何虚拟化场景下宿主机和虚拟机的文件IO性能差异。建议读者在掌握了iozone这个工具的使用方法的基础上,对被测试对象进行更加全面的测试。(感谢saphires网友的修改建议。)

(3)内存性能测试

我们使用mbw来测试虚拟机的内存性能。mbw通常用来评估用户层应用程序进行内存拷贝操作所能够达到的带宽(MBps)。

mbw 128

下面是一个可供参考的测试结果。在这个测试中使用了两台物理机,每台物理机各配置一颗Intel Core i3 540 @ 3.07 GHz (双核四线程),16 GB内存(DDR3 @ 1333 MHz),一块Seagate ST2000DL003-9VT1硬盘(SATA,2TB,5900RPM),运行Ubuntu 10.04 AMD64 Server操作系统,使用的文件系统为ext4,使用的Hypervisor为KVM(qemu-kvm-0.12.3),虚拟机运行Ubuntu 12.04 AMD64 Server操作系统。我们分别测试了宿主机、磁盘映像以文件格式(RAW格式,没有启用virtio)存储在本地磁盘上的虚拟机、磁盘映像以文件格式(RAW格式,没有启用virtio)存储在NFS上的虚拟机的内存性能。虚拟机的配置为2 颗vCPU(占用两个物理线程,也就是一个物理核心)和4 GB内存。在这个测试中没有对操作系统、文件系统、NFS、KVM等等进行任何性能调优。

测试场景 宿主机 本地磁盘上的虚拟机 NFS服务上的虚拟机
MEMCPY 3245 3332 3261
DUMP 3165 3317 3255
MEMBLOCK 9605 9091 8739

从如上测试结果可以看出,在没有进行任何性能调优的情况下,宿主机、本地磁盘上的虚拟机、NFS服务上的虚拟机在内存性能方面基本上是一致的,虚拟化基本上没有导致内存性能损失。

(4)网络带宽测试

我们使用iperf来测试虚拟机之间的网络带宽(Mbps)。测试方法是在一台虚拟机上运行iperf服务端,另外一台虚拟机上运行iperf客户端。假设运行服务端的虚拟机的IP地址是192.168.1.1,运行客户端的虚拟机的IP地址是192.168.1.2。

在服务端执行如下命令:

iperf -s

在客户端执行如下命令:

iperf -c 192.168.1.1

测试完成后,在客户端会显示两台虚拟机之间的网络带宽。

下面是一个可供参考的测试结果。在这个测试中使用了两台物理机,每台物理机各配置一颗Intel Core i3 540 @ 3.07 GHz (双核四线程),16 GB内存(DDR3 @ 1333 MHz),一块Seagate ST2000DL003-9VT1硬盘(SATA,2TB,5900RPM),运行Ubuntu 10.04 AMD64 Server操作系统,使用的文件系统为ext4,使用的Hypervisor为KVM(qemu-kvm-0.12.3)。我们分别测试了宿主机之间、宿主机与虚拟机之间、虚拟机与虚拟机之间的内网带宽。虚拟机的配置为2 颗vCPU(占用两个物理线程,也就是一个物理核心)和4 GB内存。虚拟机的配置为2 颗vCPU(占用两个物理线程,也就是一个物理核心)和4 GB内存,运行Ubuntu 12.04 AMD64 Server操作系统。在这个测试中没有对操作系统、文件系统、NFS、KVM等等进行任何性能调优,但是虚拟机的网卡启用了virtio。

测试场景 宿主机之间 宿主机与虚拟机之间 虚拟机与虚拟机之间
内网带宽 930 920 850(虚拟机运行在不同的宿主机上)

从如上测试结果可以看出,宿主机之间的内网带宽接近内网交换机的极限。在启用了virtio的情况下,宿主机与虚拟机之间内网带宽有小幅度的性能损失,基本上不会影响数据传输能力;虚拟机与虚拟机之间的内网带宽有接近15%的损失,对数据传输能力影响也不是很大。

(5)数据库性能测试

postgresql是一个著名的开源数据库系统。在MySQL被Sun 公司收购并进一步被Oracle公司收购之后,越来越多的公司正在从MySQL迁移到postgresql。pgbench是一个针对postgresql的性能测试工具,其测试结果接近于TPC-B。pgbench的优点之一在于它能够轻易地进行多线程测试,从而充分利用多核处理器的处理能力。

在虚拟机上以postgres用户登录:

su -l postgres

将/usr/lib/postgresql/9.1/bin加入到路径PATH当中。

创建测试数据库:

createdb pgbench

初始化测试数据库:

pgbench -i -s 16 pgbench

执行单线程测试:

pgbench -t 2000 -c 16 -U postgres pgbench

执行多线程测试,在下面的命令中将N替换为虚拟机的vCPU数量:

pgbench -t 2000 -c 16 -j N -U postgres pgbench

下面是一个可供参考的测试结果。在这个测试中使用了两台物理机,每台物理机各配置一颗Intel Core i3 540 @ 3.07 GHz (双核四线程),16 GB内存(DDR3 @ 1333 MHz),一块Seagate ST2000DL003-9VT1硬盘(SATA,2TB,5900RPM),运行Ubuntu 10.04 AMD64 Server操作系统,使用的文件系统为ext4,使用的Hypervisor为KVM(qemu-kvm-0.12.3),虚拟机运行Ubuntu 12.04 AMD64 Server操作系统。我们分别测试了宿主机、磁盘映像以文件格式(RAW格式,没有启用virtio)存储在本地磁盘上的虚拟机、磁盘映像以文件格式(RAW格式,没有启用virtio)存储在NFS上的虚拟机的数据库性能。虚拟机的配置为2 颗vCPU(占用两个物理线程,也就是一个物理核心)和4 GB内存,运行Ubuntu 12.04 AMD64 Server操作系统。在这个测试中没有对操作系统、文件系统、NFS、KVM等等进行任何性能调优。

测试场景 宿主机 本地磁盘上的虚拟机 NFS服务上的虚拟机
单线程 126 24 14
多线程 146 31 17

从如上测试结果可以看出,在没有进行任何性能调优的情况下,在数据库性能方面,宿主机 >> 本地磁盘上的虚拟机 >> NFS服务上的虚拟机。

 

Ubuntu 12.04 Server安装配置OpenNebula 3.8

By , December 21, 2012 10:14 pm

这个帖子是为2011年11月所发布的《Ubuntu 11.04 Server安装配置OpenNebula 3.0》一文的升级版。本教程在Ubuntu 12.04 Server的32位版本和64位版本上都进行过测试。在设备匮乏的情况下,本教程也可以在一台笔记本电脑上完成(在这种情况下,业务内网和管理内网合并成一个网络)。文章中嵌入的图片可能看得不是很清楚,可以点击图片看到清晰大图。

[网络拓扑]

存储设备(可以是FC SAN,可以是磁盘阵列,可以是管理节点上的本地硬盘,也可以是基于MooseFS或者Ceph的分布式文件系统)通过直连管理节点,并挂载为管理节点上的一个目录/srv。

管理节点和计算节点各有两个网卡,其中一个网卡连接业务内网,另外一个网卡连接存储内网。在条件允许的情况下,建议业务内网和存储内网都使用万兆网。在不能全面使用万兆网的情况下,建议管理节点(尤其是管理节点上的存储网络)连接到交换机的万兆网口,计算节点连接到交换机的千兆网口。

业务内网的IP段为 192.168.1.*,存储内网的IP段为192.168.2.*。管理节点的IP地址为192.168.1.1和192.168.2.1。

[管理节点的配置]

全新安装的Ubuntu 12.04 Server操作系统,安装的时候同时安装OpenSSH Server和LAMP Server。将eth0的IP配置为192.168.1.1,将eth1的IP配置为192.168.1.2。

安装必要的软件包:

sudo apt-get install libsqlite3-dev libxmlrpc-c3-dev g++ ruby libopenssl-ruby libssl-dev ruby-dev libxml2-dev libmysqlclient-dev libmysql++-dev libsqlite3-ruby libexpat1-dev rake rubygems libxml-parser-ruby1.8 libxslt1-dev genisoimage scons mysql-server nfs-kernel-server rails thin curl

sudo gem install nokogiri rake xmlparser json thin sequel sinatra sinatra-sequel sqlite3 mysql

创建cloud组和oneadmin用户:

sudo mkdir -p /srv/cloud/
sudo groupadd -g 10000 cloud
sudo useradd -u 10000 -g cloud -m oneadmin -d /srv/cloud/one -s /bin/bash
sudo passwd oneadmin
sudo chown -R oneadmin:cloud /srv/cloud/

为oneadmin用户配置无密码登陆:

su -l oneadmin
ssh-keygen
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
echo “StrictHostKeyChecking no” > ~/.ssh/config
exit

配置NFS服务:

sudo pico /etc/exports

增加一行内容:

/srv/cloud  192.168.2.0/24(rw,fsid=0,nohide,sync,no_root_squash,no_subtree_check)

启动NFS服务:

sudo /etc/init.d/nfs-kernel-server start

需要注意的是,如果/srv本来就是由MooseFS或者Ceph等分布式文件系统挂载过来的,就不需要在这里再次export出去了。

创建MySQL数据库:

mysql -u root -p
CREATE USER ‘oneadmin’@’localhost’ IDENTIFIED BY ‘oneadmin’;
CREATE DATABASE opennebula;
GRANT ALL PRIVILEGES ON opennebula.* TO ‘oneadmin’ IDENTIFIED BY ‘oneadmin’;
quit;

从http://downloads.opennebula.org下载最新版本的OpenNebula软件(OpenNebula 3.8.1 tarball),放在oneadmin用户的~目录下:

su -l oneadmin
tar -zxvf opennebula-3.8.1.tar.gz
cd opennebula-3.8.1
scons sqlite=no mysql=yes
./install.sh -u oneadmin -g cloud -d /srv/cloud/one

编辑~/.bash_profile,设置一些环境变量

export ONE_LOCATION=/srv/cloud/one
export ONE_AUTH=$ONE_LOCATION/.one/one_auth
export ONE_XMLRPC=http://localhost:2633/RPC2
export PATH=$ONE_LOCATION/bin:/usr/local/bin:/var/lib/gems/1.8/bin/:$PATH

执行.bash_profile,使得这些环境变量生效:

source ~/.bash_profile

编辑~/.one/one_auth,设置OpenNebula的用户名和密码:

mkdir ~/.one
echo “oneadmin:YOUR_PASSWORD” > ~/.one/one_auth
chmod 640 ~/.one/one_auth

编辑~/etc/oned.conf,设置OpenNebula所使用的数据库参数:

# DB = [ backend = "sqlite" ]

# Sample configuration for MySQL
DB = [ backend = "mysql",
server = "localhost",
port = 0,
user = "oneadmin",
passwd = "oneadmin",
db_name = "opennebula" ]

启动OpenNebula服务:

one start

关闭OpenNebula服务:

one stop

编辑~/etc/sunstone-server.conf,配置管理界面SunStone的相关参数。如果您需要从管理节点以外的节点访问SunStone管理界面,建议将Server Configuration部分的host参数配置为192.168.1.1。保存该配置之后,使用如下命令启动SunStone服务:

sunstone-server start

这时您就可以通过http://192.168.1.1:9869/来访问SunStone管理界面了。您需要使用您在~/.one/one_auth文件中所设置的用户名和密码来登陆SunStone管理界面。如果您需要停止SunStone服务,可以使用如下命令:

sunstone-server stop

编辑~/etc/occi-server.conf,配置用户自助服务界面的相关参数。同样,如果您需要从管理界点以外的节点访问用户自助服务门户,建议将host参数配置为192.168.1.1。保存该配置之后,使用如下命令启动OCCI服务:

occi-server start

这时您就可以通过http://192.168.1.1:4567/ui来访问用户自助服务界面了。如果您需要停止OCCI服务,可以使用如下命令:

occi-server stop

SunStone管理界面和OCCI用户自助服务界面都提供了多语言支持。简体中文的语言包是我制作的,该语言包已经被提交给OpenNebula,并且会被包含在即将发布的OpenNebula 4.0版本中。使用OpenNebula 3.8版本的用户,如果需要简体中文界面的话,可以从我的博客下载这个语言包。

OpenNebula 3.8中文语言包

在下面的介绍中,我们假定您已经依照上面的链接下载并安装了简体中文界面。在~/etc/sunstone-server.conf和~/etc/occi-server.conf中,您需要将lang参数配置为zh_CN,并且重新启动sunstone-server和occi-server两个服务。这时您的SunStone管理界面和OCCI自助服务门户都会被自动切换到简体中文界面。

最后,您需要运行/srv/cloud/one/share目录下的install_novnc.sh脚本,使得SunStone管理界面和OCCI用户自助服务界面支持通过VNC连接到虚拟机控制台。

cd ~/share

./install_novnc.sh

这个部分的安装比较奇特。我的经验是先sudo ./install_novnc.sh,然后清除掉/tmp中的相关内容,然后用oneadmin用户再次./install_novnc.sh,就成功了。

[计算节点的配置]

全新安装的Ubuntu 11.04 Server操作系统,安装的时候同时安装OpenSSH Sever和Virtualization。将eth0的IP配置为192.168.1.2,将eth1的IP配置为192.168.2.2。

首先安装必要的软件包:

(重要说明,如果在计算节点上没有安装ubuntu-vm-builder和ruby这两个软件包,用onehost create命令可以添加该计算节点,但是其状态会显示为err。)

sudo apt-get install qemu-kvm libvirt-bin bridge-utils ubuntu-vm-builder ruby nfs-common vlan

编辑/etc/fstab,配置NFS客户端:(假定OpenNebula管理节点的IP是192.168.1.1)

192.168.2.1:/srv/cloud /srv/cloud nfs defaults 0 0

创建NFS目录并挂载NFS文件系统:

sudo mkdir -p /srv/cloud
sudo mount /srv/cloud

创建cloud组和oneadmin用户:

sudo groupadd -g 10000 cloud
sudo useradd -u 10000 -g cloud -m oneadmin -s /bin/bash
sudo usermod -d /srv/cloud/one oneadmin
sudo passwd oneadmin
sudo chown oneadmin:cloud /srv/cloud/

编辑/etc/libvirt/libvirtd.conf配置libvirt,将操作权限授予给cloud组:

unix_sock_group = “cloud”

编辑/etc/libvirt/qemu.conf配置libvirt,设置VNC:

vnc_listen = “0.0.0.0″
user = “root”
group = “root”
dynamic_ownership = 0

重启libvirt:

sudo service libvirt-bin restart
sudo chown :cloud /var/run/libvirt/libvirt-sock

编辑/etc/network/interface,根据实际的网络状况配置网桥。在这里我们使用eth0连接到业务内网,使用192.168.1.*的内网IP。

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
address 192.168.1.2
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

重启一下网络:

sudo service networking restart

[计算节点的管理]

屏幕快照 2012-12-21 下午3.39.38

登录到SunStone管理界面,在“基础设施-》物理机”页面点击“+新增”按钮添加计算节点。在“名称”对话框中输入计算节点业务内网的IP 192.168.1.2,其他输入框中使用缺省值即可,然后点击“创建”按钮进行确认。如果计算节点已经按照前一节的描述正确配置好的话,新增加的计算节点会出现在物理机列表里。

我们可以通过命令行界面查看计算节点是否添加成功:

onehost list

这时候应该可以看到192.168.1.2出现在计算节点列表里面。如果计算节点配置正确的话,它的状态(STAT)应该显示为“on”。如果计算节点的状态显示为“err”,说明计算节点没有配置好。这时候可以做三个检查:(1)在管理节点上是否可以用无密码模式SSH登录到计算节点,(2)计算节点是否已经安装好ubuntu-vm-builder和ruby,和(3)在计算节点上oneadmin用户是否有权限控制KVM。

[管理磁盘镜像]

屏幕快照 2012-12-21 下午9.59.19

登录到SunStone管理界面,在“应用市场”页面选中“ttylinux-kvm”,并点击右上角的“导入本地基础设施”按钮(中文语言包翻译为“从本地基础设施导入”,属于翻译错误)。无需改动弹出对话框内的任何内容,直接点击“创建”按钮即可。OpenNebula会在后台自动地下载一个预先配置好的ttylinux操作系统映像文件,并注册到OpenNebula数据仓库中。您可以随时在SunStone管理界面的“虚拟资源-》映像”页面中查看现有的磁盘映像及其状态。

在OpenNebula中,磁盘映像有三种类型:OS、CD-ROM、Datablock。OS型磁盘映像等价于AWS中的AMI,也等价与Eucalyptus中的EMI;CD-ROM型磁盘映像可以理解为一个ISO文件;Datablock型磁盘映像等价于AWS和Eucalyptus中的弹性块存储EBS。

ttylinux是一个精简版的Linux,其磁盘映像比较小,应该可以在很短的时间内完成下载。此后您还可以从应用市场中导入CentOS、Ubuntu、Debian等等由官方发布的操作系统磁盘映像。

我们也可以自己制作操作系统磁盘映像。在这里我们推荐您使用VirtualBox这个工具来完成操作系统的安装,安装操作系统时选择磁盘映像格式为VDI。操作系统安装完毕后,可以用下面这个命令将VDI磁盘映像格式转换成RAW磁盘映像格式:

VBoxManage clonehd file_name.vdi file_name.img –format raw

将RAW格式的磁盘映像拷贝到一台安装有QEMU的Linux机器上,用下面这个命令将RAW磁盘映像格式转换成QCOW2磁盘映像格式:

qemu-img convert file_name.img -O qcow2 file_name.qcow2

将转换过的磁盘映像(RAW格式或者QCOW2格式)拷贝到管理节点的某个目录里,例如/srv/cloud/one/images。OpenNebula缺省地认为来自用户硬盘的磁盘映像是不安全的,从而拒绝将其导入到数据仓库中。为了让OpenNebula能够导入用户硬盘上的磁盘映像,我们首先需要修改数据仓库的属性。在管理节点上执行如下命令,可以修改default数据仓库的属性:

onedatastore update 1

在vi编辑窗口中添加一行配置,存盘退出。

SAFE_DIRS=”/srv/cloud/one/images”

登录到SunStone管理界面,在“虚拟资源-》映像”页面中点击“+新增”按钮,在弹出的创建磁盘映像对话框中设定要导入的磁盘映像名称、类型、持久性、驱动程序(raw或者企鹅cow)、磁盘映像文件在管理节点上的路径等等信息,然后点击“创建”按钮。OpenNebula就会在后台将指定的磁盘映像倒入到相应的数据仓库中。您可以随时在SunStone管理界面的“虚拟资源-》映像”页面中查看现有的磁盘映像及其状态。

如果一个磁盘映像是持久性的,那么在虚拟机运行期间所执行的任何磁盘操作,在虚拟机停机之后依然会保存在磁盘映像中。如果一个磁盘映像是临时性的,那么在虚拟机运行期间所执行的任何磁盘操作,在虚拟机停机之后不会保存在磁盘映像中。

[管理网络]

屏幕快照 2012-12-21 下午9.45.46

登录到SunStone管理界面,在“基础设施-》虚拟网络”页面点击“+新增”按钮,即可定义可以分配给虚拟机使用的网络。您需要输入该网络的名称(任意字符串)、虚拟网络模式(缺省值为基于普通网桥的网络,还可以选择802.1Q、ebtables、Open vSwitch、VMWare等等网络类型)、网桥、物理网卡、可用的IP地址范围等等信息,然后点击“创建”按钮即可生成又gi额网络。您可以俗世在SunStong管理界面的“基础设施-》虚拟网络”页面中查看现有的网络定义及其状态。

您也可以通过命令行的方式来定义一个网络。例如您可以使用文本编辑软件创建一个small_network.net文件,该文件的内容定义了一个网络:

NAME = “Small Network”
TYPE = FIXED

BRIDGE = br1
LEASES = [ IP="192.168.1.5"]
LEASES = [ IP="192.168.1.6"]
LEASES = [ IP="192.168.1.7"]
LEASES = [ IP="192.168.1.8"]
LEASES = [ IP="192.168.1.9"]
LEASES = [ IP="192.168.1.10"]
LEASES = [ IP="192.168.1.11"]
LEASES = [ IP="192.168.1.12"]
LEASES = [ IP="192.168.1.13"]
LEASES = [ IP="192.168.1.14"]
LEASES = [ IP="192.168.1.15"]

将如上所定义的网络添加到系统:

onevnet create small_network.net

列出系统上所有的网络(刚刚创建的Small Network 的ID可能是0):

onevnet list

[管理虚拟机模板]

屏幕快照 2012-12-21 下午9.29.06

在OpenNebula中,操作系统磁盘映像相当于安装有操作系统的可启动硬盘。在创建虚拟机之前,还需要对虚拟机的CPU、内存、网络、显示器、输入设备等等进行定义。在OpenNebula中,我们将这些配置描述称为虚拟机模板。

用户可以通过SunStone管理界面方便地定制虚拟机模板。在“虚拟资源-》模板”页面点击“+新增”按钮,在弹出的创建VM模板中设定模板名称、内存大小、CPU数量(VM在宿主机上实际占用的CPU,精确到0.1)、vCPU数量(VM内部显示的CPU数量,为正整数)、处理器构架(i686或者x86_64)、磁盘映像(从列表中选择一个磁盘映像)、驱动程序(RAW或者QCOW2)、选择网络(从列表中选择一个可用网络)、图形界面(VNC、SDN、SPICE)等等,然后点击“创建”按钮即可生成虚拟机模板。您可以随时在SunStone管理界面的“虚拟资源-》模板”页面中查看现有的虚拟机模板及其状态。

如果您在虚拟机模板中使用了持久性的磁盘映像,你只能够基于该模板创建一个正在运行的虚拟机。这是因为一个持久型的磁盘映像只能够同时被应用到一台正在运行的虚拟机上。如果您在虚拟机模板中使用的是临时性的磁盘映像,则可以同时基于该模板创建多个虚拟机。

您也可以通过命令行来定义一个模板,编辑ttylinux.one定义虚拟机参数。这里我们使用了一个ttylinux的磁盘映像,该磁盘映像可以从下面这个链接获得。

wget http://dev.opennebula.org/attachments/download/170/ttylinux.tar.gz
tar zxvf ttylinux.tar.gz

模板文件ttylinux.one的内容如下:

NAME   = ttylinux
CPU    = 0.1
MEMORY = 64

DISK   = [
source   = "/srv/cloud/one/one-templates/ttylinux.img",
target   = "hda",
readonly = "no" ]

NIC    = [ NETWORK_ID = 0]

GRAPHICS = [ TYPE = "VNC"]

FEATURES=[ acpi="no" ]

在系统中创建该虚拟机:

onevm create ttylinux.one

列出系统上所有的虚拟机(刚刚创建的虚拟机的ID可能是0):

onevm list

如上命令列出了系统上所有虚拟机的状态,包括运行这些虚拟机的计算节点。如果需要了解某个虚拟机的详细状况,可以使用onevm show VM_ID命令,例如:

onevm show 0

这个命令会列出ID为0的虚拟机的所有相关信息,包括运行该虚拟机的计算节点,VNC端口号等等。找到这个端口号(假定为5900),就可以通过VNC客户端连接到该虚拟机的控制台,例如:

vncviewer 192.168.1.2:5900

管理虚拟机

当虚拟机模板创建完毕后,您可以在SunStone管理界面的“虚拟资源-》模板”页面中选中一个虚拟机模板,并点击页面上方的“创建实例”按钮创建一个基于该模板的虚拟机。您也可以在“虚拟资源-》虚拟机”页面点击页面上方的“+新增”按钮,并在弹出的对话框中选择一个用于创建虚拟机的模板。

屏幕快照 2012-12-21 下午10.01.53

您可以在“虚拟资源-》虚拟机”页面随时查看您可管理的虚拟机列表及其状态,并通过页面上方的各种按钮进行虚拟机生命周期管理操作(例如暂停运行、继续运行、关机、重启、删除等等)。如果您在安装OpenNebula时设定了VNC支持,并且您所创建的虚拟机指定VNC作为控制台显示设备的话,在虚拟机列表中与该虚拟机相对应的VNC图标会被点亮,您可以点击该图标,直接在浏览器中通过VNC连接到该虚拟机的控制台。

屏幕快照 2012-12-21 下午10.10.33

[其他说明]

虚拟机的在线迁移,需要配置好所有计算节点的/etc/hosts和/etc/hostname,确保在所有在计算节点上都能够根据主机名来寻找到其他计算节点,不然的话在线迁移会失败。此外,所有节点(包括控制节点和计算节点)之间需要配置无密码SSH登录。

数据库的用户名和密码尽可能不要包含:和@字符,否则会出现数据库连接错误。

我会在后续的教程中陆续介绍OpenNebula的更多配置和使用方法。

迦叶尊者

By , December 16, 2012 3:18 pm

IMG_0061

 

周末滞留在上海,抽空去了一下上海博物馆。因为时间很紧,只能匆匆地扫了扫一楼的古代雕塑馆。总的感觉是馆藏题材非常有限,基本上以北魏到南宋之间的佛教雕塑为主。所以这个“古代雕塑馆”实在是徒有虚名,不若叫“古代佛教雕塑馆”来得实在。即使是在佛教雕塑这个领域里,上海博物馆也缺少可圈可点的展品,总体水平不如西安小雁塔内西安博物馆的佛教造像展。

唯一的例外是这件唐朝的木雕迦叶头像。历尽千年沧桑的高僧,脸容依然慈祥,眼神依然在笑,第一眼看见就很喜欢。

《欧里庇得斯悲剧六种》

By , December 9, 2012 3:48 pm

最近出差比较多,发现在飞机上坐着是个读书的好时机。狭小的空间,一丝一毫都动弹不得。两旁都是陌生人,不是闭眼养神就是一脸漠然。好不容易挤到座位上,强烈的孤独和寂寞便如期而至,除了读书就只好思考人生了。

最近书包里带的是罗念生先生翻译的《欧里庇得斯悲剧六种》。上个星期天下午,海口到北京,读完了《阿尔刻提斯》和《美狄亚》。星期一下午,北京到海口,读完了《特洛亚妇女》和《伊菲格涅亚在陶洛人里》。星期六上午,海口到天津,读完了《酒神的伴侣》和《安德洛玛克(节译)》。星期天上午,天津到海口,又顺便把全书温习了一遍。

《阿尔刻提斯》

菲赖城(Pherai)的国王阿德墨托斯(Admetos)得了阿波罗(Apollon)的帮助,得到一次不死的机会,条件是有一位亲人代替他到下界去。他问过所有的亲人,包括他的父亲和母亲,但是除了他的妻子阿尔刻提斯(Alcestis)之外,没有人愿意替他去死。阿尔刻提斯死前与阿德墨托斯依依惜别,托付儿女,最终被死神带到冥界。阿德墨托斯的父亲菲瑞斯(Pheres)向儿媳妇的遗体献上礼物,却被儿子斥责贪生怕死,引起了父亲是否应该替儿子去死的辩论。宙斯(Zeus)的儿子赫剌克勒斯(Herakles)在这不恰当的时刻来到阿德墨托斯的宫殿作客,阿德墨托斯在悲痛之中仍不愿怠慢远道而来的客人,对赫剌克勒斯隐瞒了妻子死亡的消息,并吩咐随从在客房设宴宽带赫剌克勒斯。赫剌克勒斯最终从闷闷不乐的随从那里得知事情的真相,他被阿德墨托斯的热情好客所感动,埋伏在阿尔刻提斯的坟前与前来吸饮血浆的死神进行搏斗,最终从死神的手里将阿尔刻提斯解救了回来。

我们不能说阿德墨托斯不爱他的妻子,但是他爱自己显然远胜于爱自己的妻子。面对生命的诱惑,他可以一边说“神啊,快引了我,引了我一同下去吧”,一边任凭妻子的身体在他的怀里慢慢失去温度。菲瑞斯无疑是深爱他的儿子的,但是面对儿子的斥责,他也可以坦然说出“你自己高兴看见阳光,你以为当父亲的就不高兴看见阳光吗”的朴素道理。在这样的前提下,阿尔刻提斯其实已经是非死不可了。妇女的社会地位以及妻子的责任使她顺从地放弃了自己的生命,从而保全自己的名节并且正当地请求让丈夫不要为儿女讨一个后娘。如果阿尔刻提斯不愿为丈夫去死的话,恐怕还是难逃一死的命运,还要落得个身败名裂的下场。在本剧的结尾部分,阿尔刻提斯被赫剌克勒斯从死神的手中夺回。获得重生的妻子是否会与丈夫恩爱如初我们不得而知,但是阿德墨托斯与亲生父母俨然已经恩义两绝了。

人生最大的悲剧,莫过于命还在,但是爱已经不在了。

《美狄亚》

科尔喀斯(Kolkhis)的公主美狄亚(Medeia)爱上了伊俄尔科斯(Iolkos)的王子伊阿宋(Iason)。她帮助伊阿宋夺走了科尔喀斯的金羊毛,并与伊阿宋乘坐阿耳戈(Argo)船逃走,在逃跑的过程中竟杀死了自己的兄弟阿普绪耳托斯(Apsyrtos)。他们两个逃到科任托斯(Korinthos)后,忘恩负义的丈夫要娶科任托斯的公主格劳刻(Glauke)为妻。科任托斯的国王克瑞翁(Kreon)知道美狄亚有很重的复仇心理,为了保护自己的女儿决定将美狄亚逐出科任托斯。美狄亚为了丈夫背叛了自己的祖国,又被逐权夺利的丈夫所背叛,再度面临流亡的命运。美狄亚在极度的悲愤中用巫术毒死了国王克瑞翁和公主格劳刻,更亲手杀死了自己与伊阿宋所生的两个儿子,最后乘坐龙车逃离了科任托斯。

美狄亚向科任托斯的国王和公主复仇,是因为他们夺走了自己的丈夫。她杀死自己的儿子们,剧中的解释是“我已经下了决心,马上就去做这件事情:杀掉我的孩子再逃出这地方。我决不耽误时机,决不抛撇我的孩儿,让他们死在更残忍的手里。”但是,既然美狄亚自己可以乘坐龙车逃离,她又何尝不能将孩子们一起带走呢?用杀死亲生孩子的办法向背叛自己的丈夫报仇,美狄亚不是第一个,也不是最后一个。美狄亚并非不爱自己的儿子们,但是她对丈夫的仇恨超过了她对孩子的亲情。

获得重生的阿尔刻提斯即使不再爱自己的丈夫,但是她还有一双可爱的儿女。尽管美狄亚可以乘坐龙车逃离科任托斯,但是她的两个儿子再也不能复活了。从这个意义上来说,美狄亚的悲剧,更甚于阿尔刻提斯的悲剧。我们是不是可以这样说:阿尔刻提斯的顺从,使得她可以保留一份亲情;而美狄亚的反抗,使得她彻底失去所有亲情?

《特洛亚妇女》

忒提斯(Thetis)与佩琉斯(Peleus)邀请众神参加他们的婚宴,独独忘了邀请纷争女神厄里斯(Eris)。厄里斯便扔过来一个金苹果,说是要送给最美丽的女神。雅典娜(Athena)、赫拉(Hera)和阿佛洛狄忒(Aphrodite)都争着要这金苹果。众神不敢决定三个女神的胜负,把他们一起引到特洛亚(Troia)郊外的伊得(Ide)山上,却让特洛亚王子帕里斯(Paris)来评判。这三位女神都想要收买这位裁判,雅典娜答应给他武功,赫拉答应给他小亚细亚的统治权,阿佛洛狄忒却许诺给他一个最美丽的女人。王子将金苹果判给了阿佛洛狄忒,却使得特洛亚与雅典娜和赫拉结下了仇恨。阿佛洛狄忒赢得了比赛,就让帕里斯到斯巴达去作客,并帮助帕里斯拐走了国王墨涅拉俄斯(Menelaos)的妻子海伦(Helene)。希腊人恼羞成怒,就来攻打特洛亚,没有得到金苹果的雅典娜和赫拉都站在希腊人这边,得到了金苹果的阿佛洛狄忒站在了特洛亚人这边。残酷的战争持续了整整十年,希腊人凭了雅典娜的诡计假装撤离,但是在特洛亚城外留下了一只里面藏着兵士的巨大木马。特洛亚人将这木马拖回城里庆祝胜利,却给城邦带来了致命的灾难。特洛亚的男人已经被悉数杀死,黄金和甲帐都被运入希腊人的船仓,只有被俘虏的妇女们还在等待希腊人宣判她们将被分配给谁做奴隶。

特洛亚的王后赫卡帕(Hekabe)在战争中失去了她的丈夫普里阿摩斯(Priamos)还有儿子赫克托耳(Hektor)与帕里斯(Paris)。赫卡帕的女儿波吕克塞娜(Polyxena)被希腊人所俘虏,但是在战争中死去的阿喀琉斯(Akhilleus)生前爱过波吕克塞娜,托了个梦给争抢战利品的希腊人说他要娶这女人为妻,他的儿子皮洛斯(Pyrrhus)便把波吕克塞娜杀来献祭。赫卡帕的另外一个女儿卡珊德拉(Kassandra)被阿伽门农看中,被阿伽门农带到密刻奈(Mykenai)去做新娘。柔弱的卡珊德拉却庆祝自己的命运,她满怀复仇的心,说:“那闻名的阿伽门农娶了我,便会比娶了海伦还要懊恼!我要去把他杀了,我要去破坏他的家庭,替我的父兄报仇雪恨。”她又说:“母亲,请不要再为这城邦而悲痛,为我的婚姻而悲痛,我自会借这婚事,把你我的仇人害死。”卡珊德拉和阿伽门农到了斯巴达,和这国王一起被国王的原配克吕泰涅斯特拉(Klytaimnestra)杀死了。国王的儿子俄瑞斯特斯(Orestes)因为母亲杀死了父亲,又杀死了母亲为父报仇。

赫卡帕与海伦之间的辩论,为这部悲剧创造了一个小高潮。海伦认为三位女神之间的比赛是悲剧的根源,她之所以和帕里斯一起私奔,不过是三个女神之间比赛的不可逆转的结果。帕里斯到斯巴达来作客时,丈夫墨涅拉俄斯竟然将英俊的帕里斯留在家里自己到克瑞忒(Crete)岛去,都是因为女神阿佛洛狄忒在从中捣鬼,不然的话她根本就不会爱上帕里斯。赫卡帕则认为是自己的儿子生得太漂亮了,海伦一看见他心里便产生了一个爱神(人心里得一切妄想都成了“阿佛洛狄忒”),又嫌弃斯巴达得穷苦难,羡慕特洛亚得奢华富饶,这才主动勾搭上自家的儿子。这倾国倾城的爱情,到底是命中注定,还是颠倒梦想呢?

这悲剧中最催人泪下的部分,是希腊人担心赫克托耳的儿子阿斯堤阿那克斯(Astyanax)会造成后患,残忍地将他从城墙上扔下来摔死了。孩子的母亲安德洛玛刻(Andromakhe)在希腊人要抱走儿子的时候哭喊道:“那不吉的新床,不详的婚礼阿,你曾把我带到赫克托耳家里,不是要我生一个儿子来让希腊人屠杀,而是要我为这丰饶的亚细亚生一个国王。儿呀,你在哭吗?你也明白你的灾难吗?为什么用手拖这我,为什么抓住我的袍子,像一个雏儿躲到我的翅膀底下?赫克托耳再也不会从地下起来,举着那闻名的戈矛来保护你。你族里的亲人和特洛亚的力量再也救不了你;你会从那城墙高出倒坠下来,那凄惨的跌落会打断你的呼吸,可没有人怜恤你!啊,你曾是我怀中的小宝贝,母亲最疼爱的婴儿,你的肌肤曾放出一阵阵的乳香,只可惜我白白地包裹你,白白地哺养你,白受苦,白费力。这时候,快拥抱我,拥抱你的母亲,用你的手楼主我的脖子,同我亲吻,这是最后一次了。”

读过《特洛亚妇女》的人大都称颂赫卡帕的名言 - 当一个有福的人还没有死的时候,切不要说他是幸福的。我却觉得这样的句子虽然包含哲理,但是很难激起读者的共鸣。而一位母亲如此歇斯底里的呼号,不管在什么情况下读到,都会令人肝肠寸断,青衫遍湿。

罗念生先生在这个悲剧的译者序里面还提到他在一个古庙里听高僧解说梵经,高僧向他念出关于玄奘译经的一段记载。记载说:“师返慈恩,专务翻译,无弃寸阴:每日自立程课,若昼日有事不充,必兼夜以续之,过乙之后,方乃停笔。摄经已,复礼佛行道,至三更暂眠,五更复起,读颂梵本,朱点次第,拟明日所翻。”读到这里,不由得翻出自己尚未翻译完成的爱尔兰神话《众神与战士》来看,发现博客里贴出来的最后一段是去年二月份翻的,真是惭愧至死。

《伊菲格涅亚在陶洛人里》

在特洛亚战争中,阿耳戈斯(Argos)国王阿伽门农(Agamemnon)出兵帮助自己的弟弟斯巴达国王墨涅拉俄斯(Menelaos)报仇雪恨。他在奥利斯(Aulis)召集了一千只战船远征特洛亚,但是在出师的时候狂风大作,船只受阻。国王举行燔祭,先知卡尔卡斯(Kalkhas)说国王曾经向光明女神阿耳忒弥斯(Artemis)许愿要献上一年中最丰美的产物,而国王的妻子克吕泰涅斯特拉(Klytaimnestra)在国王许愿的那年生了个女儿伊菲革涅亚(Iphigeneia),因此国王就得拿自己的女儿来献祭。国王欺骗王后说要将伊菲革涅亚出嫁给阿喀琉斯,从母亲那里把女儿接了去,实际上却抬到火葬堆上要杀来献祭。阿耳忒弥斯用一只母鹿换走了伊菲革涅亚,放到蛮夷人陶洛人的地盘陶里刻,让她做自己神庙里的祭司,但是所有的人都以为伊菲革涅亚是真的被献杀给女神了。十年的战争结束后,国王阿伽门农回到了故乡,王后这才得知自己的女儿早在十年以前就已经被丈夫献杀,一怒之下杀死了丈夫。国王的儿子俄瑞斯特斯(Orestes)因为母亲杀死了父亲,又杀死了母亲为父报仇。报仇女神厄里倪厄斯(Erinyes)们由于俄瑞斯特斯犯下了杀母的罪行,又来追杀俄瑞斯特斯,但是最后神示让俄瑞斯特斯前来陶里刻的阿耳忒弥斯神庙盗窃庙里的神像并送到雅典,只等他做了这件事,就能解脱痛苦。

俄瑞斯特斯和她的朋友皮拉得斯(Pylades)经过种种险阻来到了陶里刻。陶里刻有一个法律,只要有任何希腊人到这岛上来,都要抓来给女神阿耳忒弥斯献祭。如今俄瑞斯特斯和皮拉得斯都已经被土人们捉到,五花大绑地送到了伊菲革涅亚担任祭司的阿耳忒弥斯神庙。伊菲革涅亚当然不知道即将被献杀的希腊人中有自己的亲弟弟,俄瑞斯特斯也不知道即将要将自己献杀的祭司就是自己的亲姐姐。

女祭司向被献杀者询问祖国的消息,却意外地发现他们对自己的家族非常了解。思乡心切的女祭司许诺解救两位献杀者当中的一位,条件是他要帮她送一封信给自己在家乡的亲人。两位男子汉互相推让活命的机会,最终俄瑞斯特斯说服皮拉得斯回去送信,自己则留在陶里刻充当祭品。为了慎重起见,伊菲革涅亚让皮拉得斯牢牢记住信板上的内容,结果皮拉得斯发现自己什么都不用做就完成了任务。女祭司当然会怀疑被献杀者的话语,但是俄瑞斯特斯回忆起伊菲革涅亚曾经将金羊毛的故事织到精致的布上,说起伊菲革涅亚从母亲那里得到洗澡水带到奥利斯,又说起藏在伊菲革涅亚闺房里那只祖传的古矛。姐弟两个绝地相逢,那种欢乐的悲哀,真是难以言表。

接下来的故事就顺理成章了。伊菲革涅亚告诉国王说两位献杀者犯了杀母的罪行,不宜就这样献给女神,得带到远处得港湾那里用海水彻底洗干净才能够献祭。至于那块俄瑞斯特斯梦寐以求得神像,因为曾经被献杀者摸过,也得拿到海里去洗一洗才行。除了祭司之外的任何人都不能看这两个不洁的人和神像,因此物陶里刻岛上得所有居民都得躲在屋里,等到被献杀者和神像都被洗干净之后才能够出来。就这样女祭司带着弟弟、老乡和神像到了港口,登上弟弟带来的大船出了港口。

但是这时候诗人展示了讲故事者的才华。借用向国王报信的信使的话来说,就是“可怕的风暴突然吹来,吹着船往后退。他们坚持着向波浪反冲,但是退潮又把船冲回陆地……那船越来越靠近石头了,我们有的人涉水入海,有的人把绳圈儿捆好……那海的主宰,威严的波塞东(Poseidon)……好像要把阿伽门农的儿子交到你和你市民手里,还要把他姐姐也交还,因为她欺骗了女神,忘记了在奥利斯的杀献。”这个时候女神雅典娜自空中出现了,她说:“请听我雅典娜的话。快停止追捕……神示预先派定俄瑞斯特斯到这里来,好让他逃避报仇神的愤怒,把他姐姐送回阿耳戈斯,把那神圣的像带到我的土地上……波塞东看在我的面上,已使海面平静下来,让他坐船走了。”

阿伽门农一家的自相残杀,似乎是源自海伦的私奔,又最终可以将责任推卸到三位女神的比赛那里。但是阿伽门农难道不是为了建功立业才率军远征特洛亚的吗?弟媳妇的私奔固然是败坏了家族的声誉,为此又献杀自己的亲生女儿,难道不是更加可悲吗?如果不是阿耳忒弥斯都看不下去了,恐怕就不会用一只母鹿将伊菲革涅亚解救了吧。还好诗人最终没有让伊菲革涅亚与俄瑞斯特斯姊弟相残,这样的结尾读起来总算是让人心情愉快了些。

《酒神的伴侣》

宙斯曾爱上忒拜(Thaibes)城的建立者卡得摩斯(Kadmus)的女儿塞墨勒(Semele)。宙斯的妻子赫拉出于妒忌化妆成一个女人,怂恿塞墨勒请求宙斯以带着光彩的形象在她的面前出现。由于宙斯曾经起誓要答应塞墨勒的任何要求,只好以雷神的形象出现在塞墨勒的面前。塞墨勒遭到了雷击,死前生下一个尚未足月的婴儿。宙斯把婴儿放进他的髀肉,后来由髀肉里生下狄俄倪索斯(Dionysus),把他交给倪萨(Nysa)的山林女神抚养。狄俄倪索斯又名巴克科斯(Bacchus),是原始的草木动物之神,又是酒神,也是欢乐之神。

狄俄倪索斯长大之后,到处宣扬他的教仪,让人们腰缠鹿皮,手持神仗,狂欢作乐。但是狄俄倪索斯在忒拜城的亲戚们并不承认他是神的儿子,以为塞墨勒同凡人结了私情,反把失身的罪过推到宙斯的头上,因此才遭到宙斯的报复。狄俄倪索斯为自己的神格不被故乡所承认而深感愤怒。他使母亲的姊妹们神经错乱,纵情狂欢。他又设计将忒拜城的王彭透斯(Pentheus)引入圈套,被彭透斯自己的母亲阿高戈(Agaue)在迷乱中猎杀。

这一出悲剧,是诗人对神权公然的质疑与控诉。仅仅是由于亲戚们不相信自己是神的儿子,狄俄倪索斯背叛并毁灭了母亲的家族。用现在的话来讲,狄俄倪索斯的“神二代”属性,象征了神权的凶恶、残暴、荒淫与堕落。在诗人所处的时代,这样的表述无疑是大胆而危险的。

我不喜欢这一出悲剧,因为看了之后让人觉得太绝望了。

《安德洛玛克(节译)》

从介绍来看,《安德洛玛克》是诗人所著的一部独立的作品。在《欧里庇得斯悲剧六种》中所收录的,仅仅是其中的一些小结。从翻译的内容来看,和《特洛亚妇女》一剧中与安德洛玛克相关的部分基本上是相同的。

 

OpenNebula 3.8中文语言包

By , December 6, 2012 9:48 pm

最近花时间制作了OpenNebula 3.8的中文语言包,已经向OpenNebula提交了相关的布丁。在自己的博客里也留一个备份吧。

我所制作的是简体中文(zh_CN)语言包,参考的模板是OpenNebula 3.8里面自带的繁体中文(zh_TW)语言包。有需要的同学可以下载Chinese_zh_CN这个文件,并参考如下安装方法。

1、解压缩下载的文件,里面有两个文件夹。一个是SunStone,另外一个是OCCI。

2、为SunStone进行汉化,需要将SunStone目录下的zh_CN目录拷贝到$ONE_LOCATION/lib/sunstone/public/locale目录下,并将SunStone目录下的config_tab.js文件拷贝到$ONE_LOCATION/lib/sunstone/public/js/plugins目录下。

3、为OCCI自助服务门户进行汉化,需要将OCCI目录下的zh_CN目录拷贝到$ONE_LOCATION/lib/ruby/cloud/occi/ui/public/locale目录下,并将OCCI目录下的configurations.js文件拷贝到$ONE_LOCATION/lib/ruby/cloud/occi/ui/public/js/plugins目录下。

进行上述修改后,需要刷新一下SunStone页面或者OCCI自助服务门户页面方能生效。

Panorama Theme by Themocracy