====== Repair a broken skiplist file ====== {{tag>cyrus imap}} 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 [[http://oss.netfarm.it/python-cyrus.php|skiplist.py]] and then recreate the db format for cyrus. {{:en:ressources:dossiers:cyrus:skiplist.py.zip|}} 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.