When doing migration, it is very useful to construct a temporary dovecot-migration.conf which lacks *any* automatic mailbox creation and has only the bare minimum you need (sieve needs to be configured, and mailbox attributes). This means no autocreate/autosubscribe loaded, and no auto=create or auto=subscribe in namespace config. It is recommended not to have any mailbox Name entries in your namespace config.
You should use doveadm -c /path/to/dovecot-migration.conf backup command on initial sync.
The mailboxes must not exist before you do initial sync, if they do, you run into troubles.
I tried what you said, no autocreate/autosubscribe... etc., but none of my tests with minimal migration config changed anything in the GUID behavior.
No folders for the users existed before this command.
doveadm -D -v -c minimal-conf backup -R -u USER imapc: > output 2>&1
doveadm(USER): Debug: Effective uid=500, gid=500, home=/srv/mail/v/USER doveadm(USER): Debug: Namespace : type=private, prefix=, sep=/, inbox=yes, hidden=no, list=yes, subscriptions=yes location=mdbox:/srv/mail/v/USER doveadm(USER): Debug: fs: root=/srv/mail/v/USER, index=, indexpvt=, control=, inbox=, alt= doveadm(USER): Debug: Namespace : Using permissions from /srv/mail/v/USER: mode=0700 gid=default dsync(USER): Debug: Effective uid=500, gid=500, home=/srv/mail/v/USER dsync(USER): Debug: Namespace : type=private, prefix=, sep=/, inbox=yes, hidden=no, list=yes, subscriptions=yes location=imapc: dsync(USER): Debug: imapc(zitrone.rz.uni-augsburg.de:143): Created new connection dsync(USER): Debug: imapc(zitrone.rz.uni-augsburg.de:143): Looking up IP address (reconnect_ok=true, last_connect=1610467047) dsync(USER): Debug: imapc(zitrone.rz.uni-augsburg.de:143): Connecting to 137.250.1.99:143 dsync(USER): Info: imapc(zitrone.rz.uni-augsburg.de:143): Connected to 137.250.1.99:143 (local 137.250.1.121:41094) dsync(USER): Debug: imapc(zitrone.rz.uni-augsburg.de:143): Server capabilities: IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN AUTH=LOGIN dsync(USER): Debug: imapc(zitrone.rz.uni-augsburg.de:143): Authenticating as admin for user USER dsync(USER): Debug: imapc(zitrone.rz.uni-augsburg.de:143): Server capabilities: IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS QUOTA dsync(USER): Debug: imapc(zitrone.rz.uni-augsburg.de:143): Authenticated successfully dsync(USER): Debug: imapc: root=, index=, indexpvt=, control=, inbox=, alt= dsync(USER): Debug: brain S: Local mailbox tree: Trash guid=7f5af7ba291b2df1a11d573bdb55d7e9 uid_validity=1598518510 uid_next=434 subs=yes last_change=0 last_subs=0 dsync(USER): Debug: brain M: Remote mailbox tree: Trash guid=7f5af7ba291b2df1a11d573bdb55d7e9 uid_validity=1598518510 uid_next=434 subs=yes last_change=0 last_subs=0 dsync(USER): Debug: brain S: Local mailbox tree: Sent guid=bfb2e03fdce327671e82bf173b1ccb8b uid_validity=1598518508 uid_next=220 subs=yes last_change=0 last_subs=0 dsync(USER): Debug: brain M: Remote mailbox tree: Sent guid=bfb2e03fdce327671e82bf173b1ccb8b uid_validity=1598518508 uid_next=220 subs=yes last_change=0 last_subs=0 dsync(USER): Debug: brain S: Local mailbox tree: Drafts guid=e0187b65e763143666d22094cedfe6a4 uid_validity=1598518507 uid_next=10 subs=yes last_change=0 last_subs=0 dsync(USER): Debug: brain M: Remote mailbox tree: Drafts guid=e0187b65e763143666d22094cedfe6a4 uid_validity=1598518507 uid_next=10 subs=yes last_change=0 last_subs=0 dsync(USER): Debug: brain S: Local mailbox tree: INBOX guid=c92f64f79f0d1ed01e6d5b314f04886c uid_validity=1598518506 uid_next=1049 subs=no last_change=0 last_subs=0 dsync(USER): Debug: brain M: Remote mailbox tree: INBOX guid=c92f64f79f0d1ed01e6d5b314f04886c uid_validity=1598518506 uid_next=1049 subs=no last_change=0 last_subs=0 ...
for user in USER; do echo $user ; for mailbox in ls /srv/mail/v/$user/mailboxes/
; do echo $mailbox; doveadm search -u $user
mailbox $mailbox ALL | head -n 1; done ; done
USER Drafts INBOX c92f64f79f0d1ed01e6d5b314f04886c 28 Junk Sent bfb2e03fdce327671e82bf173b1ccb8b 1 Trash 7f5af7ba291b2df1a11d573bdb55d7e9 1
doveadm -D -v -c minimal-conf backup -R -u USER2 imapc: > output 2>&1
doveadm(USER2): Debug: Effective uid=500, gid=500, home=/srv/mail/v/USER2 doveadm(USER2): Debug: Namespace : type=private, prefix=, sep=/, inbox=yes, hidden=no, list=yes, subscriptions=yes location=mdbox:/srv/mail/v/USER2 doveadm(USER2): Debug: fs: root=/srv/mail/v/USER2, index=, indexpvt=, control=, inbox=, alt= doveadm(USER2): Debug: Namespace : Using permissions from /srv/mail/v/USER2: mode=0700 gid=default dsync(USER2): Debug: Effective uid=500, gid=500, home=/srv/mail/v/USER2 dsync(USER2): Debug: Namespace : type=private, prefix=, sep=/, inbox=yes, hidden=no, list=yes, subscriptions=yes location=imapc: dsync(USER2): Debug: imapc(zitrone.rz.uni-augsburg.de:143): Created new connection dsync(USER2): Debug: imapc(zitrone.rz.uni-augsburg.de:143): Looking up IP address (reconnect_ok=true, last_connect=1610467389) dsync(USER2): Debug: imapc(zitrone.rz.uni-augsburg.de:143): Connecting to 137.250.1.99:143 dsync(USER2): Info: imapc(zitrone.rz.uni-augsburg.de:143): Connected to 137.250.1.99:143 (local 137.250.1.121:41100) dsync(USER2): Debug: imapc(zitrone.rz.uni-augsburg.de:143): Server capabilities: IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN AUTH=LOGIN dsync(USER2): Debug: imapc(zitrone.rz.uni-augsburg.de:143): Authenticating as admin for user USER2 dsync(USER2): Debug: imapc(zitrone.rz.uni-augsburg.de:143): Server capabilities: IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS QUOTA dsync(USER2): Debug: imapc(zitrone.rz.uni-augsburg.de:143): Authenticated successfully dsync(USER2): Debug: imapc: root=, index=, indexpvt=, control=, inbox=, alt= dsync(USER2): Debug: brain S: Local mailbox tree: INBOX guid=c92f64f79f0d1ed01e6d5b314f04886c uid_validity=1600955712 uid_next=105 subs=no last_change=0 last_subs=0 dsync(USER2): Debug: brain S: Local mailbox tree: Trash guid=7f5af7ba291b2df1a11d573bdb55d7e9 uid_validity=1600955716 uid_next=33 subs=yes last_change=0 last_subs=0 dsync(USER2): Debug: brain M: Remote mailbox tree: INBOX guid=c92f64f79f0d1ed01e6d5b314f04886c uid_validity=1600955712 uid_next=105 subs=no last_change=0 last_subs=0 dsync(USER2): Debug: brain M: Remote mailbox tree: Trash guid=7f5af7ba291b2df1a11d573bdb55d7e9 uid_validity=1600955716 uid_next=33 subs=yes last_change=0 last_subs=0 dsync(USER2): Debug: brain S: Local mailbox tree: Sent guid=bfb2e03fdce327671e82bf173b1ccb8b uid_validity=1600955714 uid_next=9 subs=yes last_change=0 last_subs=0 dsync(USER2): Debug: brain M: Remote mailbox tree: Sent guid=bfb2e03fdce327671e82bf173b1ccb8b uid_validity=1600955714 uid_next=9 subs=yes last_change=0 last_subs=0 dsync(USER2): Debug: brain S: Local mailbox tree: Drafts guid=e0187b65e763143666d22094cedfe6a4 uid_validity=1600955713 uid_next=5 subs=yes last_change=0 last_subs=0 dsync(USER2): Debug: brain M: Remote mailbox tree: Drafts guid=e0187b65e763143666d22094cedfe6a4 uid_validity=1600955713 uid_next=5 subs=yes last_change=0 last_subs=0 dsync(USER2): Debug: brain S: Local mailbox tree: Junk guid=87680557f26fcb26843f739f7427e8c4 uid_validity=1600955715 uid_next=1 subs=yes last_change=0 last_subs=0 dsync(USER2): Debug: brain M: Remote mailbox tree: Junk guid=87680557f26fcb26843f739f7427e8c4 uid_validity=1600955715 uid_next=1 subs=yes last_change=0 last_subs=0 dsync(USER2): Debug: brain M: Mailbox Drafts: local=00000000000000000000000000000000/0/0, remote=e0187b65e763143666d22094cedfe6a4/0/1: mailbox not selectable yet dsync(USER2): Debug: brain M: Mailbox INBOX: local=00000000000000000000000000000000/0/0, remote=c92f64f79f0d1ed01e6d5b314f04886c/0/1: mailbox not selectable yet dsync(USER2): Debug: brain M: Mailbox Junk: local=00000000000000000000000000000000/0/0, remote=87680557f26fcb26843f739f7427e8c4/0/1: mailbox not selectable yet dsync(USER2): Debug: brain M: Mailbox Sent: local=00000000000000000000000000000000/0/0, remote=bfb2e03fdce327671e82bf173b1ccb8b/0/1: mailbox not selectable yet dsync(USER2): Debug: brain M: Mailbox Trash: local=00000000000000000000000000000000/0/0, remote=7f5af7ba291b2df1a11d573bdb55d7e9/0/1: mailbox not selectable yet dsync(USER2): Debug: Namespace : /srv/mail/v/USER2/mailboxes/Drafts doesn't exist yet, using default permissions dsync(USER2): Debug: Namespace : Using permissions from /srv/mail/v/USER2: mode=0700 gid=default dsync(USER2): Debug: Namespace : /srv/mail/v/USER2/mailboxes/INBOX doesn't exist yet, using default permissions dsync(USER2): Debug: Namespace : Using permissions from /srv/mail/v/USER2: mode=0700 gid=default dsync(USER2): Debug: Namespace : /srv/mail/v/USER2/mailboxes/Junk doesn't exist yet, using default permissions dsync(USER2): Debug: Namespace : Using permissions from /srv/mail/v/USER2: mode=0700 gid=default dsync(USER2): Debug: INBOX: Mailbox opened because: copy caching decisions dsync(USER2): Debug: Namespace : /srv/mail/v/USER2/mailboxes/Sent doesn't exist yet, using default permissions dsync(USER2): Debug: Namespace : Using permissions from /srv/mail/v/USER2: mode=0700 gid=default dsync(USER2): Debug: INBOX: Mailbox opened because: copy caching decisions dsync(USER2): Debug: Namespace : /srv/mail/v/USER2/mailboxes/Trash doesn't exist yet, using default permissions dsync(USER2): Debug: Namespace : Using permissions from /srv/mail/v/USER2: mode=0700 gid=default dsync(USER2): Debug: INBOX: Mailbox opened because: copy caching decisions ...
for user in USER2; do echo $user ; for mailbox in ls /srv/mail/v/$user/mailboxes/
; do echo $mailbox; doveadm search -u $user
mailbox $mailbox ALL | head -n 1; done ; done
USER2 Drafts INBOX c92f64f79f0d1ed01e6d5b314f04886c 28 Junk Sent bfb2e03fdce327671e82bf173b1ccb8b 1 Trash 7f5af7ba291b2df1a11d573bdb55d7e9 1
which options in dovecot config specifically must be set so that imapc adopts the GUID it gets from the server its migrating from.
thanks Thomas