KVM虚拟机镜像(disk img)的共享--尝试

共享disk文件

virt-install disk选项中有关于disk权限的参数:perms
默认值为:rw(read/write),还有ro(readonly)和sh(shared read/write)。
所以可以尝试从一个img启动多个虚拟机,但可能每个虚拟机都要有私有的根文件系统的img。
下面是Using shared storage with virtual disk images中的一些解释:
The virt-install command can be used to install new guests from the command line. The —disk argument can take the name of a storage pool, followed by the name of any contained volumes. Continuing this example, the following command will begin the installation of a guest with two disks; the first disk is the root file system, the second disk can be shared between multiple guests for common data:

# virt-install --accelerate --name rhelx86_64 --ram 800 --vnc --disk \ vol=kvmguest/10.0.0.1 --disk vol=kvmguest/10.0.0.2,perms=sh --pxe
The second disk has the <shareable/> flag set. Critical for the disk to be safely shared between guests, this ensures that the SELinux labelling will be appropriate for multiple guests to access the disk and that all I/O caching is disabled on the host.

我的设想:

首先尝试sh启动多个虚拟机,不行则尝试尝试ro+sh启动一个,然后多个虚拟机
最后实践发现将img的perms=sh的VMs可以依次起来,但是毕竟共享的是系统盘,终究还是会出现系统方面的错误,所以不推荐。

perms=sh的用途

最后可行的方式就是只共享一些纯数据盘,这样只要操作得当,基本不会出现问题。

使用virt-install搭建KVM虚拟机

virt-install安装脚本

virt-install \
#虚拟机名字
--name test \
#客户端虚拟机的名称
--ram 2048 \
#指定虚拟机的虚拟CPU数
--vcpus=1 \
#检查指定的虚拟CPU数不要超过物理CPU数
--check-cpu \
#指定虚拟机能够使用的物理CPU
--cpuset=0,2,4,6  or --cpuset=1-3,5,7-9
#指定存储配置,path指定img的存放路径,
--disk path=/path-to-img/test.img,size=20 \
#使用光驱方法安装的镜像路径
--cdrom /path-to-original-iso/xp.iso \
--import
#额外说明#若test.img存在,使用import+disk组合;若test.img不存在,使用disk+cdrom组合
#额外说明#如果test.img不存在,则从xp.iso中安装并存储到test.img中;若test.img存在,则直接读取test.img内容安装系统。
#启用KVM内核加速功能
--accelerate \
--vnc \
--keymap=en-us

Read More

获取虚拟机被自动分配的IP地址

问题背景

使用virt-install方式安装并管理虚拟机是一种很方便的手段。省去了我们许多对于网络的配置工作,唯一的缺点就是无法直接获取虚拟机的IP地址。很多时候需要手动进入虚拟机后查看或更改,略显得麻烦。而网络上能找到的诸多方法都需要比较麻烦的配置(个人感受)。直到找到这篇博客,才感觉找到了我想要的方法。
但是这篇博客有一点不完整。就是对于一个新建的虚拟机,还没有使用网络登录上去时,是无法通过arp获取MAC与IP地址直接映射关系的。
最终通过使用virsh+kvm+vnc+arp的组合方法,实现了完全校本化的获取虚拟机被自动分配的IP地址的方法。

Read More

linux命令学习(八):top,pidof, wall

top命令

top命令用于显示当前系统中所有的任务,结合pidof能够满足比较常用的需求。
网上有说法top就是读取/proc/stat /proc/$PID/stat相关的信息,基本认同吧。
画不多说,直接在应用场景中介绍参数
//利用pidof得到进程名的进程号,-p参数可以指定top只显示该进程号的信息

#top -p `pidof process-name`                      //process-name对应一个进程号
#top -p `pidof process-name |sed 's/ /,/g'`      //对应多个进程号,将空格换成','
//对于多线程程序,可使用-H参数查看每个线程的情况,可以知道有多少个线程被创建
#top -H -p `pidof process-name`

Read More