16.4. guestfish Shell
guestfish 是一个交互式 shell,您可以从命令行使用或从 shell 脚本访问 guest 虚拟机文件系统。libguestfs API 的所有功能都可从 shell 访问。
要开始查看或编辑虚拟机磁盘镜像,请运行以下命令,替换所需磁盘镜像的路径:
guestfish --ro -a /path/to/disk/image
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 时,它将显示这个提示:
在提示符处,键入 run 来发起库并附加磁盘镜像。在第一次完成后最多可能需要 30 秒。随后启动将更快地完成。
注意
libguestfs 将使用硬件虚拟化加速,如 KVM(如果可用)来加快此过程。
输入了 run 命令后,可以使用其他命令,如以下部分所示。
16.4.1. 使用 guestfish 查看文件系统 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
这部分提供有关使用 guestfish 查看文件的信息。
16.4.1.1. 手动列表和查看 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
list-filesystems 命令将列出由 libguestfs 找到的文件系统。此输出显示了 Red Hat Enterprise Linux 4 磁盘镜像:
此输出显示 Windows 磁盘镜像:
><fs> run ><fs> list-filesystems /dev/vda1: ntfs /dev/vda2: ntfs
><fs> run
><fs> list-filesystems
/dev/vda1: ntfs
/dev/vda2: ntfs
其他有用的命令有 list-devices、list-partitions、lvs、pvs、vfs-type 和 文件。您可以通过键入 help 命令获取有关任何命令的更多信息和帮助,如下所示:
要查看文件系统的实际内容,必须首先挂载它。这个示例使用前面输出中显示的 Windows 分区之一(
/dev/vda2
),在这种情况下,已知与 C:\ 驱动器对应:
您可以使用 ls、ll ll、cat、下载 和 tar 等 guestfish 命令来查看和下载文件和目录。
注意
此 shell 中当前工作目录没有概念。与普通 shell 不同,您无法使用 cd 命令来更改目录。所有路径都必须使用正斜杠(/)字符在顶部开始。使用 Tab 键完成路径。
要退出 guestfish shell,请按 exit 或按 Ctrl+d。
16.4.1.2. 使用 guestfish 检查 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
若要让 guestfish 本身检查映像并挂载文件系统,而不必手动列出和挂载文件系统。要做到这一点,请在命令行中添加 -i 选项:
由于 guestfish 需要启动 libguestfs 后端才能执行检查和挂载,因此使用 -i 选项时不需要 运行命令。i 选项适用于许多通用的 Linux 和 Windows 客户机虚拟机。
16.4.1.3. 按名称访问客户机虚拟机 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
当您指定名称给 libvirt(换句话说,如 virsh list --all)中时,可以从命令行访问 guest 虚拟机。使用 -d 选项按名称访问客户端虚拟机,并使用 -i 选项或不使用 -i 选项:
guestfish --ro -d GuestName -i
guestfish --ro -d GuestName -i