dwww Home | Manual pages | Find package

DOVEADM-BACKUP(1)                   Dovecot                   DOVEADM-BACKUP(1)

NAME
       doveadm-backup - Dovecot's one-way mailbox synchronization feature

SYNOPSIS
       doveadm  [GLOBAL  OPTIONS]  sync  [-u user | -A | -F file | --no-userdb-
       lookup] [-S socket_path] [-1fPR] [-l secs] [-r rawlog path] [-m mailbox]
       [-g mailbox guid] [-n namespace | -N] [-x exclude] [-a all mailbox]  [-s
       state]  [-T  secs]  [-t start date] [-e end date] [-O sync flag] [-I max
       size] [-p setting=value] destination

       doveadm [GLOBAL OPTIONS] backup [-u user | -A | -F file  |  --no-userdb-
       lookup]  [-S socket_path] [-fPR] [-l secs] [-r rawlog path] [-m mailbox]
       [-g mailbox guid] [-n namespace | -N] [-x exclude] [-a all mailbox]  [-s
       state]  [-T  secs]  [-t start date] [-e end date] [-O sync flag] [-I max
       size] [-p setting=value] destination

DESCRIPTION
       dsync (short for doveadm sync) is Dovecot's mailbox synchronization fea-
       ture. It can be used for several different use cases:  Two-way  synchro-
       nization  of mailboxes, creating backups of mails, and convert mailboxes
       from/to different mailbox formats. All of these can be used  within  the
       same  server  or  between  different  servers (via ssh(1) or tcp connec-
       tions). Remote mailboxes can be accessed also via IMAP  protocol,  which
       allows using dsync for mailbox migration purposes.

       You can run dsync in one of three modes:

       •   doveadm  backup  performs  one-way synchronization. If there are any
           changes in the destination they will be reverted, so the destination
           will look exactly like the source.

       •   doveadm sync performs two-way synchronization. It merges all changes
           without losing anything. Both the  mailboxes  will  end  up  looking
           identical after the synchronization is finished.

       •   doveadm  sync  -1 performs one-way synchronization. If there are any
           changes in the destination, they  will  be  preserved  and  the  new
           changes  will  be  merged  on top of them. This merging doesn't cur-
           rently work perfectly, so its use should be limited. Its  main  pur-
           pose  is  that  during  mailbox migration you can run doveadm backup
           multiple times, then switch mails to be delivered to the new mailbox
           and run doveadm sync -1 once more to transfer  any  last  new  mails
           from the old mailbox.

           •   The one-way algorithm is the same as two-way dsync algorithm ex-
               cept  the  source  account  is not modified. It fetches the mes-
               sage's GUID (Global UID), which is used  to  identify  any  con-
               flicting UIDs in messages. As long as the source and destination
               side  has  matching UID<->GUID mapping, those emails are assumed
               to be synced correctly.  Only  after  the  first  mismatch  will
               changes begin.

           Example:  Source  mailbox  has  messages UID 1..5; source mailbox is
           sync'd using doveadm backup to the destination. Subsequently, UID  6
           is  delivered  to  the source mailbox and UID 1 is expunged from the
           destination mailbox. In this example, UID 1 is kept removed (in des-
           tination) because UID 1..5 have identical  Date+Message-ID  headers.
           UID 6 is not seen in destination so it's copied.

           If both source and destination have UID 6, but the messages are dif-
           ferent,  the  headers  don't match and both the messages are kept in
           the destination but they're given new UIDs 7 and 8 just to  be  sure
           any  client didn't get confused about what UID 6 actually was. Thus,
           one-way sync begins to quickly diverge from the source mailbox  once
           changes start to occur on either side; one-way sync should therefore
           normally  only be used within a short period of time after a doveadm
           backup or doveadm sync command was used  to  synchronize  the  mail-
           boxes.

       There are also three different synchronization algorithms:

       •   Full  synchronization  (-f parameter) scans through all the messages
           in all the mailboxes. This guarantees that everything will  be  syn-
           chronized,  but it's unnecessarily slow for incremental synchroniza-
           tion.

       •   Fast synchronization (default) first attempts to find mailboxes that
           have changed, and synchronize only those. This is done  by  checking
           the  mailboxes'  metadata  (NEXTUID and HIGHESTMODSEQ). Usually this
           works fine, especially with one-way  synchronization,  but  if  both
           sides do exactly the same number of changes, the metadata may end up
           containing the same values even if the changes were different.

       •   Stateful synchronization (-s parameter) is the most efficient way to
           synchronize  mailboxes.  It relies on having the earlier dsync run's
           state saved somewhere and being passed to the next dsync run.  Based
           on  this  state  dsync can send only the changes that happened after
           the previous dsync run. As long as the state or the mailboxes aren't
           corrupted this algorithm should work perfectly.

       The syncing is done as perfectly as possible: an IMAP or a  POP3  client
       shouldn't  be  able to notice any differences between the two mailboxes.
       Two-way syncing means that it's safe to do any kind of modifications  in
       both  sides, and dsync will merge the changes without losing any changes
       done on either side. This is possible because dsync can access Dovecot's
       index logs that keep track of changes. It's of course possible  to  have
       conflicts  during  merging,  these  are  resolved in a safe way. See the
       dsync design document for more information.

       dsync uses the same configuration files as  the  rest  of  Dovecot  (via
       doveconf(1)). The entire configuration can be changed by giving -c para-
       meter  to  another configuration file, or using -o parameter to override
       specific settings. When executing a remote dsync program  it  works  the
       same way: it uses its own local configuration.

       dsync  can  be run completely standalone. It doesn't require any Dovecot
       server processes to be running, except when using -u parameter to  do  a
       userdb lookup from auth process.

       dsync  can  sync either one or multiple users using the -u or -A parame-
       ters.

