<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>Rest Valley &#187; VirtualBox</title> <atom:link href="http://lihdd.net/tag/virtualbox/feed/" rel="self" type="application/rss+xml" /><link>http://lihdd.net</link> <description>The scratchpad of quark</description> <lastBuildDate>Sat, 09 Oct 2010 13:56:19 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=</generator> <item><title>Linux下VirtualBox中运行真实磁盘上的操作系统</title><link>http://lihdd.net/host-os-in-virtualbox/</link> <comments>http://lihdd.net/host-os-in-virtualbox/#comments</comments> <pubDate>Sun, 01 Nov 2009 10:55:43 +0000</pubDate> <dc:creator>quark</dc:creator> <category><![CDATA[Config]]></category> <category><![CDATA[VirtualBox]]></category><guid
isPermaLink="false">http://lihdd.net/?p=264</guid> <description><![CDATA[虽然各种虚拟机都会说把真实磁盘的分直接给虚拟机用会如何如何有风险，但是好处也是显而易见的：可以选择是直接运行或是在Linux下的虚拟机运行某个操作系统，同时节约了磁盘空间和同步时间。 我这样做已经有一段时间了，除了Windows会发现硬件改变要求重新激活之外，还没有发现问题 :-) 但是周围的同学似乎觉得这样做比较麻烦，很有风险，或者无从下手。其实比较简单也没有这么可怕啦，下面普及一下： 首先要创建一个特殊的虚拟磁盘文件，指向真实磁盘的某个分区，这可以参考VirtualBox用户手册中的9.10章节。简单来说： 注：由于这些命令需要/dev/sda的读写权限，以后虚拟机在使用这些vmdk文件的时候，也需要这样的权限，建议把当前用户加在disk组里解决问题：gpasswd disk -a `whoami` # 把整个sda映射出去 VBoxManage internalcommands createrawvmdk -filename /path/to/sda.vmdk -rawdisk /dev/sda # 或者，处于安全考虑，只允许sda1和sda5在虚拟机里用到，虚拟机里仍然可以知道有其他分区存在，但是不能读写 VBoxManage internalcommands createrawvmdk -filename /path/to/sda1_and_sda5.vmdk -rawdisk /dev/sda -partitions 1,5 -relative 这里的relative参数保证了创建出来的虚拟磁盘文件的可移植性，在sda1或者sda5的实际位置和大小变化后也可以用，没有这个参数的话到时候就要重新创建一遍vmdk文件了。 创建好可能会产生多个文件：a.vmdk和a-pt.vmdk，实际在虚拟机里使用前一个文件，后一个需要存在。 这样就基本完成啦，不过如果你打开这样配置的虚拟机后就会发现一个问题，MBR在这种默认情况下是和真实硬盘相同的，GRUB是和主机相同的，如果GRUB配置文件所在分区虚拟机没有访问权限的话，就会引导不能 当然，虚拟机里的MBR可以设置得和主机不一样，不过操作起来比较麻烦，据说也有一定的危险。安全的做法是使用携带特定配置文件的GRUB的Live CD镜像来引导，下面就开始做这样一张CD镜像（适用于GRUB 1.0）： # 准备一个目录 mkdir -p iso/boot/grub # 复制必要文件 cp /usr/lib/grub/*-pc/stage2_eltorito /boot/grub/menu.lst iso/boot/grub # 编辑复制过来的 menu.lst ，去掉其中的 savedefault ，... vim iso/boot/grub/menu.lst [...]]]></description> <content:encoded><![CDATA[<p>虽然各种虚拟机都会说把真实磁盘的分直接给虚拟机用会如何如何有风险，但是好处也是显而易见的：可以选择是直接运行或是在Linux下的虚拟机运行某个操作系统，同时节约了磁盘空间和同步时间。</p><p>我这样做已经有一段时间了，除了Windows会发现硬件改变要求重新激活之外，还没有发现问题 :-) 但是周围的同学似乎觉得这样做比较麻烦，很有风险，或者无从下手。其实比较简单也没有这么可怕啦，下面普及一下：</p><p><span
id="more-264"></span>首先要创建一个特殊的虚拟磁盘文件，指向真实磁盘的某个分区，这可以参考VirtualBox用户手册中的9.10章节。简单来说：</p><p>注：由于这些命令需要/dev/sda的读写权限，以后虚拟机在使用这些vmdk文件的时候，也需要这样的权限，建议把当前用户加在disk组里解决问题：<code>gpasswd disk -a `whoami`</code></p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># 把整个sda映射出去</span>
VBoxManage internalcommands createrawvmdk <span style="color: #660033;">-filename</span> <span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>sda.vmdk <span style="color: #660033;">-rawdisk</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda
<span style="color: #666666; font-style: italic;"># 或者，处于安全考虑，只允许sda1和sda5在虚拟机里用到，虚拟机里仍然可以知道有其他分区存在，但是不能读写</span>
VBoxManage internalcommands createrawvmdk <span style="color: #660033;">-filename</span> <span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>sda1_and_sda5.vmdk <span style="color: #660033;">-rawdisk</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda <span style="color: #660033;">-partitions</span> <span style="color: #000000;">1</span>,<span style="color: #000000;">5</span> <span style="color: #660033;">-relative</span></pre></div></div><p>这里的relative参数保证了创建出来的虚拟磁盘文件的可移植性，在sda1或者sda5的实际位置和大小变化后也可以用，没有这个参数的话到时候就要重新创建一遍vmdk文件了。<br
/> 创建好可能会产生多个文件：a.vmdk和a-pt.vmdk，实际在虚拟机里使用前一个文件，后一个需要存在。</p><p>这样就基本完成啦，不过如果你打开这样配置的虚拟机后就会发现一个问题，MBR在这种默认情况下是和真实硬盘相同的，GRUB是和主机相同的，如果GRUB配置文件所在分区虚拟机没有访问权限的话，就会引导不能 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_eek.gif' alt='8-O' class='wp-smiley' /></p><p>当然，虚拟机里的MBR可以设置得和主机不一样，不过操作起来比较麻烦，据说也有一定的危险。安全的做法是使用携带特定配置文件的GRUB的Live CD镜像来引导，下面就开始做这样一张CD镜像（适用于GRUB 1.0）：</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># 准备一个目录</span>
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> iso<span style="color: #000000; font-weight: bold;">/</span>boot<span style="color: #000000; font-weight: bold;">/</span>grub
<span style="color: #666666; font-style: italic;"># 复制必要文件</span>
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>grub<span style="color: #000000; font-weight: bold;">/*</span>-pc<span style="color: #000000; font-weight: bold;">/</span>stage2_eltorito <span style="color: #000000; font-weight: bold;">/</span>boot<span style="color: #000000; font-weight: bold;">/</span>grub<span style="color: #000000; font-weight: bold;">/</span>menu.lst iso<span style="color: #000000; font-weight: bold;">/</span>boot<span style="color: #000000; font-weight: bold;">/</span>grub
<span style="color: #666666; font-style: italic;"># 编辑复制过来的 menu.lst ，去掉其中的 savedefault ，...</span>
<span style="color: #c20cb9; font-weight: bold;">vim</span> iso<span style="color: #000000; font-weight: bold;">/</span>boot<span style="color: #000000; font-weight: bold;">/</span>grub<span style="color: #000000; font-weight: bold;">/</span>menu.lst
<span style="color: #666666; font-style: italic;"># 创建iso</span>
mkisofs <span style="color: #660033;">-R</span> <span style="color: #660033;">-b</span> boot<span style="color: #000000; font-weight: bold;">/</span>grub<span style="color: #000000; font-weight: bold;">/</span>stage2_eltorito <span style="color: #660033;">-no-emul-boot</span> <span style="color: #660033;">-boot-load-size</span> <span style="color: #000000;">4</span> <span style="color: #660033;">-boot-info-table</span> <span style="color: #660033;">-o</span> grub-custom.iso iso</pre></div></div><p>在虚拟机里设置使用这张iso引导之后，就大功告成啦～</p><p><img
class="aligncenter size-medium wp-image-268" title="host_windows_7_in_virtualbox" src="http://lihdd.net/wp-content/uploads/2009/11/host_windows_7_in_virtualbox-300x227.png" alt="host_windows_7_in_virtualbox" width="300" height="227" /></p> ]]></content:encoded> <wfw:commentRss>http://lihdd.net/host-os-in-virtualbox/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>动态限制VirtualBox的CPU使用</title><link>http://lihdd.net/limit-virtualbox-cpu-resource-dynamically/</link> <comments>http://lihdd.net/limit-virtualbox-cpu-resource-dynamically/#comments</comments> <pubDate>Tue, 16 Jun 2009 14:20:08 +0000</pubDate> <dc:creator>quark</dc:creator> <category><![CDATA[Script]]></category> <category><![CDATA[Shell]]></category> <category><![CDATA[VirtualBox]]></category><guid
isPermaLink="false">http://lihdd.net/?p=168</guid> <description><![CDATA[夏天，除了蚊子产生的嗡嗡声，可能就是本本风扇产生的噪声最令人反感了。 我习惯于在Linux下面运行一个用VirtualBox虚拟的Windows，VirtualBox会占用很多很多CPU资源，把本本双核的一个核占满是经常的事情，弄得风扇非常可怜 虽然VirtualBox有暂停功能，不过暂停之后在虚拟机下面运行的程序也被暂停了，并不方便。终于，我决定要只分给VirutalBox可怜的CPU资源 Linux下有一个叫做cpulimit(Link)的工具，可以很方便地限制指定进程的CPU使用率，效果很好。不过，简单地用它限制VirtualBox的CPU使用率之后，虚拟机会工作会很迟钝，甚至播放一段音乐都会断断续续。 Windows下面有一个选项，可以选择把系统资源优先分配给前台程序或者是后台服务，默认是前台程序。这个设置效果明显，比如同时运行两个7-Zip的Benchmark的话，处于前台的程序会有更好的结果： 在Linux下就不一样了，并没有这样根据前台和后台而做的动态调整，尤其在图形界面下。不过既然Linux rocks，没有什么不可以 ;-) 。我决定设置成使用VirtualBox的时候不限制它的CPU使用率，只在我不使用VirtualBox的时候加以限制。 做到这些首先要解决的问题是，在Linux图形界面下如何知道我是不是正在使用VirtualBox。这个问题又涉及到如何得知目前处于前台的窗口是什么。对于后者，比较好的做法是： xprop -root _NET_ACTIVE_WINDOW 这条命令会返回当前处于前台的窗口的Window ID，接着可以使用xprop -id &#60;id&#62;查询该窗口的详细信息，通过检查Window Class或者标题就可以知道这个窗口是不是VirtualBox了。 知道这些其实已经可以很容易做出来一个针对VirtualBox的动态CPU限制脚本了，可是我还想把它扩展到其他程序。对于一个运行的程序，有唯一的一个Process ID，如果可以知道一个窗口是属于哪一个进程的就比较好办了，幸运的是这也是很容易的： xprop -id ${window_id} _NET_WM_PID 会返回指定Windows ID窗口所属的Process ID。 剩下的工作就很容易了～ 下面是我正在使用的脚本，传入Process ID和一个CPU使用率数值（0到100）就可以对指定进程动态进行限制了 这段脚本考虑到了被重复执行以及待监视进程中途退出的情况，都可以正确地处理： #!/bin/sh if &#91; $# -lt 2 &#93;; then echo &#34;Usage: ${0} process_id cpu_limit_value&#34; else if &#91; $&#40;ps -o args -C `basename ${0}` &#124; fgrep [...]]]></description> <content:encoded><![CDATA[<p><img
class="alignright size-full wp-image-169 frame" title="vbox_cpulimit" src="http://lihdd.net/wp-content/uploads/2009/06/vbox_cpulimit.png" alt="vbox_cpulimit" width="96" height="96" />夏天，除了蚊子产生的嗡嗡声，可能就是本本风扇产生的噪声最令人反感了。</p><p>我习惯于在Linux下面运行一个用VirtualBox虚拟的Windows，VirtualBox会占用很多很多CPU资源，把本本双核的一个核占满是经常的事情，弄得风扇非常可怜 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_neutral.gif' alt=':-|' class='wp-smiley' /> 虽然VirtualBox有暂停功能，不过暂停之后在虚拟机下面运行的程序也被暂停了，并不方便。终于，我决定要只分给VirutalBox可怜的CPU资源 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_evil.gif' alt=':evil:' class='wp-smiley' /> <span
id="more-168"></span></p><p>Linux下有一个叫做cpulimit(<a
title="CPU limit" href="http://cpulimit.sourceforge.net/" target="_blank">Link</a>)的工具，可以很方便地限制指定进程的CPU使用率，效果很好。不过，简单地用它限制VirtualBox的CPU使用率之后，虚拟机会工作会很迟钝，甚至播放一段音乐都会断断续续。</p><p>Windows下面有一个选项，可以选择把系统资源优先分配给前台程序或者是后台服务，默认是前台程序。这个设置效果明显，比如同时运行两个7-Zip的Benchmark的话，处于前台的程序会有更好的结果：</p><div
id="attachment_170" class="wp-caption aligncenter" style="width: 480px"><img
class="size-full wp-image-170" title="7zip_benchmarks" src="http://lihdd.net/wp-content/uploads/2009/06/7zip_benchmarks.PNG" alt="7-Zip Benchmarks" width="470" height="355" /><p
class="wp-caption-text">7-Zip Benchmarks</p></div><p>在Linux下就不一样了，并没有这样根据前台和后台而做的动态调整，尤其在图形界面下。不过既然Linux rocks，没有什么不可以 ;-) 。我决定设置成使用VirtualBox的时候不限制它的CPU使用率，只在我不使用VirtualBox的时候加以限制。</p><p>做到这些首先要解决的问题是，在Linux图形界面下如何知道我是不是正在使用VirtualBox。这个问题又涉及到如何得知目前处于前台的窗口是什么。对于后者，比较好的做法是：</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;">xprop <span style="color: #660033;">-root</span> _NET_ACTIVE_WINDOW</pre></div></div><p>这条命令会返回当前处于前台的窗口的Window ID，接着可以使用xprop -id <em>&lt;id&gt;</em>查询该窗口的详细信息，通过检查Window Class或者标题就可以知道这个窗口是不是VirtualBox了。</p><p>知道这些其实已经可以很容易做出来一个针对VirtualBox的动态CPU限制脚本了，可是我还想把它扩展到其他程序。对于一个运行的程序，有唯一的一个Process ID，如果可以知道一个窗口是属于哪一个进程的就比较好办了，幸运的是这也是很容易的：</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;">xprop <span style="color: #660033;">-id</span> <span style="color: #800000;">${window_id}</span> _NET_WM_PID</pre></div></div><p>会返回指定Windows ID窗口所属的Process ID。</p><p>剩下的工作就很容易了～<br
/> 下面是我正在使用的脚本，传入Process ID和一个CPU使用率数值（0到100）就可以对指定进程动态进行限制了 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /><br
/> 这段脚本考虑到了被重复执行以及待监视进程中途退出的情况，都可以正确地处理：</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$#</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">2</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Usage: <span style="color: #007800;">${0}</span> process_id cpu_limit_value&quot;</span>
<span style="color: #000000; font-weight: bold;">else</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">ps</span> <span style="color: #660033;">-o</span> args <span style="color: #660033;">-C</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">basename</span> <span style="color: #800000;">${0}</span><span style="color: #000000; font-weight: bold;">`</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">fgrep</span> <span style="color: #800000;">${1}</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">wc</span> -l<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #660033;">-gt</span> <span style="color: #000000;">2</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">&amp;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null; <span style="color: #000000; font-weight: bold;">then</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Process &quot;</span><span style="color: #800000;">${1}</span><span style="color: #ff0000;">&quot; is already under control.&quot;</span>
		<span style="color: #c20cb9; font-weight: bold;">false</span>
	<span style="color: #000000; font-weight: bold;">else</span>
		<span style="color: #666666; font-style: italic;"># limit = 1 when cpulimit is running, otherwise 0</span>
		<span style="color: #007800;">limit</span>=<span style="color: #000000;">0</span>
		<span style="color: #666666; font-style: italic;"># only perform checking when target process is running</span>
		<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-d</span> <span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${1}</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">do</span>
			<span style="color: #007800;">wid</span>=<span style="color: #000000; font-weight: bold;">`</span>xprop <span style="color: #660033;">-root</span> _NET_ACTIVE_WINDOW <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/.* # //'</span><span style="color: #000000; font-weight: bold;">`</span>
			<span style="color: #007800;">pid</span>=<span style="color: #000000; font-weight: bold;">`</span>xprop <span style="color: #660033;">-id</span> <span style="color: #800000;">${wid}</span> _NET_WM_PID <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/.* = //'</span><span style="color: #000000; font-weight: bold;">`</span>
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${pid}</span>&quot;</span> = <span style="color: #ff0000;">&quot;<span style="color: #007800;">${1}</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
				<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$limit</span> <span style="color: #660033;">-eq</span> <span style="color: #000000;">1</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
					<span style="color: #666666; font-style: italic;"># target process window is actived, stop cpulimit</span>
					<span style="color: #c20cb9; font-weight: bold;">kill</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">jobs</span> -p<span style="color: #000000; font-weight: bold;">`</span>
					<span style="color: #007800;">limit</span>=<span style="color: #000000;">0</span>
				<span style="color: #000000; font-weight: bold;">fi</span>
			<span style="color: #000000; font-weight: bold;">elif</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$limit</span> <span style="color: #660033;">-eq</span> <span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
				<span style="color: #666666; font-style: italic;"># target process window is unactived, start cpulimit</span>
				cpulimit <span style="color: #660033;">-p</span> <span style="color: #800000;">${1}</span> <span style="color: #660033;">-l</span> <span style="color: #800000;">${2}</span> <span style="color: #660033;">-z</span> <span style="color: #000000; font-weight: bold;">&amp;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null <span style="color: #000000; font-weight: bold;">&amp;</span>
				<span style="color: #007800;">limit</span>=<span style="color: #000000;">1</span>
			<span style="color: #000000; font-weight: bold;">fi</span>
			<span style="color: #c20cb9; font-weight: bold;">sleep</span> <span style="color: #000000;">5</span>
		<span style="color: #000000; font-weight: bold;">done</span>
	<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">fi</span></pre></div></div><p>被这个脚本监视VirtualBox运行之后，我很高兴地听到了断断续续的Windows启动声 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> 。经过这样处理后效果比较明显，风扇转得再也不如以前那样疯狂了 :-)</p> ]]></content:encoded> <wfw:commentRss>http://lihdd.net/limit-virtualbox-cpu-resource-dynamically/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced

Served from: lihdd.net @ 2012-05-19 15:18:01 -->
