Восстановление сломанного файла skiplist

Если вы видите такой текст в файле syslog /var/log/mail.warn
 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)  
, значит, ваш файл skiplist повреждён. Способ решения данной проблемы - сконвертировать файл seen в текстовый формат с использованием утилитки skiplist.py (ссылка на скачивание), затем пересоздав файл в формате db для cyrus

Итак, сначала вырубаем твой сервер:
 # /etc/init.d/cyrus2.2 stop  
 Stopping Cyrus IMAPd: .  

Затем, переходим в директорию, содержащую skiplist-файл seen
 # 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  

Используя skiplist.py, конвертируем machin.seen в текстовую версию
 # /scripts/skiplist.py /var/lib/cyrus/user/m/machin.seen > /var/lib/cyrus/user/m/machin.seen.txt  

Затем, используем тулзу cvt_cyrusdb, чтобы ковертнуть текстовый файл в формат skiplist, указывайте полные пути к файлам
 # 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)  

И не забудьте изменить хозяина seen файла, иначе cyrus не сможет получить к нему доступ.
 # chown cyrus:mail machin.seen  

Перезапустите сервер cyrus, и ваша проблема решена!

Ссылка на оригинальную статью

Комментарии

Популярные сообщения