GLOBAL OPTIONS
       Global doveadm(1)

       -D

           Enables verbosity and debug messages.

       -O

           Do not read any config file, just use  defaults.  The  dovecot_stor-
           age_version setting defaults to the latest version, but can be over-
           ridden with

       -k

           Preserve entire environment for doveadm, not just import_environment
           setting.

       -v

           Enables verbosity, including progress counter.

       -i instance-name

           If using multiple Dovecot instances, choose the config file based on
           this instance name.

           See instance_name setting for more information.

       -c config-file

           Read  configuration  from the given config-file. By default it first
           reads config socket,  and  then  falls  back  to  /etc/dovecot/dove-
           cot.conf.  You can also point this to config socket of some instance
           running compatible version.

       -o setting=value

           Overrides the configuration setting  from  /etc/dovecot/dovecot.conf
           and  from the userdb with the given value. In order to override mul-
           tiple settings, the -o option may be specified multiple times.

OPTIONS
       -A

           If the -A option is present, the command will be performed  for  all
           users.  Using  this  option  in  combination  with system users from
           userdb { driver = passwd } is not recommended, because  it  contains
           also  users  with  a  lower  UID  than  the  one configured with the
           first_valid_uid setting.

           When  the  SQL  userdb  module  is  used,   make   sure   that   the
           userdb_sql_iterate_query  setting setting matches your database lay-
           out.

           When using the LDAP userdb module, make sure that the  userdb_fields
           setting  and  userdb_ldap_iterate_fields setting settings match your
           LDAP schema. Otherwise doveadm(1) will be unable to iterate over all
           users.

       -F file

           Execute the command for all the users in the file. This  is  similar
           to  the -A option, but instead of getting the list of users from the
           userdb, they are read from the given file.  The  file  contains  one
           username per line.

       -1

           Do one-way synchronization instead of two-way synchronization.

       -f

           Do full synchronization.

       -N

           Synchronize  all  the  available namespaces. By default only the in-
           box=yes namespace is synchronized.

       --no-userdb-lookup

           Do not perform userdb lookup. Use the USER environment  variable  to
           specify the username.

       -P

           Run  a  doveadm-purge(1)  for the destination (remote) storage after
           synchronization.

       -R

           Do a reverse sync. Normally, messages would be pushed from the local
           system to the destination (remote). This option reverses  the  flow,
           and will instead pull messages from the remote to the local storage.

       -S socket_path

           The option's argument is either an absolute path to a local UNIX do-
           main  socket,  or  a  hostname and port (hostname:port), in order to
           connect a remote host via a TCP socket.

           This allows an administrator to  execute  doveadm(1)  mail  commands
           through the given socket.

       -T secs

           Specify  the  time  in  seconds, how long doveadm(1) should wait for
           stalled I/O operations. The default timeout is 600 seconds.

       -p setting=value

           Overrides the configuration setting for source storage.

       -p setting=value

           Overrides the configuration setting for source storage.

       -g mailbox_guid

           Same as -m, but find the mailbox to be synchronized by its GUID  in-
           stead of by name.

       -l secs

           Lock  the  dsync  for this user. Wait for maximum secs before giving
           up. This parameter should be used to avoid broken synchronization if
           it's possible that dsync is being  run  concurrently  for  the  same
           user.

       -m mailbox

           Synchronize only this mailbox name.

       -n namespace

           Synchronize only the specified namespace. This parameter can be used
           multiple times.

       -a all mailbox

           Name  for  the  "All mails" virtual mailbox. If specified, mails are
           attempted to be copied from this mailbox instead of being saved sep-
           arately. This may reduce the total disk space usage as well as  disk
           IO.

       -t start date

           Skip  any mails whose received-timestamp is older than the specified
           time.

       -e end date

           Skip any mails whose received-timestamp is newer than the  specified
           time.

       -O sync flag

           Sync  only  mails that have the specified flag. If the flag name be-
           gins with "-", sync all mails except the  ones  with  the  specified
           flag.

       -I max size

           Skip any mails larger than the specified size.

       -r rawlog_path

           Running dsync remotely, write the remote input/output traffic to the
           specified log file.

       -s previous_state

           Use  stateful synchronization. If the previous state is unknown, use
           an empty string. The new state is always printed to standard output.

       -u user/mask

           Run the command only for the given user. It's also possible  to  use
           '*' and '?' wildcards (e.g. -u *@example.org).

       -x mailbox_mask

           Exclude  the  specified  mailbox name/mask. The mask may contain "?"
           and "*****" wildcards. The mask can also be a special-use name (e.g.
           \Trash). This parameter can be used multiple times.

