kvm虚拟机磁盘挂载还真不是一帆风顺的。xen虚拟化默认就raw格式的磁盘,可以直接挂载,kvm如果采用raw也可以直接挂载,与xen磁盘挂载方式一致。

1.kvm虚拟化相比xen虚拟化来说,工具与方法众多,本文列举思路如下:

(1)raw格式的磁盘可以直接挂载,可以将qcow2磁盘转换成raw格式并挂载

转换示例:qemu-imgconvert-fraw-Oqcow2/data/raw.img/data/qcow2.img

(2)通过编译安装qemu-nbd工具挂载qcows格式的磁盘

qemu-nbd工具默认没有安装,需要编译安装,该内容待测试,如确实需要也可以参考思路1去解决。

(3)通过创建KVM环境创建kvm虚拟机配置文件挂载虚拟磁盘启动虚拟机

(4)通过libguestfs-tools工具直接修改与读取qcow2虚拟磁盘文件

本文主要测试libguestfs-tools工具来进行测试。

2.libguestfs-tools工具的使用示例

(1)确认libguestfs-tools工具的安装,没有安装可以yum进行安装。

安装完成后,会安装很多virt-开头的命令,下面将大概介绍使用这些命令。

[root@node1 ~]# virvirsh                  virt-filesystems       virt-ls                virt-tarvirt-alignment-scan    virt-format            virt-make-fs           virt-tar-invirt-cat               virt-host-validate     virt-manager           virt-tar-outvirt-clone             virt-image             virt-p2v-server        virt-v2vvirt-convert           virt-inspector         virt-pki-validate      virt-viewervirt-copy-in           virt-inspector2        virt-rescue            virt-whatvirt-copy-out          virt-install           virt-resize            virt-win-regvirt-df                virt-list-filesystems  virt-sparsify          virt-xml-validatevirt-edit              virt-list-partitions   virt-sysprep           [root@node1 ~]#

(2)命令使用参数格式

virt-df  [--options] -d domnamevirt-df [--options] -a disk.img [-a disk.img ...]

通常两种方式:-d是采用域名称方式,-a是直接获取的磁盘文件方式。

3.virt-cat命令

直接查看虚拟机里面的/etc/passwd文件,类似于cat命令。

[root@node1 ~]# virt-cat -d CentOS6.5-01 /etc/passwd
[root@node1 ~]# virt-cat -d CentOS6.5-01 /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinuucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologingopher:x:13:30:gopher:/var/gopher:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologindbus:x:81:81:System message bus:/:/sbin/nologinvcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologinabrt:x:173:173::/etc/abrt:/sbin/nologinhaldaemon:x:68:68:HAL daemon:/:/sbin/nologinntp:x:38:38::/etc/ntp:/sbin/nologinsaslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologintcpdump:x:72:72::/:/sbin/nologin[root@node1 ~]#

4.virt-edit命令

直接编辑虚拟机里面的文件,类似于vi命令。

注:虚拟机必须处于关机状态,否则会出现如下提示:

[root@node1 ~]# virt-edit -d CentOS6.5-01 /etc/passwdlibguestfs: error: error: domain is a live virtual machine.Writing to the disks of a running virtual machine can cause disk corruption.Either use read-only access, or if the guest is running the guestfsd daemonspecify live access.  In most libguestfs tools these options are --ro or--live respectively.  Consult the documentation for further information.[root@node1 ~]#
[root@node1 ~]# virsh shutdown CentOS6.5-01Domain CentOS6.5-01 is being shutdown[root@node1 ~]# virsh list --all                      Id    Name                           State---------------------------------------------------- -     CentOS6.5-01                   shut off -     CentOS6.5-02                   shut off -     CentOS6.5-03                   shut off -     Ser08R2-01                     shut off[root@node1 ~]#

可以通过vi命令进行编辑

[root@node1 ~]# virt-edit -d CentOS6.5-01 /etc/rc.local #!/bin/sh## This script will be executed *after* all the other init scripts.# You can put your own initialization stuff in here if you don't# want to do the full Sys V style init stuff.touch /var/lock/subsys/local

5.virt-df命令

直接查看虚拟机里面的磁盘使用情况,类似于df-h命令。

[root@node1 ~]# virt-df -d CentOS6.5-01     Filesystem                           1K-blocks       Used  Available  Use%CentOS6.5-01:/dev/sda1                  198337      29676     158421   15%CentOS6.5-01:/dev/sda3                 6506012    1640484    4535032   26%

virt-filesystems命令也与上面内容类似

