123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- $Id: FAQ.Use_cache.txt,v 1.11 2021/04/22 13:20:18 gilles Exp gilles $
- This document is also available online at
- https://imapsync.lamiral.info/FAQ.d/
- https://imapsync.lamiral.info/FAQ.d/FAQ.Use_cache.txt
- =======================================================================
- Imapsync --usecache or --useuid options
- =======================================================================
- Questions answered in this FAQ are:
- Q. What is --usecache good for?
- Q. What is the technical principle of --usecache?
- Q. On Windows, with --useuid and after a reboot or a new login, a new
- run generates duplicates. What can I do to avoid and fix that?
- Q. On Windows, with --useuid or --usecache a problem occurs with long
- nested folder names. The error message is:
- "No such file or directory; The filename or extension is too long"
- Q. Inode problem with --usecache or --useuid on Linux
- Now the questions again and their answers.
- =======================================================================
- Q. What is --usecache good for?
- R. The option --usecache is useful to speed up next syncs with --usecache.
- The first sync with --usecache between two imap accounts is as low
- as the first sync without --usecache, the next syncs are faster.
- =======================================================================
- Q. What is the technical principle of --usecache?
- R. Option --usecache creates a empty file per email message
- in order to keep the UIDs mapping between account1 and account2.
-
- The cache is maintened at each run. Messages UIDs enregistred
- in the cache are not fetched again to be identified. It really
- speeds up the process of syncing.
-
- The cache directory is
-
- <tmpdir>/imapsync_cache/
-
- where <tmpdir> is the temporary directory given by the --tmpdir option
- or the one by default, /tmp on Unix, variable on Windows.
-
- =======================================================================
- Q. On Windows, with --useuid and after a reboot or a new login, a new
- run generates duplicates. What can I do to avoid and fix that?
- R. The cache is build in a temporary directory. Imapsync uses a system
- call to get this temporary directory, it is not hardcoded and it
- is system dependent, the call garanties a write access. Sometimes on
- Windows this directory name changes upon reboot or for any other reason.
- Anyway, the temporary directory used by imapsync can be set by the
- option --tmpdir and that's the way to avoid this issue.
- The new problem is that the temporary directory must be writable, which
- is not a big deal to found.
- Use for example either a) b) or c)
- a) The current directory:
- imapsync ... --tmpdir .
- b) The root directory:
- imapsync ... --tmpdir /
- c) Any directory you want, like:
- imapsync ... --tmpdir "C:\TEMP"
- Now, to fix the duplicates on host2, have a run with the option
- --delete2duplicates
- imapsync ... --delete2duplicates
- =======================================================================
- Q. On Windows, with --useuid or --usecache a problem occurs with long
- nested folder names. The error message is:
- "No such file or directory; The filename or extension is too long"
- R. This comes from a Windows limitation on pathnames.
- No more than 260 characters are allowed for pathnames.
- See more details on page
- http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247.aspx#maxpath
- The workaround solution given at the previous link,
- ie using \\?\D:", does not work for imapsync.
- So this imapsync Windows bug is still pending and needs a fix using
- a different technique to cache, like a database file for example.
- A solution to fix the issue is to use a Linux virtual host on a
- Windows box, with VirtualBox or VmWare etc. There is no bug this way,
- pathnames can be several thousands characters long.
- Better said that done but not so difficult nor expensive these days,
- VirtualBox is free and VmWare Player is free for personal or test use.
- If you have to stick on Windows, there are two good workarounds
- to reduce the cache directory name:
- 1) Use --tmpdir "D:\\temp" or simply --tmpdir "D:" and imapsync
- will build and use the cache in the sub directory
- D:\imapsync_cache\
- 2) add two equivalent entries in the etc/hosts for host1 imap.truc.org
- and host2 imap.trac.org.
- If you map the ip of imap.truc.org just with the letter a
- and same thing for imap.trac.org then you gain characters
- etc/hosts
- 192.168.12.1 a
- 192.168.55.3 b
- Then use:
- imapsync --host1 a --host2 b ...
- You can get the ip of a host with the ping command line
- C:\> ping imap.truc.org
- 3) A third solution is to not use options --useuid nor --usecache
- Fixing this long path problem directly in imapsync is in the TODO file
- for a very long time.
- =======================================================================
- Q. Inode problem with --usecache or --useuid on Linux
- R. You may run out of inodes using --usecache, especially with large
- migration. Option --usecache creates a empty file per email message
- in order to keep the UIDs mapping between account1 and account2.
- So, if you plan to sync regularly 10 millions messages over a period
- of migration then the filesystem of --tmpdir needs 10 millions of free
- inodes. If it hasn't those free inodes then create a new special
- filesystem devoted to the imapsync cache.
- # Create a file of 10 GB (10 millions*1024):
- dd if=/dev/zero of=/var/tmp/fscache bs=1M count=10000
- # Create a filesystem where each file is only 1024 bytes per inode:
- mkfs.ext2 -F -i 1024 /var/tmp/fscache
- # Mount this brand new filesystem
- mkdir -p /var/tmp/cachedir
- mount -o loop /var/tmp/fscache /var/tmp/cachedir
- df -i /var/tmp/cachedir # count inodes available
- # Tell imapsync to use it
- imapsync ... --tmpdir /var/tmp/cachedir/
- # When the migration is over and the cache becomes really useless
- umount /var/tmp/cachedir/
- rm /var/tmp/fscache
- =======================================================================
- =======================================================================
|