前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >虚拟机镜像管理工具-- Libguestfs

虚拟机镜像管理工具-- Libguestfs

作者头像
Laikee
发布2022-04-25 17:58:45
1.8K0
发布2022-04-25 17:58:45
举报
文章被收录于专栏:Laikee Tech Space

libguestfs是一个用来访问和修改虚拟机磁盘镜像的一个工具集

libguestfs 是一组 Linux 下的 C 语言的 API ,用来访问虚拟机的磁盘映像文件。该工具包内包含的工具有virt-cat、virt-df、virt-ls、virt-copy-in、virt-copy-out、virt-edit、guestfs、guestmount、virt-list-filesystems、virt-list-partitions等工具,具体用法也可以参看官网。该工具可以在不启动KVM guest主机的情况下,直接查看guest主机内的文内容,也可以直接向img镜像中写入文件和复制文件到外面的物理机,当然其也可以像mount一样,支持挂载操作。

安装Libguestfs

yum install libguestfs-tools

实例

如何利用Libguestfs修复受损虚拟机?

作为VMware虚拟化环境管理员,你肯定遇到过虚拟机无法启动的情况。实施排错时,你需要对虚拟机的内部进行检查。而Libguestfs Linux工具集可以在这种情况下为你提供帮助。Libguestfs允许在虚拟机上挂载任何类型的文件系统,以便修复启动故障。

利用Libguestfs找出损坏的虚拟机文件

使用Libguestfs,首先需要使用Libvirt。Libvirt是一个管理接口,可以和KVM、Xen和其他一些基于Liunx的虚拟机相互连接。Libguestfs的功能更加强大,可以打开Windows虚拟机上的文件。这意味着除了能够使用libguestfs,你还需要一些关于虚拟机操作系统内部架构的知识。但是首先你需要将虚拟机迁移到libguestfs可用的环境当中,也就是Linux环境。

1. 使用guestfish操作虚拟机

完成虚拟机磁盘镜像文件的复制之后,可以在libguestfs中使用guestfish这样的工具将其打开,这样就可以直接在vmdk文件上进行操作了。使用

guestfish -rw -a /path/to/windows.vmdk 命令来在虚拟机中创建一个连接到文件系统的交互式shell。在新出现的窗口中,你可以使用特定的命令来操作虚拟机文件。

第一个任务就是找到可用的文件系统:

代码语言:javascript
复制
\><fs> run 
\><fs> list-filesystems 
/dev/sda1: ntfs 
/dev/sda2: ntfs 

当你使用guestfish shell找到可用文件系统类型之后,就可以进行挂载了。使用命令

mount /dev/sda2 / 来挂载二个分区的内容——在Linux中是/dev/sda2——到guestfish根目录下。在guestfish中,你不能像在其他shell环境中一样操作目录。挂载的分区就是根目录,你不能使用cd命令来切换目录,这意味着所有的路径必须是完全限定路径,从根目录开始。

在guestfish shell当中可以使用像vi、ls、cat、more、download这样的命令,来查看和下载文件以及目录,输入help可以看到完整的命令信息。

在完整所有操作之后可以使用exit来关闭guestfish shell。

2. virt-rescue提供了直接访问方式

在libguestfs工具中,还有许多其他可用的工具。

virt-rescue命令——是使用正常的Linux文件系统工具来实现ad-hoc变化的最佳命令——可以在安全shell中启动虚拟机。你可以在虚拟机中操作这些文件,就像对挂载的文件系统上进行操作一样,其提供了对虚拟机内容更加直接的访问方式。 为了在虚拟机上使用virt-rescue命令进行操作,使用

virt-rescure 虚拟机名 来打开virt-rescue shell,之后就进入了 ><rescue> 模式。

如果需要在虚拟机中挂载系统文件,可以使用 fdisk -l /dev/sda 命令来查看虚拟机的分区情况,之后再使用命令

mount /dev/sda1 /sysroot 挂载你想要访问的分区。这样你就可以通过更改来修复虚拟机的内容了。 虚拟机修复之后,关闭virt-rescue shell,将虚拟机重新移动到ESXi服务器的数据存储当中。虚拟机返回原位置之后,如果之前的操作一切顺利,你就应该可以访问它了。

其他命令:

virt-df

查看磁盘占用率

代码语言:javascript
复制
[root@localhost file]# virt-df centos.img
Filesystem                           1K-blocks       Used  Available  Use%
centos.img:/dev/sda1                    495844      31950     438294    7%
centos.img:/dev/VolGroup/lv_root      28423176     721504   26257832    3%

