准备ramdisk
linux中创建ramdisk可以有一下在两种方法:
创建RAM Disk
第一种方法是创建内存文件
首先创建一个目录,这个目录可以在文件系统的任何位置,比如:
sudo mkdir /tmp/ramdisk
接下来,我们需要指定RAM disk的大小,文件系统和设备名,然后将它挂载到一个目录下。从上面的截图可以发现,我的系统还有大量可用的内存空间,所以我完全可以分配1G给RAM disk。运行下面的一行命令。
sudo mount -t tmpfs -o size=1024m myramdisk /tmp/ramdisk
这条命令指定文件系统为tmpfs,RAM disk大小为1024MB,myramdisk是我给它指定的设备名。
如果我们运行下面的命令:
mount | tail -n 1
我们可以发现,RAM disk成功地挂载到了/tmp/ramdisk。
现在,如果我将一个文件复制到/tmp/ramdisk目录下,我的内存使用量就会上升对应的大小。
创建一个ramdisk块设备
第二种方法是创建一个内存块设备
内核有个模块叫brd,这个ko可以在系统中创建多个ramdisk 设备,通过modeinfo brd可以查看该模块的具体信息和参数。
通过命令modprobe brd rd_nr=1 rd_size=20971520 max_part=0可以在/dev目录下创建1个 20GB的块设备
可以对启动的任意一个设备进行分区,也可以把他作为一个裸设备使用
如果要删除这些ramdisk设备。可以执行命令:modprobe -r brd
将虚拟机镜像导入到ramdisk中
如果采用方法一创建的ramdisk,那么直接把镜像文件拷贝到ramdisk的文件夹中
如果是采用方法二创建的ramdisk块设备,那么需要将镜像文件导入到块设备中(并不能直接dd),这里需要使用qemu-img命令进行转换:
qemu-img convert -f qcow2 -O raw my-qcow2.img /dev/ram0
从ramdisk上启动虚拟机
方法一和正常启动qcow2文件一致,这里说下方法二:
本质上就是通过libvirt添加一个块设备,在虚拟机的xml中将原来使用qcow2文件的部分修改成使用块设备:
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none'/> #这里的type=‘raw’表示是初始状态,未格式化
<source dev='/dev/ram0'/>
<target dev='sdc' bus='sata'/> # sdc sda之类的命名不影响显示结果
</disk>