Хорошо .. так как никто не ответил, у меня это получилось ..
Поскольку у нас много электронных писем и они распределены по нескольким папкам, нам нужно разделить те, что в базе данных, и те, которых нет ..
Убедитесь, что вы скопировали эти ... э ... поврежденные папки с данными в другую папку. Так что, если что-то пойдет не так, вы всегда можете собрать их вместе.
Итак, первый шаг, это, конечно, отключение Zimbra
service zimbra stop
затем скопируйте старую рабочую базу данных mysql в нерабочую зимбру.
cp /mnt/mail/db/* /opt/zimbra/db -R
Теперь нам нужно сравнить эти письма в ~ / store при резервном копировании в июле с письмами в ~ / store при работающем zimbra. Затем я переместил каждое письмо не в июле в другую соответствующую папку в / opt / backup. Приведенный ниже сценарий предназначен для сканирования всех доступных .msg во всех магазинах и томах и перемещения в другую папку. Сохраните этот скрипт ниже, т.е.
compare.sh
SOURCE=/opt/zimbra/store/0 DESTINATION=/opt/backup COMPARE=/mnt/mail/store/0 for f in $SOURCE/*; do echo "scanning folder $"; for v in $f/msg/*; do comp=$COMPARE/$/msg/$ dst=$DESTINATION/$ if [ ! -d $dst ]; then echo "create $dst" mkdir $dst; fi echo "comparing volume $v to $comp" if [ -d $comp ] ; then for m in $v/*; do if [ ! -f $comp/$ ]; then echo "move $m to $dst" mv -b $m $dst fi done else echo "move $v/* to $dst" mv -b $v/* $dst fi done; done;
Убедитесь, что вы изменили переменные SOURCE, COMPARE dan DESTINATION для зеркалирования ваших собственных папок.
ИСТОЧНИК: Текущая текущая папка в магазине Zimbra DESTINATION: куда вы хотите переместить отсутствующие файлы СРАВНИТЕ: Где находится ваша старая рабочая резервная копия zimbra, та, которую вы используете в своей базе данных.
Затем
chmod a+x compare.sh
сделать его исполняемым, затем./compare.sh
выполнить его.Результатом будет / opt / backup / 1 в / opt / backup / xx, где xx - хранилища почтовых ящиков. Все сообщения, которые были перемещены в / opt / backup / x, не находятся в исходном почтовом ящике и будут добавлены.
Итак, теперь у нас есть 2 папки.
/opt/backup/xx
который содержит файлы не в базе данных, и/opt/zimbra/
который должен быть в значительной степени идентичен/mnt/mail/
Запустить Zimbra назад
service zimbra start
Теперь нам нужно получить все почтовые ящики
mysql "zimbra" -e"select id,comment from mailbox"
Остальное просто, нам нужно только вызвать CreateFolder и addMessage, как эти, чтобы повторно прикрепить эти пропущенные письма:
zmmailbox -z -m <user@domain.net> cf "/Inbox/Recovered" zmmailbox -z -m <user@domain.net> am "/Inbox/Recovered" "/opt/backup/<xx>"
например:
Допустим, у нас есть от шага 2 выше
+ ---- + -------------------------------------------- -------- + | id | комментарий | + ---- + -------------------------------------------- -------- + | 1 | mymailbox@bogusmail.xcom | | 2 | awesome@bogusmail.xcom | + ---- + -------------------------------------------- -------- +
Мы должны добавить эти сообщения как:
zmmailbox -z -m mymailbox@bogusmail.xcom cf "/Inbox/Recovered" zmmailbox -z -m mymailbox@bogusmail.xcom am "/Inbox/Recovered" "/opt/backup/1" zmmailbox -z -m awesome@bogusmail.xcom cf "/Inbox/Recovered" zmmailbox -z -m awesome@bogusmail.xcom am "/Inbox/Recovered" "/opt/backup/2"
Не стесняйтесь изменить это / Входящие / Восстановлено на что угодно.