ARGUMENTS
       destination

           This argument specifies the synchronized destination.

           It can be one of:

               mail_driver:mail_path : Uses the storage specified by  mail_dri-
               ver  and  mail_path.  Use the -p parameter to specify additional
               settings.

           remote: login@host : Uses dsync_remote_cmd setting to connect to the
           remote host (usually via ssh)

           remoteprefix:login@host  :  This  is  the  same  as  remote,  except
           "user@domain\n"  is  sent  before dsync protocol starts. This allows
           implementing a trusted wrapper script that runs doveadm dsync-server
           by reading the username from the first line.

           tcp: host[:port] : Connects to remote doveadm server  via  TCP.  The
           default port is specified by doveadm_port setting.

           tcps: host[:port] : This is the same as tcp, but with SSL.

           command  [arg1  [,  arg2, ...]] : Runs a local command that connects
           its standard input & output to a dsync server.

EXIT STATUS
       dsync will exit with one of the following values:

       0

           Synchronization was done perfectly.

       2

           Synchronization was done without errors, but some  changes  couldn't
           be  done,  so  the  mailboxes aren't perfectly synchronized. Running
           dsync again usually fixes this. Typically this  occurs  for  message
           modification sequences with newly created mailboxes. It can also oc-
           cur if one of the mailboxes change during the syncing.

       1, >2

           Synchronization failed.

       See also doveadm(1) for other possible error codes.

EXAMPLE
   SYNCHRONIZATION
       Synchronize  mailboxes  with  a remote server. Any errors are written to
       stderr:

         doveadm sync -u username@example.com remote:server-replica.example.com

       If you need more complex parameters to ssh, you can use e.g.:

         doveadm sync -u username@example.com ssh -i id_dsa.dovecot \
           mailuser@example.com doveadm dsync-server -u username@example.com

   CONVERTING
       Example to convert mails from Maildir format to the format specified  in
       the configuration file:

         doveadm backup -u user maildir:~/Maildir

       If  you  want to do this without any downtime, you can do the conversion
       one user at a time. Initially:

       •   Configuration uses mail_driver = maildir and mail_path = ~/Maildir

       •   Set up the possibility of doing per-user mail location using  userdb
           extra fields.

       Then for each user:

       1.  Run doveadm sync once to do the initial conversion.

       2.  Run  doveadm  sync  again, because the initial conversion could have
           taken a while and new changes could have occurred  during  it.  This
           second time only applies changes, so it should be fast.

       3.  Update  userdb  to  return the wanted new mail format configuration.
           For example: mail_driver = mdbox and mail_path = ~/mdbox. If  you're
           using  auth  cache,  you  need  to flush it, e.g. doveadm auth cache
           flush.

       4.  Wait for a few seconds and then kill (doveadm kick) the  user's  all
           existing imap and pop3 sessions (that are still using maildir).

       5.  Run doveadm sync once more to apply final changes that were possibly
           done.  After this there should be no changes to Maildir, because the
           user's mail location has been changed and all existing processes us-
           ing it have been killed.

       Once all users have been converted, you can update the global  mail_dri-
       ver  and  mail_path settings and remove the per-user mail locations from
       userdb.

REPORTING BUGS
       Report bugs, including doveconf -n output, to the Dovecot  Mailing  List
       dovecot@dovecot.org⟩. Information about reporting bugs is available at:
       https://dovecot.org/bugreport.html

SEE ALSO
       doveadm(1), doveadm-purge(1)

78ffb79                            March 2025                 DOVEADM-BACKUP(1)

Generated by dwww version 1.16 on Tue Dec 16 06:04:50 CET 2025.