在运行CoreOS VM的vagrant的Windows上使用rsync

man*_*her 5 windows rsync cygwin vagrant coreos

我正在使用Windows 8.1 Pro pc运行vagrant和cygwin的rsync.

我这样配置:

config.vm.synced_folder "../sharedFolder", "/vagrant_data", type: "rsync"
Run Code Online (Sandbox Code Playgroud)

当我执行时,vagrant up我收到以下错误:

C:\dev\vagrantBoxes\coreOS>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'yungsang/coreos' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: core
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
==> default: Rsyncing folder: /c/dev/vagrantBoxes/sharedFolder/ => /vagrant_data
There was an error when attempting to rsync a synced folder.
Please inspect the error message below for more info.

Host path: /c/dev/vagrantBoxes/sharedFolder/
Guest path: /vagrant_data
Command: rsync --verbose --archive --delete -z --copy-links --chmod=ugo=rwX --no-perms --no-owner --no-group --rsync-path sudo rsync -e ssh -p 2222 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/d
ev/null -i 'C:/Users/aaron.axisa/.vagrant.d/insecure_private_key' --exclude .vagrant/ /c/dev/vagrantBoxes/sharedFolder/ core@127.0.0.1:/vagrant_data
Error: Warning: Permanently added '[127.0.0.1]:2222' (RSA) to the list of known hosts.
rsync: change_dir "/c/dev/vagrantBoxes/sharedFolder" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at /usr/src/ports/rsync/rsync-3.0.9-1/src/rsync-3.0.9/main.c(1052) [sender=3.0.9]
Run Code Online (Sandbox Code Playgroud)

我认为它是如何将目录路径更改为/ c/dev而不是C:\ dev的问题

小智 8

就像我在github-issue中评论的那样,你的Vagrantfile中的以下行肯定会解决你的问题

ENV["VAGRANT_DETECTED_OS"] = ENV["VAGRANT_DETECTED_OS"].to_s + " cygwin"

因为它在您的Vagrantfile中是本地的,所以源文件可以保持不变


小智 1

根据我的测试,如果您使用 cygwin,请使用 @osroot25 的解决方案。

如果您使用的是 cwRsync 并且没有cygwin ,则除了将源代码编辑为 @Andrew Myers 详细信息之外,没有使用 Vagrant 的解决方法。使用 Vagrant v1.6.5 进行测试。

我的解决方法是完全绕过 Vagrant 并直接使用 cwRsync。这对我有用,因为我正在同步一个几乎不改变的文件夹。我可能会在一天之内对其进行多次更改(因此我每次都必须记住下面的步骤 2),但随后我几周(或几个月)都没有进行任何更改。请记住,要使用 cwRsync,您必须编辑并使用 cwrsync.cmd 脚本。尝试直接访问 rsync.exe 命令或将其添加到您的路径将失败。步骤 1:我将以下行添加到 cwrsync.cmd 的末尾(在已安装的文件夹中):

rsync -re "ssh -p 2222" /cygdrive/b/VCS/packages/ vagrant@localhost:packages --exclude ".git/"

步骤 2:我打开了一个单独的 cmd 窗口,我使用完整路径运行 cwrsync.cmd。然后,如果我需要将更改同步到虚拟机上,我会激活该窗口,向上箭头,返回并立即更新!

修改ENV以通过@osroot25设置cygwin修复不适用于cwRsync,因为当您强制cygwin检测时,“vagrant ssh”命令将不起作用,因为它需要cygwin中的cygpath命令,而您没有,所以您不能ssh 进入虚拟机。如果您直接使用带有所有正确选项的 ssh 命令,则可以。