virt-ls

查看目录下文件

代码语言:javascript
复制
[root@localhost file]# virt-ls centos.img /
.autofsck
bin
boot
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
sbin
selinux
srv
sys
tmp
usr

virt-copy-out

将镜像里的文件拷贝出来

virt-copy-out -d 虚拟机名 /etc/passwd /tmp/

virt-filesystems

virt-list-filesystems

virt-list-partitions

查看分区相关信息

代码语言:javascript
复制
[root@localhost file]# virt-filesystems  -d 虚拟机名
/dev/sda1
/dev/VolGroup/lv_root

[root@localhost file]# virt-list-filesystems  /file/centos.img
/dev/VolGroup/lv_root
/dev/sda1

[root@localhost file]# virt-list-partitions  /file/centos.img
/dev/sda1
/dev/sda2

guestmount

分区挂载

代码语言:javascript
复制
[root@localhost ~]# guestmount -a /file/centos.qcow2  -m /dev/sda2  --rw /mnt
libguestfs: error: mount_options: /dev/sda2 on / (options: ''): mount: unknown filesystem type 'LVM2_member'
guestmount: '/dev/sda2' could not be mounted.
guestmount: Did you mean to mount one of these filesystems?
guestmount:     /dev/sda1 (ext4)
guestmount:     /dev/VolGroup/lv_root (ext4)
guestmount:     /dev/VolGroup/lv_swap (swap)
[root@localhost ~]# guestmount -a /file/centos.qcow2  -m /dev/VolGroup/lv_root  --rw /mnt
fuse: mountpoint is not empty
fuse: if you are sure this is safe, use the 'nonempty' mount option
libguestfs: error: fuse_mount: /mnt: Resource temporarily unavailable
[root@localhost ~]# ls /mnt/
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
[root@localhost ~]# umount /mnt/

[root@localhost ~]# guestmount -a /file/centos.qcow2  -m /dev/VolGroup/lv_root  --rw /mnt
[root@localhost ~]# ls /mnt/
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var

[root@localhost ~]# umount /mnt/

使用libguestfs访问windows系统

代码语言:javascript
复制
[root@localhost opt]# virt-ls -a /file/win7.img c:
virt-ls: no operating system was found on this disk
If using guestfish '-i' option, remove this option and instead
use the commands 'run' followed by 'list-filesystems'.
You can then mount filesystems you want by hand using the
'mount' or 'mount-ro' command.
If using guestmount '-i', remove this option and choose the
filesystem(s) you want to see by manually adding '-m' option(s).
Use 'virt-filesystems' to see what filesystems are available.
If using other virt tools, this disk image won't work
with these tools.  Use the guestfish equivalent commands
(see the virt tool manual page).
RHEL 6 notice
-------------
libguestfs will return this error for Microsoft Windows guests if the
separate 'libguestfs-winsupport' package is not installed. If the
guest is running Microsoft Windows, please try again after installing
'libguestfs-winsupport'.

需要注意的是,上面的用法中,有两个错误的地方,一处是linux查看C分区,后面不能直接跟C:,而应该换用/ ;第二个错误是由于没有安装libguestfs-winsupport 。该工具也可以看接通过yum安装 。安装完该包后,再进行查看:

代码语言:javascript
复制
[root@localhost opt]# virt-ls -a /file/win7.img /
$Recycle.Bin
Documents and Settings
PerfLogs
Program Files
Program Files (x86)
ProgramData
Recovery
System Volume Information
Users
Windows
pagefile.sys

利用guestmount进行挂载

代码语言:javascript
复制
[root@localhost ~]# guestmount -a /file/win7.img  -m /dev/sda2  --rw /mnt
[root@localhost ~]# ls /mnt/
Documents and Settings  pagefile.sys  PerfLogs  ProgramData  Program Files
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装Libguestfs
  • 实例
    • 如何利用Libguestfs修复受损虚拟机?
      • 利用Libguestfs找出损坏的虚拟机文件
        • 1. 使用guestfish操作虚拟机
          • 2. virt-rescue提供了直接访问方式
          • 其他命令:
            • virt-df
            • virt-ls
              • virt-copy-out
                • virt-filesystems
                  • virt-list-filesystems
                    • virt-list-partitions
                      • guestmount
                        • 使用libguestfs访问windows系统
                          • 利用guestmount进行挂载
                          相关产品与服务
                          文件存储
                          文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档