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-devices、list-partitions、lvs、pvs、vfs-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
您可以使用 ls、ll 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