HACK#37 如何挂载客户端操作系统的磁盘
本节介绍挂载客户端操作系统磁盘的方法。
如果使用KVM或Xen等,有时就需要将客户端操作系统的磁盘挂载到主机操作系统上。例如,想在客户端操作系统启动前更改IP地址或主机名称,想把某个文件放到客户端操作系统的磁盘中等。
对于笔者来说,由于会对客户端操作系统的磁盘进行备份,但是很容易忘记是哪个磁盘,因此就需要确认磁盘的内容。
但是客户端操作系统的磁盘有时实际上是主机操作系统上的文件,大部分情况下难以使用一般的mount命令将客户端操作系统挂载到主机操作系统上。
这里就将介绍使用一些工具将客户端操作系统挂载到主机操作系统上的方法。
guestfish
guestfish是可以读写客户端操作系统的文件系统的工具。RHEL6也包含这个工具,可以通过yum install guestfish来安装。
使用virt-manager生成客户端操作系统时,将在/var/lib/libvirt/images/下生成客户端操作系统的磁盘映像。
尝试使用guestfish来挂载这个客户端操作系统的磁盘。
首先①启动guestfish。guestfish的shell就会启动,因此②使用add命令将客户端操作系统的磁盘映像添加到guestfish。③启动qemu的子进程。在主机操作系统上执行ps命令就可以看到,guestfish在后台启动qemu的子进程,并让在这个qemu上运行的用于作业的客户端操作系统来处理磁盘映像。
3145 pts/1 S+0:00|_guestfish
3368 pts/1 Sl+0:04|_/usr/libexec/qemu-kvm-drive file=/
var/lib/libvirt/images/test.img, cache=off, if=virtio
-enable-kvm-nodefaults-nographic-serial stdio-m 500-no-reboot-net user, vlan=0,net=169.254.0.0/16-net nic, model=virtio, vlan=0
-kernel/tmp/libguestfsp5ipPA/kernel-initrd/tmp/libguestfsp5ipPA/initrd-append panic=1 console=ttyS0 udevtimeout=300 noapic
acpi=off printk.time=1 cgroup_disable=memory selinux=0 guestfs_vmchannel=tcp:169.254.2.2:33653 TERM=xterm
3369 pts/1 S+0:00|_guestfish
④使用list-devices命令找出要挂载到的设备。⑤然后使用sfdisk-l命令获取分区表信息。这里使用的是LVM,⑥因此使用lvs命令获取逻辑卷。⑦然后使用mount命令将/dev/VolGroup/lv_root挂载到/下。⑧使用mounts命令确认是否已完成挂载。到这一步,挂载操作就完成了。⑨使用ls命令可以看到磁盘的内容。⑩使用touch命令在挂载的磁盘映像内生成文件。[11]使用edit命令后,vi启动,就可以编辑文件。[12]还可以使用cat命令来参照文件的内容。[13]如果使用upload命令,就可以将主机操作系统上的文件复制到客户端操作系统的磁盘映像内。写法为upload<主机操作系统上的文件名><客户端操作系统上的文件名>。[14]使用download命令,就可以将客户端操作系统上的文件复制到主机操作系统上。[15]最后使用umount命令卸载。[16]再使用quit命令结束guestfish。
除了这个guestfish以外,libguest-tools工具包中还有能够更简单地将guestfish作为命令使用的命令(见表5-5)。
例5-3 virt-ls
virt-ls/var/lib/libvirt/images/test.img/root
.bash_history
.bash_logout
.bash_profile
.bashrc
.cshrc
.tcshrc
anaconda-ks.cfg
foo
foo2
hoge.txt
install.log
install.log.syslog
例5-4 virt-cat
virt-cat/var/lib/libvirt/images/test.img/root/hoge.txt
aaaa
bbbb
cccc