Хорошо .. так как никто не ответил, у меня это получилось ..
Поскольку у нас много электронных писем и они распределены по нескольким папкам, нам нужно разделить те, что в базе данных, и те, которых нет
Убедитесь, что вы скопировали эти ... э ... поврежденные папки с данными в другую папку. Так что, если что-то пойдет не так, вы всегда можете собрать их вместе.
Итак, первый шаг, это, конечно, отключение 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 ${f##*/}";
for v in $f/msg/*;
do
comp=$COMPARE/${f##*/}/msg/${v##*/}
dst=$DESTINATION/${f##*/}
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/${m##*/} ]; 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. НАЗНАЧЕНИЕ: Куда вы хотите переместить отсутствующие файлы. СРАВНИТЬ: Где находится ваша старая рабочая резервная копия 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 | comment |
+----+----------------------------------------------------+
| 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"
Не стесняйтесь изменить это / Входящие / Восстановлено на что угодно.