把虚拟机放到内存里

在内存白菜价的今天,没个 8G、16G 的你都不好意思开口!但是在不需要跑程序时,这么多内存闲着可真够浪费的,本着节能减排的宗旨,必须把这空闲的利用起来。

用过 SSD 都应该对那种几近变态的 I/O 读写能力深有感触,就目前 SSD 的价格相对 HDD 来说还是贵了。但是可以利用大内存来曲线实现这种高速的 I/O 读写。市面上流行的 Linux 发行版都会划分出一块内存区域来做 ramfs,位于 /dev/shm,大小为实际物理内存的一半,可以直接利用这块区域而无需手动挂载 tmpfs.

很简单的一个脚本,就是利用 rsync 将硬盘上的虚拟机目录同步到内存中执行,然后每隔半小时同步一次防止丢数据。

#!/bin/bash

# Your tmpfs VirtualBox folder
VBOXTMPFS=/dev/shm/VirtualBox_VMs
# Your VirtualBox folder
VBOXHOME="${HOME}/VirtualBox_VMs"
# Seconds interval for rsync
INTERVAL=1800

# Check tmp folder
if [ ! -d "${VBOXTMPFS}" ]; then
    mkdir -p ${VBOXTMPFS}
fi

# Sync to tmpfs
echo "Syching ${VBOXHOME} to ${VBOXTMPFS}"
rsync -avi --delete "${VBOXHOME}/" "${VBOXTMPFS}/"

echo "Executing reverse sync every ${INTERVAL} seconds"
( while true; do sleep ${INTERVAL}; rsync -avi --delete "${VBOXTMPFS}/" "${VBOXHOME}/"; done; )&
SYNC=$!

echo "Launching VirtualBox"
virtualbox

echo "VirtualBox closed, kill auto sync and reverse sync one last time"
echo "Please wait..."
kill $!
rsync -avi --delete "${VBOXTMPFS}/" "${VBOXHOME}/"
echo "Done!"

效果绝对能接受,VirtualBox 里开一个 openSUSE 11.2 基本20s搞定。前提是内存足够大,要是低于10G的就要折腾一下了,毕竟 /dev/shm 只有内存的一半大小。

当然,这只是一个应用,你完全可以将 Chrome、Safari、Firefox等浏览器的缓存放到这里面来,加快读写速度。

PS:/dev/shm 本质还是 RAM 存储,所以一旦断电数据就没有了,切记!