website/www: feature preview blog post: rsync
This commit is contained in:
parent
06a7c88316
commit
0e3830932e
|
@ -20,4 +20,5 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
||||||
config.vm.box = "precise64"
|
config.vm.box = "precise64"
|
||||||
config.vm.network "private_network", ip: "33.33.33.10"
|
config.vm.network "private_network", ip: "33.33.33.10"
|
||||||
config.vm.provision "shell", inline: $script, privileged: false
|
config.vm.provision "shell", inline: $script, privileged: false
|
||||||
|
config.vm.synced_folder ".", "/vagrant", type: "rsync"
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,147 @@
|
||||||
|
---
|
||||||
|
page_title: "Vagrant 1.5 Feature Preview: Rsync Synced Folders"
|
||||||
|
title: "Feature Preview: Rsync Synced Folders"
|
||||||
|
author: Mitchell Hashimoto
|
||||||
|
author_url: https://github.com/mitchellh
|
||||||
|
---
|
||||||
|
|
||||||
|
Vagrant 1.5 is going to be the biggest release of Vagrant since 1.1,
|
||||||
|
with dozens of new features and improvements coming in. Don't worry,
|
||||||
|
we've also obsessed over [stability](/blog/stability-and-upgrades.html),
|
||||||
|
so we expect it'll be one of the most stable upgrades, too.
|
||||||
|
|
||||||
|
Because Vagrant 1.5 will be so feature-packed, we're doing a series of
|
||||||
|
blog posts that highlight the upcoming features so you know what to look
|
||||||
|
forward to and how to use them. These posts will be
|
||||||
|
weekly on Wednesdays, so keep an eye out for them!
|
||||||
|
|
||||||
|
We're going to kick off the series by introducing
|
||||||
|
[rsync](http://en.wikipedia.org/wiki/Rsync) synced folders. These synced
|
||||||
|
folders offer incredible I/O performance at the expense of a little bit of
|
||||||
|
latency. Read on to learn more.
|
||||||
|
|
||||||
|
READMORE
|
||||||
|
|
||||||
|
### Introducing Rsync Synced Folders
|
||||||
|
|
||||||
|
Rsync synced folders use [rsync](http://rsync.samba.org/) to sync files
|
||||||
|
to the guest machine. They are configured just as easily as any other synced folder,
|
||||||
|
by just specifying the "rsync" type:
|
||||||
|
|
||||||
|
<pre class="prettyprint">
|
||||||
|
config.vm.synced_folder ".", "/vagrant", type: "rsync"
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
As long as <code>rsync</code> is installed in both the host and the guest,
|
||||||
|
this will _just work_. Since rsync is a standard utility for Mac and most
|
||||||
|
Linux distributions, this just works most of the time! For Windows users,
|
||||||
|
[msysgit](https://code.google.com/p/msysgit/),
|
||||||
|
[MinGW](http://www.mingw.org/),
|
||||||
|
and [Cygwin](http://www.cygwin.org)
|
||||||
|
all provide rsync.
|
||||||
|
|
||||||
|
As an added benefit, Vagrant 1.5 knows how to install rsync for most
|
||||||
|
major operating systems, and will do this automatically for you by
|
||||||
|
default within the guest machine if `rsync` cannot be found.
|
||||||
|
|
||||||
|
When you execute `vagrant up` or `vagrant reload`, Vagrant will sync
|
||||||
|
the data to the guest machine. In addition to these commands, Vagrant
|
||||||
|
has a new command `vagrant rsync` that will only sync rsync folders
|
||||||
|
that are defined.
|
||||||
|
|
||||||
|
Unlike VM shared folders and NFS, rsync is a one-time sync from the
|
||||||
|
host machine to the guest machine. Changes to the folder after the
|
||||||
|
sync is complete won't be visible in the guest machine until you
|
||||||
|
force another sync with a command such as `vagrant rsync`. Luckily,
|
||||||
|
Vagrant 1.5 will provide a way to auto-sync rsync synced folders.
|
||||||
|
|
||||||
|
### Auto-Syncing
|
||||||
|
|
||||||
|
By default, the folder syncing only happens when you manually execute
|
||||||
|
a `vagrant up`, `vagrant reload`, or `vagrant rsync`. Part of the magic
|
||||||
|
of Vagrant, though, has always been for changes to just appear in the
|
||||||
|
guest machine.
|
||||||
|
|
||||||
|
Rsync synced folders don't have this magic property by default because
|
||||||
|
unlike VM shared folders or NFS, rsync doesn't continue to run in the
|
||||||
|
background to propagate any changes. And Vagrant itself doesn't keep any
|
||||||
|
background processes running after it finishes executing, so by default
|
||||||
|
changes won't be seen.
|
||||||
|
|
||||||
|
But because this is such a useful feature of Vagrant, Vagrant 1.5 has a
|
||||||
|
`vagrant rsync-auto` command. This command runs forever (until you Ctrl-C),
|
||||||
|
watches any defined rsync synced folders, and automatically syncs changes
|
||||||
|
as you make them.
|
||||||
|
|
||||||
|
```
|
||||||
|
$ vagrant rsync-auto
|
||||||
|
==> default: Watching: /home/mitchellh/work/frontend
|
||||||
|
default: Changes! Syncing /vagrant
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
This command uses system-specific APIs to detect file changes, rather than
|
||||||
|
polling the file system. Therefore, this command sits idle most of the time
|
||||||
|
and consumes only a small amount of RAM.
|
||||||
|
|
||||||
|
Changes are usually picked up in less than a second, and Vagrant only
|
||||||
|
syncs changes over a compressed connection to use as little bandwidth as
|
||||||
|
possible. As a result, changes appear in the guest machine quite fast.
|
||||||
|
|
||||||
|
We realize this workflow is a bit different than what you're used to
|
||||||
|
with Vagrant, but it is a minor change necessitated by the technical
|
||||||
|
differences of rsync versus other available synced folder mechanisms.
|
||||||
|
|
||||||
|
### Performance and Benefits
|
||||||
|
|
||||||
|
Because `rsync` copies the files directly onto the remote filesystem,
|
||||||
|
performance is _fantastic_. For a comparison to NFS or VM shared folders,
|
||||||
|
see my personal blog post
|
||||||
|
[comparing filesystem performance in virtual machines](http://mitchellh.com/comparing-filesystem-performance-in-virtual-machines).
|
||||||
|
With rsync, you'll see the "VirtualBox native" performance numbers.
|
||||||
|
|
||||||
|
Unlike NFS and VM shared folders, filesystem notifications work in the
|
||||||
|
guest machine with rsync synced folders. So, if you use
|
||||||
|
[Guard](http://guardgem.org/) or something like it, it will now work with
|
||||||
|
Vagrant!
|
||||||
|
|
||||||
|
Also unlike NFS or VM shared folders, filesystem permissions are not
|
||||||
|
tampered with in the guest machine. NFS and VM shared folders both change
|
||||||
|
the way file permissions work that is fine most of the time, but can be
|
||||||
|
really disruptive for some workflows. With rsync, because files are just copied
|
||||||
|
onto the guest machine, permissions work as you would expect.
|
||||||
|
|
||||||
|
Rsync synced folders only requires `rsync` to be available in the guest
|
||||||
|
machine, so it works on virtual machines that don't have guest additions
|
||||||
|
installed. This is great for specialized operating systems where guest
|
||||||
|
additions that require invasive kernel modules won't compile, but a
|
||||||
|
relatively standard C program such as rsync will.
|
||||||
|
|
||||||
|
For Windows users, rsync finally provides a cross-platform alternative
|
||||||
|
to VM shared folders that works out of the box with Vagrant. While NFS
|
||||||
|
is available for Windows, Vagrant doesn't currently work with it, so
|
||||||
|
Vagrant would fall back to VM shared folders.
|
||||||
|
|
||||||
|
### Choices, choices, choices!
|
||||||
|
|
||||||
|
With the introduction of rsync synced folders, users of Vagrant now
|
||||||
|
have three choices out of the box for synced folders: VM shared folders,
|
||||||
|
NFS, or rsync.
|
||||||
|
|
||||||
|
NFS and VM shared folders are _not deprecated in any way_ and will be
|
||||||
|
fully supported and improved for the forseeable future. Vagrant has always
|
||||||
|
been about choice and working with the technologies that work best for you
|
||||||
|
and your team and rsync is now another really great choice Vagrant offers you.
|
||||||
|
|
||||||
|
### What's Next?
|
||||||
|
|
||||||
|
Rsync synced folders will be available out of the box with Vagrant 1.5.
|
||||||
|
They are also
|
||||||
|
[fully documented](https://github.com/mitchellh/vagrant/blob/master/website/docs/source/v2/synced-folders/rsync.html.md)
|
||||||
|
already, so the documentation will cover all aspects of rsync synced
|
||||||
|
folders immediately when 1.5 is released.
|
||||||
|
|
||||||
|
And that is only one of dozens of features of equal or greater caliber
|
||||||
|
coming to Vagrant 1.5. Stay tuned next week when we cover another
|
||||||
|
feature! Vagrant 1.5 will have quite a few surprises, we're sure,
|
||||||
|
that should make both new and experienced Vagrant users very happy.
|
Loading…
Reference in New Issue