Repair a broken skiplist file

If you see the following lines in your mail.warn syslog file :

Oct  1 10:19:54 zerhuel cyrus/imap[28120]: DBERROR: skiplist recovery /var/lib/cyrus/user/j/machin.seen: ADD at 2FC8 exists   
Oct  1 10:19:54 zerhuel cyrus/imap[28120]: DBERROR: opening /var/lib/cyrus/user/j/machin.seen: cyrusdb error
Oct  1 10:19:54 zerhuel cyrus/imap[28120]: Could not open seen state for machin(System I/O error)
Oct  1 10:19:54 zerhuel cyrus/imap[28120]: DBERROR: skiplist recovery /var/lib/cyrus/user/j/machin.seen: ADD at 2FC8 exists
Oct  1 10:19:54 zerhuel cyrus/imap[28120]: DBERROR: opening /var/lib/cyrus/user/j/machin.seen: cyrusdb error
Oct  1 10:19:54 zerhuel cyrus/imap[28120]: Could not open seen state for machin(System I/O error)

It means your skiplist file is corrupted. A solution to recover this is to convert the seen file to text format using skiplist.py and then recreate the db format for cyrus.

There we go :

First, shut down your cyrus server

# /etc/init.d/cyrus2.2 stop
Stopping Cyrus IMAPd: .

Then, go to the folder that contains the seen skiplist files. On my Debian Lenny, this folder is /var/lib/cyrus/user/ (and it is not the same as the mail storage folder).

# cd /var/lib/cyrus/user/

# ls
a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z

# cd m

# ls -l 
total 60
-rw------- 1 cyrus mail 24824 oct  1 10:19 machin.seen
-rw------- 1 cyrus mail   434 oct  1 09:54 machin.sub

Now, we use the skiplist.py script to convert machin.seen into its text version.

# /scripts/skiplist.py /var/lib/cyrus/user/m/machin.seen > /var/lib/cyrus/user/m/machin.seen.txt

And then use cvt_cyrusdb to reconvert the text file into the skiplist format.

cvt_cyrusdb is used to convert a cyrusdb file
between different database backends.

It requires that you use the full path of the files you want to convert.

# mv /var/lib/cyrus/user/m/machin.seen /var/lib/cyrus/user/m/machin.seen.old

# cvt_cyrusdb /var/lib/cyrus/user/m/machin.seen.txt flat /var/lib/cyrus/user/m/machin.seen skiplist

Converting from /var/lib/cyrus/user/m/machin.seen.txt (flat) to /var/lib/cyrus/user/m/machin.seen (skiplist)

Don't forget to change the owner of the new seen file, otherwise cyrus won't be able to access it.

# chown cyrus:mail machin.seen

Restart your cyrus server, your problem should be fixed now.

Discussion

Enter your comment
If you can't read the letters on the image, download this .wav file to get them read to you.
 
en/ressources/dossiers/cyrus/repair_skiplist.txt · Last modified: 2011/03/16 01:30 (external edit)
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0