FastNetMon

Saturday 20 November 2010

Как восстановить побитый /etc/sasldb2?

Имеем вылетевшую авторизацию на Postfix (ну или любом другом сервисе, использующем SASL):
Nov 21 01:27:45 v1 postfix/smtpd[10701]: warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: Invalid argument

При этом с правами на sasl базу данных все хорошо:
ls -la /etc/sasldb2
-rw-r----- 1 root postfix 45K 2010-11-19 15:10 /etc/sasldb2


Но при попытке задать пользователю пароль выдается ошибка:
echo qwerty | /usr/sbin/saslpasswd2 -p -a Sendmail -u test.ru username
/etc/sasldb2: file size not a multiple of the pagesize

Листинг юзеров также не пашет:
sasldblistusers2
/etc/sasldb2: file size not a multiple of the pagesize
listusers failed

Как же пофиксить?

При попытке сделать db4.6_recover все проходит визуально хорошо:
db4.6_recover -h /etc -c -v
Finding last valid log LSN: file: 1 offset 28

Но не помогает:

sasldblistusers2
/etc/sasldb2: file size not a multiple of the pagesize
listusers failed

В итоге помогло лишь (за материал огромное спасибо snkua@jabber.ru):
$ sudo db_recover -v
*db_recover: Finding last valid log LSN: file: 3 offset 399092
*db_recover: Recovery starting from [2][887112]
*db_recover: Log sequence error: page LSN 2 322820; previous LSN 2 885276
*db_recover: Recovery function for LSN 2 887886 failed on forward pass

This error is usually the result of someone removing all of
the log files from a Berkeley DB database environment. You
can never remove all of the log files without also clearing
the database file references to the log.

You should be able to salvage your data -- see the -R and -r
options to the Berkeley DB db_dump utility.

В итоге сработало следующее:
db4.6_dump /root/sasldb2_backup -r

А также еще запасной вариант:
db4.6_dump /root/sasldb2_backup -R

Но он в моем случае выдал ошибку:
db4.6_dump: /root/sasldb2_backup: DB_VERIFY_BAD: Database verification failed

Ну и после этого нужно загрузить дамп в файл и все.

No comments :

Post a Comment

Note: only a member of this blog may post a comment.