如何在使用VirtualBox的Vagrant中启用双向文件夹同步?

14

我有一段时间没有在Linux上使用Vagrant了。当我开始使用新版本(Vagrant 1.8)时,遇到了一个问题:在客户机VM中创建的文件未出现在主机同步文件夹中。

如何强制Vagrant将文件从客户操作系统同步到主机操作系统?

2个回答

26
根据文档,当Vagrantfile中的config.vm.synced_folder参数的type选项未指定时,Vagrant会尝试选择最佳可用选项:

type(字符串)-同步文件夹的类型。如果未指定,则Vagrant将自动为您的环境选择最佳的同步文件夹选项。否则,您可以指定特定类型,例如“nfs”。

从1.5版本开始,Vagrant introduced了新的“rsync同步文件夹”功能。
因此,在我的情况下,会自动选择rsync类型,这是单向同步:从主机到客户机。
为了使文件夹双向同步,我在Vagrantfile中添加了明确的定义。
config.vm.synced_folder ".", "/vagrant", type: "virtualbox"

当然,这只适用于VirtualBox。
双向同步对于工作流程非常有用,在其中客户机上的应用程序创建文件,例如现代Web框架中的数据库迁移文件。
注意:当您的项目具有大量文件时,虚拟盒子同步文件夹存在已知的性能问题。

在新安装后,您可能会收到以下错误消息,创建共享文件夹: Vagrant 无法挂载 VirtualBox 共享文件夹。这通常是因为文件系统“vboxsf”不可用。此文件系统通过 VirtualBox 客户机附加组件和内核模块提供。请验证这些客户机附加组件已正确安装在客户机中。这不是 Vagrant 的错误,通常是由于有问题的 Vagrant box 引起的。 安装客户机附加组件 vagrant plugin install vagrant-vbguest - Alex Hendren
@Alex:对我没用。我得到了这个错误信息:“无法解决依赖项:用户请求 'vagrant-hostmanager (= 1.8.6)'”。 - geoidesic
2
@AlexHendren 在2018年,您可以使用vagrant-vbguest插件,在客户系统上自动安装主机的VirtualBox Guest Additions。通过vagrant plugin install vagrant-vbguest进行安装。 - Vadim Kotov
如果对任何人有帮助,在我的CentOS 7虚拟机上,我需要vagrant ssh进入虚拟机并运行sudo yum -y update,然后关闭ssh会话并运行vagrant reload才能解决某种内核头问题,以使双向同步目录与vagrant和centos7一起工作。这在我最后一次创建新虚拟机时不是问题(大约在2018年中),但现在需要这样做。 - codeAndStuff

2

感谢这篇文章,正是我过去几天一直在寻找的内容!!!我在使用Laravel 5、homestead和vagrant时遇到了问题。虽然有很多答案,但没有一个适合我。我还在yaml文件的文件夹部分中添加了rsync,但也必须删除它。经过这两个更改,文件共享终于在主机和客户端之间同步了。

require File.expand_path(File.dirname(__FILE__) + '/scripts/homestead.rb')

config.vm.synced_folder ".", "/vagrant", type: "virtualbox"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

这里是我对Vagrantfile进行更改的地方。

以上内容涉及IT技术,意思是在虚拟机中将当前目录同步到名为“/vagrant”的目录下,并使用VirtualBox作为类型。第二段代码是Vagrant配置文件的API版本,用于配置Vagrant环境的设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接