16.4. guestfish Shell


guestfish 是一个交互式 shell,您可以从命令行使用或从 shell 脚本访问 guest 虚拟机文件系统。libguestfs API 的所有功能都可从 shell 访问。
要开始查看或编辑虚拟机磁盘镜像,请运行以下命令,替换所需磁盘镜像的路径:
guestfish --ro -a /path/to/disk/image
--ro 表示磁盘镜像是以只读方式打开。这个模式始终安全,但不允许写入访问。只有当您 确定 guest 虚拟机未在运行时,或者磁盘镜像未附加到实时客户端虚拟机时,才省略这个选项。无法使用 libguestfs 编辑 live 客户机虚拟机,并尝试造成不可逆向的磁盘损坏。
/path/to/disk/image 是磁盘的路径。这可以是文件、主机物理机器逻辑卷(如 /dev/VG/LV)、主机物理设备(/dev/cdrom)或 SAN LUN(/dev/sdf3)。
注意
libguestfs 和 guestfish 不需要 root 权限。如果被访问的磁盘镜像需要 root 读取或写入,则只需要以 root 身份运行它们。
当您以交互方式启动 guestfish 时,它将显示这个提示:
 guestfish --ro -a /path/to/disk/image

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>
在提示符处,键入 run 来发起库并附加磁盘镜像。在第一次完成后最多可能需要 30 秒。随后启动将更快地完成。
注意
libguestfs 将使用硬件虚拟化加速,如 KVM(如果可用)来加快此过程。
输入了 run 命令后,可以使用其他命令,如以下部分所示。

16.4.1. 使用 guestfish 查看文件系统

这部分提供有关使用 guestfish 查看文件的信息。

16.4.1.1. 手动列表和查看

list-filesystems 命令将列出由 libguestfs 找到的文件系统。此输出显示了 Red Hat Enterprise Linux 4 磁盘镜像:
><fs> run
><fs> list-filesystems
/dev/vda1: ext3
/dev/VolGroup00/LogVol00: ext3
/dev/VolGroup00/LogVol01: swap
此输出显示 Windows 磁盘镜像:
><fs> run
><fs> list-filesystems
/dev/vda1: ntfs
/dev/vda2: ntfs
其他有用的命令有 list-deviceslist-partitionslvspvsvfs-type文件。您可以通过键入 help 命令获取有关任何命令的更多信息和帮助,如下所示:
><fs> help vfs-type
 NAME
    vfs-type - get the Linux VFS type corresponding to a mounted device

 SYNOPSIS
     vfs-type device

 DESCRIPTION
    This command gets the file system type corresponding to the file system on
    "device".

    For most file systems, the result is the name of the Linux VFS module
    which would be used to mount this file system if you mounted it without
    specifying the file system type. For example a string such as "ext3" or
    "ntfs".
要查看文件系统的实际内容,必须首先挂载它。这个示例使用前面输出中显示的 Windows 分区之一(/dev/vda2),在这种情况下,已知与 C:\ 驱动器对应:
><fs> mount-ro /dev/vda2 /
><fs> ll /
total 1834753
 drwxrwxrwx  1 root root       4096 Nov  1 11:40 .
 drwxr-xr-x 21 root root       4096 Nov 16 21:45 ..
 lrwxrwxrwx  2 root root         60 Jul 14  2009 Documents and Settings
 drwxrwxrwx  1 root root       4096 Nov 15 18:00 Program Files
 drwxrwxrwx  1 root root       4096 Sep 19 10:34 Users
 drwxrwxrwx  1 root root      16384 Sep 19 10:34 Windows
您可以使用 lsll ll、cat下载tar guestfish 命令来查看和下载文件和目录。
注意
此 shell 中当前工作目录没有概念。与普通 shell 不同,您无法使用 cd 命令来更改目录。所有路径都必须使用正斜杠(/)字符在顶部开始。使用 Tab 键完成路径。
要退出 guestfish shell,请按 exit 或按 Ctrl+d

16.4.1.2. 使用 guestfish 检查

若要让 guestfish 本身检查映像并挂载文件系统,而不必手动列出和挂载文件系统。要做到这一点,请在命令行中添加 -i 选项:
guestfish --ro -a /path/to/disk/image -i

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

 Operating system: Red Hat Enterprise Linux AS release 4 (Nahant Update 8)
 /dev/VolGroup00/LogVol00 mounted on /
 /dev/vda1 mounted on /boot

 ><fs> ll /
 total 210
 drwxr-xr-x. 24 root root  4096 Oct 28 09:09 .
 drwxr-xr-x  21 root root  4096 Nov 17 15:10 ..
 drwxr-xr-x.  2 root root  4096 Oct 27 22:37 bin
 drwxr-xr-x.  4 root root  1024 Oct 27 21:52 boot
 drwxr-xr-x.  4 root root  4096 Oct 27 21:21 dev
 drwxr-xr-x. 86 root root 12288 Oct 28 09:09 etc
 [etc]
由于 guestfish 需要启动 libguestfs 后端才能执行检查和挂载,因此使用 -i 选项时不需要 运行命令i 选项适用于许多通用的 Linux 和 Windows 客户机虚拟机。

16.4.1.3. 按名称访问客户机虚拟机

当您指定名称给 libvirt(换句话说,如 virsh list --all)中时,可以从命令行访问 guest 虚拟机。使用 -d 选项按名称访问客户端虚拟机,并使用 -i 选项或不使用 -i 选项:
guestfish --ro -d GuestName -i
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.