[root@node1 ~]# virt-filesystems -d CentOS6.5-01/dev/sda1/dev/sda3[root@node1 ~]#

6.virt-copy-out命令

直接复制虚拟机里面的磁盘文件到本地磁盘上,类似于cp命令。

(1)拷贝oeltest01虚拟机中的passwd文件到本地/tmp目录下

[root@node1 ~]# virt-copy-out -d CentOS6.5-01 /etc/passwd /tmp/

(2)拷贝oeltest01虚拟机中的/etc/到本地/tmp目录下

virt-copy-out -d CentOS6.5-01 /etc/ /tmp/
[root@node1 ~]# virt-copy-out -d CentOS6.5-01 /etc/passwd /tmp/[root@node1 ~]# virt-copy-out -d CentOS6.5-01 /etc/ /tmp/      [root@node1 ~]# [root@node1 ~]# cd /tmp/[root@node1 tmp]# lltotal 28drwxr-xr-x  83 root root 4096 Nov 27 15:17 etcdrwx------   2 root root 4096 Nov 17 07:07 keyring-hjLN4Xdrwx------   2 gdm  gdm  4096 Nov 17 07:07 orbit-gdmdrwx------   2 root root 4096 Nov 22 10:23 orbit-root-rw-r--r--   1 root root 1058 Nov 27 15:22 passwddrwx------.  2 root root 4096 Nov 17 07:07 pulse-bs1gSqqVvuLWdrwx------.  2 gdm  gdm  4096 Nov 17 07:07 pulse-GJoMl8o2kO0h[root@node1 tmp]#

该命令很有用,也可以直接指定虚拟机磁盘文件进行命令。

#查看虚拟机所有磁盘文件

[root@node1 ~]# virsh domblklist CentOS6.5-01Target     Source------------------------------------------------vda        /data/kvm/CentOS6.5-01.qcow2vdb        /data/kvm/CentOS6.5-01_add.qcow2hdc        -[root@node1 ~]#

通过直接读取磁盘文件中的内容。

[root@node1 ~]# virt-copy-out -a /data/kvm/CentOS6.5-01.qcow2 -a /data/kvm/CentOS6.5-01_add.qcow2 /etc/sysconfig/network-scripts/ifcfg-eth0 /tmp/
[root@node1 ~]# virt-copy-out -a /data/kvm/CentOS6.5-01.qcow2 -a /data/kvm/CentOS6.5-01_add.qcow2 /etc/sysconfig/network-scripts/ifcfg-eth0 /tmp/ [root@node1 ~]# cd /tmp/[root@node1 tmp]# lsetc         keyring-hjLN4X  orbit-root  pulse-bs1gSqqVvuLWifcfg-eth0  orbit-gdm       passwd      pulse-GJoMl8o2kO0h[root@node1 tmp]# cat ifcfg-eth0 DEVICE=eth0TYPE=EthernetUUID=77733023-71ab-41bf-9cfb-2a2a5510857aONBOOT=yesNM_CONTROLLED=yesBOOTPROTO=noneHWADDR=52:54:00:56:9A:7FIPADDR=10.10.172.241PREFIX=24GATEWAY=10.10.172.1DNS1=192.168.172.208DNS2=192.168.172.209DEFROUTE=yesIPV4_FAILURE_FATAL=yesIPV6INIT=noNAME="System eth0"[root@node1 tmp]#

7.virt-copy-in命令

直接复制虚拟化平台上本地磁盘文件到虚拟机磁盘上,类似于cp命令。

拷贝本地/root/etc.tar.gz文件到虚拟机/tmp目录下

[root@node1 ~]# virt-copy-in -d CentOS6.5-01 /root/node1.txt /tmp/

注:虚拟化必须处于关机状态,可以开机验证。

[root@node1 ~]# virt-copy-in -d CentOS6.5-01 /root/node1.txt /tmp/[root@node1 ~]# virsh start CentOS6.5-01Domain CentOS6.5-01 started[root@node1 ~]# virsh console CentOS6.5-01Connected to domain CentOS6.5-01Escape character is ^]CentOS release 6.5 (Final)Kernel 2.6.32-431.el6.x86_64 on an x86_64CentOS6.5-01 login: rootPassword: Last login: Wed Nov 22 17:34:28 from 192.168.21.128[root@CentOS6 ~]# ll /tmp/total 0-rw-r--r--. 1 root root 0 Nov 27 15:30 node1.txt[root@CentOS6 ~]# [root@CentOS6 ~]#

文件读取虚拟机磁盘文件的内容到此,还有很多命令的命令,可以进行测试。