![如何在使用 VirtualBox 启动之前写入文件系统?](https://linux22.com/image/77434/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%BD%BF%E7%94%A8%20VirtualBox%20%E5%90%AF%E5%8A%A8%E4%B9%8B%E5%89%8D%E5%86%99%E5%85%A5%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%EF%BC%9F.png)
我正在阅读 TurnKey Linux 14 文档,它指出为了预置设备的值,您必须在计算机首次启动之前将它们写入文件系统。
我能想到的最明显的方法是将虚拟机启动到 Live CD 并挂载相关文件系统以写入文件。
VirtualBox 是否包含另一种方法来执行此操作?例如,使用某种 bash 实用程序将外部文件写入现有文件系统?
我相信有一种方法可以使用 vSphere 在 VMWare 上完成此任务,这就是我问的原因。
答案1
您可以使用libguestfs 工具访问虚拟机映像中的文件系统。
mkdir ~/mnt
guestmount -a /path/to/vm-image.vdi -m /dev/sda1 ~/mnt
… edit files …
fusermount -u ~/mnt
Libguestfs使用QEMU,它可能使用KVM。 KVM 和 VirtualBox 不能同时使用。如果您正在运行 VirtualBox,请关闭它并确保kvm
加载内核模块,或者安排在没有 KVM 的情况下运行 QEMU。您可以通过LIBGUESTFS_BACKEND_SETTINGS=force_tcg
在环境中进行设置,使 QEMU 避开 KVM(速度较慢,但对于仅挂载文件系统和编辑一些文件而言并不重要) 。
答案2
如果您这样做是为了创建一个自定义的 TurnKey VM,您可以使用预先植入的值重新分配该 VM,那么还有另一个选项(对于某些人来说)可能涉及较少。
启动您的虚拟机,手动运行第一个启动脚本,根据需要创建预种子文件。然后重置该RUN_FIRSTBOOT
标志(在 中/etc/default/inithooks
),以便下次启动时(提取的虚拟设备的首次启动)重新运行首次启动脚本。