========================================
 obsync -- The object synchronizer tool
========================================

.. program:: obsync

Synopsis
========

| **obsync** [ *options* ] *source-url* *destination-url*


Description
===========

**obsync** is an object syncrhonizer tool designed to transfer objects
between different object storage systems. Similar to rsync, you
specify a source and a destination, and it will transfer objects
between them until the destination has all the objects in the
source. Obsync will never modify the source -- only the destination.

By default, obsync does not delete anything. However, by specifying
``--delete-after`` or ``--delete-before``, you can ask it to delete
objects from the destination that are not in the source.


Target types
============

Obsync supports S3 via ``libboto``. To use the s3 target, your URL
should look like this: ``s3://host-name/bucket-name``

Obsync supports storing files locally via the ``file://`` target. To
use the file target, your URL should look like this:
``file://directory-name``

Alternately, give no prefix, like this: ``./directory-name``

Obsync supports storing files in a RADOS Gateway backend via the
``librados`` Python bindings. To use the ``rgw` target, your URL
should look like this: ``rgw:ceph-configuration-path:rgw-bucket-name``


Options
=======

.. option:: -h, --help

   Display a help message

.. option:: -n, --dry-run

   Show what would be done, but do not modify the destination.

.. option:: -c, --create-dest

   Create the destination if it does not exist.

.. option:: --delete-before

   Before copying any files, delete objects in the destination that
   are not in the source.

.. option:: -L, --follow-symlinks

   Follow symlinks when dealing with ``file://`` targets.

.. option:: --no-preserve-acls

   Don't preserve ACLs when copying objects.

.. option:: -v, --verbose

   Be verbose.

.. option:: -V, --more-verbose

   Be really, really verbose (developer mode)

.. option:: -x SRC=DST, --xuser SRC=DST

   Set up a user translation. You can specify multiple user
   translations with multiple ``--xuser`` arguments.

.. option:: --force

   Overwrite all destination objects, even if they appear to be the
   same as the source objects.


Environment variables
=====================

.. envvar:: SRC_AKEY

   Access key for the source URL

.. envvar:: SRC_SKEY

   Secret access key for the source URL

.. envvar:: DST_AKEY

   Access key for the destination URL

.. envvar:: DST_SKEY

   Secret access key for the destination URL

.. envvar:: AKEY

   Access key for both source and dest

.. envvar:: SKEY

   Secret access key for both source and dest

.. envvar:: DST_CONSISTENCY

   Set to 'eventual' if the destination is eventually consistent. If the destination
   is eventually consistent, we may have to retry certain operations multiple times.


Examples
========

::

        AKEY=... SKEY=... obsync -c -d -v ./backup-directory s3://myhost1/mybucket1

Copy objects from backup-directory to mybucket1 on myhost1::

        SRC_AKEY=... SRC_SKEY=... DST_AKEY=... DST_SKEY=... obsync -c -d -v s3://myhost1/mybucket1 s3://myhost1/mybucket2

Copy objects from mybucket1 to mybucket2


Availability
============

**obsync** is part of the Ceph distributed file system. Please refer
to the Ceph wiki at http://ceph.newdream.net/wiki for more
information.
