26
2019
03

guestfish

HQY



guestfish


guestfish程序是 libguestfs 项目的一个工具,它使你可以修改虚拟机镜像里的文件。

[注意]注意

guestfish并不直接mount镜像文件到本地文件系统,而是提供一个shell接口,你可以通过这个shell接口对镜像内文件做查看,编辑,删除操作,诸如 touch,chmod, 和 rm的 guestfish 命令,就像普通bash命令一样。

 guestfish 修改示例:

有时,你必须删除虚拟机镜像内任何包含虚拟机安装时分配给虚拟机网卡的MAC的文件,因为用镜像文件创建新虚拟机时网卡MAC地址和创建镜像的虚拟机并不一样。这个示例通过删除/etc/udev/rules.d/70-persistent-net.rules文件以及删除/etc/sysconfig/network-scripts/ifcfg-eth0文件中HWADDR一行来演示了如何使用guestfish删除镜像中和原MAC地址相关联的地方。

假设你有一个文件名为centos63_desktop.img的 CentOS qcow2 格式的虚拟机镜像。用root用户挂载这个镜像为可读可写模式,如下:

# guestfish --rw -a centos63_desktop.img

Welcome to guestfish, the libguestfs filesystem interactive shell for
editing virtual machine filesystems.

Type: 'help' for help on commands
      'man' to read the manual
      'quit' to quit the shell

><fs>

通过上面命令,进入了 guestfish 会话,注意 guestfish提示符像一条鱼的样子: > <fs>.

在做任何操作之前,必须先在 guestfish提示符运行run命令。它会启动一个虚拟机,用于完成我们所以的对文件的操作。

><fs> run

通过list-filesystems命令,我们可查看镜像内的文件系统列表:

><fs> list-filesystems
/dev/vda1: ext4
/dev/vg_centosbase/lv_root: ext4
/dev/vg_centosbase/lv_swap: swap

我们必须挂载包含根分区的那个逻辑卷:

><fs> mount /dev/vg_centosbase/lv_root /

下一步,我们想删除一个文件,使用guestfish 命令 rm ,就像使用普通shell命令一样。

><fs> rm /etc/udev/rules.d/70-persistent-net.rules

我们想编辑 ifcfg-eth0 文件以便删除 HWADDR 这一行。edit命令将文件拷贝文件到主机,调用编辑器打开文件,编辑完后将它又拷贝回原来的位置。

><fs> edit /etc/sysconfig/network-scripts/ifcfg-eth0

如果你想修改镜像让他在启动时加载8021q内核模块,你必须在/etc/sysconfig/modules/目录下简历一个可执行脚本。你可以使用touchguestfish命令创建一个空文件,然后使用edit 命令编辑它,然后使用 chmod 命令让它具有可执行权限。

><fs> touch /etc/sysconfig/modules/8021q.modules
><fs> edit /etc/sysconfig/modules/8021q.modules

我们添加以下一行到文件内,然后保存:

modprobe 8021q

然后设置文件可执行权限:

><fs> chmod 0755 /etc/sysconfig/modules/8021q.modules

一切都完成后,我们可以使用 exit命令退出guestfish提示符:

><fs> exit

 guestfish更多功能

guestfish有大量庞大的功能,完全介绍它查出了本文档的功能范围。因此,我们推荐你阅读 guestfs-recipes 文档页面感知通过这些工具都能做什么。


HQY
« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。