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-开头的命令,下面将大概介绍使用这些命令。
1
2
3
4
5
6
7
8
9
10
11
|
[root@node1 ~]
# vir
virsh virt-filesystems virt-
ls
virt-
tar
virt-alignment-scan virt-
format
virt-
make
-fs virt-
tar
-
in
virt-
cat
virt-host-validate virt-manager virt-
tar
-out
virt-clone virt-image virt-p2v-server virt-v2v
virt-convert virt-inspector virt-pki-validate virt-viewer
virt-copy-
in
virt-inspector2 virt-rescue virt-what
virt-copy-out virt-
install
virt-resize virt-win-reg
virt-
df
virt-list-filesystems virt-sparsify virt-xml-validate
virt-edit virt-list-partitions virt-sysprep
[root@node1 ~]
#
|
(2)命令使用参数格式
1
2
|
virt-
df
[--options] -d domname
virt-
df
[--options] -a disk.img [-a disk.img ...]
|
通常两种方式:-d是采用域名称方式,-a是直接获取的磁盘文件方式。
3.virt-cat命令
直接查看虚拟机里面的/etc/passwd文件,类似于cat命令。
1
|
[root@node1 ~]
# virt-cat -d CentOS6.5-01 /etc/passwd
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
[root@node1 ~]
# virt-cat -d CentOS6.5-01 /etc/passwd
root:x:0:0:root:
/root
:
/bin/bash
bin:x:1:1:bin:
/bin
:
/sbin/nologin
daemon:x:2:2:daemon:
/sbin
:
/sbin/nologin
adm:x:3:4:adm:
/var/adm
:
/sbin/nologin
lp:x:4:7:lp:
/var/spool/lpd
:
/sbin/nologin
sync
:x:5:0:
sync
:
/sbin
:
/bin/sync
shutdown
:x:6:0:
shutdown
:
/sbin
:
/sbin/shutdown
halt:x:7:0:halt:
/sbin
:
/sbin/halt
mail:x:8:12:mail:
/var/spool/mail
:
/sbin/nologin
uucp:x:10:14:uucp:
/var/spool/uucp
:
/sbin/nologin
operator:x:11:0:operator:
/root
:
/sbin/nologin
games:x:12:100:games:
/usr/games
:
/sbin/nologin
gopher:x:13:30:gopher:
/var/gopher
:
/sbin/nologin
ftp
:x:14:50:FTP User:
/var/ftp
:
/sbin/nologin
nobody:x:99:99:Nobody:/:
/sbin/nologin
dbus:x:81:81:System message bus:/:
/sbin/nologin
vcsa:x:69:69:virtual console memory owner:
/dev
:
/sbin/nologin
abrt:x:173:173::
/etc/abrt
:
/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:
/sbin/nologin
ntp:x:38:38::
/etc/ntp
:
/sbin/nologin
saslauth:x:499:76:
"Saslauthd user"
:
/var/empty/saslauth
:
/sbin/nologin
postfix:x:89:89::
/var/spool/postfix
:
/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:
/var/empty/sshd
:
/sbin/nologin
tcpdump:x:72:72::/:
/sbin/nologin
[root@node1 ~]
#
|
4.virt-edit命令
直接编辑虚拟机里面的文件,类似于vi命令。
注:虚拟机必须处于关机状态,否则会出现如下提示:
1
2
3
4
5
6
7
|
[root@node1 ~]
# virt-edit -d CentOS6.5-01 /etc/passwd
libguestfs: 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 daemon
specify live access. In most libguestfs tools these options are --ro or
--live respectively. Consult the documentation
for
further information.
[root@node1 ~]
#
|
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@node1 ~]
# virsh shutdown CentOS6.5-01
Domain 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命令进行编辑
1
2
3
4
5
6
7
8
|
[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命令。
1
2
3
4
|
[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命令也与上面内容类似
1
2
3
4
|
[root@node1 ~]
# virt-filesystems -d CentOS6.5-01
/dev/sda1
/dev/sda3
[root@node1 ~]
#
|
6.virt-copy-out命令
直接复制虚拟机里面的磁盘文件到本地磁盘上,类似于cp命令。
(1)拷贝oeltest01虚拟机中的passwd文件到本地/tmp目录下
1
|
[root@node1 ~]
# virt-copy-out -d CentOS6.5-01 /etc/passwd /tmp/
|
(2)拷贝oeltest01虚拟机中的/etc/到本地/tmp目录下
1
|
virt-copy-out -d CentOS6.5-01
/etc/
/tmp/
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[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]
# ll
total 28
drwxr-xr-x 83 root root 4096 Nov 27 15:17 etc
drwx------ 2 root root 4096 Nov 17 07:07 keyring-hjLN4X
drwx------ 2 gdm gdm 4096 Nov 17 07:07 orbit-gdm
drwx------ 2 root root 4096 Nov 22 10:23 orbit-root
-rw-r--r-- 1 root root 1058 Nov 27 15:22
passwd
drwx------. 2 root root 4096 Nov 17 07:07 pulse-bs1gSqqVvuLW
drwx------. 2 gdm gdm 4096 Nov 17 07:07 pulse-GJoMl8o2kO0h
[root@node1 tmp]
#
|
该命令很有用,也可以直接指定虚拟机磁盘文件进行命令。
#查看虚拟机所有磁盘文件
1
2
3
4
5
6
7
8
|
[root@node1 ~]
# virsh domblklist CentOS6.5-01
Target Source
------------------------------------------------
vda
/data/kvm/CentOS6
.5-01.qcow2
vdb
/data/kvm/CentOS6
.5-01_add.qcow2
hdc -
[root@node1 ~]
#
|
通过直接读取磁盘文件中的内容。
1
|
[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/
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[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]
# ls
etc keyring-hjLN4X orbit-root pulse-bs1gSqqVvuLW
ifcfg-eth0 orbit-gdm
passwd
pulse-GJoMl8o2kO0h
[root@node1 tmp]
# cat ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
UUID=77733023-71ab-41bf-9cfb-2a2a5510857a
ONBOOT=
yes
NM_CONTROLLED=
yes
BOOTPROTO=none
HWADDR=52:54:00:56:9A:7F
IPADDR=10.10.172.241
PREFIX=24
GATEWAY=10.10.172.1
DNS1=192.168.172.208
DNS2=192.168.172.209
DEFROUTE=
yes
IPV4_FAILURE_FATAL=
yes
IPV6INIT=no
NAME=
"System eth0"
[root@node1 tmp]
#
|
7.virt-copy-in命令
直接复制虚拟化平台上本地磁盘文件到虚拟机磁盘上,类似于cp命令。
拷贝本地/root/etc.tar.gz文件到虚拟机/tmp目录下
1
|
[root@node1 ~]
# virt-copy-in -d CentOS6.5-01 /root/node1.txt /tmp/
|
注:虚拟化必须处于关机状态,可以开机验证。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[root@node1 ~]
# virt-copy-in -d CentOS6.5-01 /root/node1.txt /tmp/
[root@node1 ~]
# virsh start CentOS6.5-01
Domain CentOS6.5-01 started
[root@node1 ~]
# virsh console CentOS6.5-01
Connected to domain CentOS6.5-01
Escape character is ^]
CentOS release 6.5 (Final)
Kernel 2.6.32-431.el6.x86_64 on an x86_64
CentOS6.5-01 login: root
Password:
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 ~]
#
|
文件读取虚拟机磁盘文件的内容到此,还有很多命令的命令,可以进行测试。
本文转自 dengaosky 51CTO博客,原文链接:http://blog.51cto.com/dengaosky/2044725,如需转载请自行联系原作者