Участник:IvanZakharyaschev/Репликация почтового ящика: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
 
(не показано 10 промежуточных версий 1 участника)
Строка 1: Строка 1:
[[en:user:imz/research_on_HOW_TO_backup_an_IMAP_account|user:imz/research_on_HOW_TO_backup_an_IMAP_account]]
[[category:HOWTO]]
__FORCETOC__
Понятно, что сохранение копии "почтового ящика" само по себе не представляет большой ценности: нужно уметь её использовать -- хотя бы читать клиентом, а лучше начать предоставлять сервером клиентам. Такая задача имеет место как при создании резервной копии (которую мы должны уметь начать использовать, если что), так и при миграции со старого ПО на новое ПО сервера почтового ящика.
Понятно, что сохранение копии "почтового ящика" само по себе не представляет большой ценности: нужно уметь её использовать -- хотя бы читать клиентом, а лучше начать предоставлять сервером клиентам. Такая задача имеет место как при создании резервной копии (которую мы должны уметь начать использовать, если что), так и при миграции со старого ПО на новое ПО сервера почтового ящика.


==background==
==background==
Я раньше уже интересовался близкой задачей -- [[en:user:imz/research_on_HOW_TO_backup_an_IMAP_account|user:imz/research_on_HOW_TO_backup_an_IMAP_account]]:
Я раньше уже интересовался близкой задачей -- [[:en:user:imz/research_on_HOW_TO_backup_an_IMAP_account|user:imz/research_on_HOW_TO_backup_an_IMAP_account]]:


* поле для изучения там было более общее и открытое: искался любой инструмент для сохранения IMAP-ящика, возможно, без иного доступа (кроме IMAP) к внутреннему хранилищу сервера почтового ящика;
* поле для изучения там было более общее и открытое: искался любой инструмент для сохранения IMAP-ящика, возможно, без иного доступа (кроме IMAP) к внутреннему хранилищу сервера почтового ящика;
Строка 16: Строка 21:
Было:
Было:


<table class="wikitable" border="1">
<table class="wikitable" style="border-right: 0;">


<tr>
<tr>
<th scope="col>хранилище<br />данных почтового ящика</th>
<th scope="col">хранилище<br />данных почтового ящика</th>
<th scope="col">ПО<br />сервера почтового ящика</th>
<th scope="col">ПО<br />сервера почтового ящика</th>
<th scope="col">дополнительные мета-данные<br />про ящик</th>
<th scope="col">дополнительные мета-данные<br />про ящик</th>
Строка 29: Строка 34:
<td rowspan="3">старое ПО (MS Exchange)</td>
<td rowspan="3">старое ПО (MS Exchange)</td>
<td><code>UIDVALIDITY</code> <code>UID</code></td>
<td><code>UIDVALIDITY</code> <code>UID</code></td>
<th scope="row>IMAP</th>
<th scope="row">IMAP</th>
<td style="border: 0; background-color: white;">IMAP-клиенты</td>
</tr>
 
<tr>
<td><code>SyncKey</code>, <code>ServerId</code></td>
<th scope="row">EAS (Exchange ActiveSync)</th>
<td style="border: 0; background-color: white;">EAS-клиенты</td>
</tr>
 
<tr>
<td>(не интересовались)</td>
<th scope="row">MS Exchange</th>
<td style="border: 0; background-color: white;">MS-клиенты</td>
</tr>
 
</table>
 
Значения <code>UIDVALIDITY</code> <code>UID</code>
(и <code>SyncKey</code>, <code>ServerId</code>) используются для
определения состояния синхронизации клиентов с сервером. Разное ПО
сервера генерирует их по своим правилам и хранит по-своему. Их смена
приведёт к полной пересинхронизации клиентов (с потерей прошлого кэша)
-- в общем, переезд на реплику не останется незамеченным.
См. также:
 
* [[:en:user:imz/research_on_HOW_TO_backup_an_IMAP_account#Saving UIDs (to seamlessly switch to a backup IMAP server)|Saving UIDs (to seamlessly switch to a backup IMAP server)]]
* [[:en:user:imz/research_on_HOW_TO_backup_an_IMAP_account#Saving keywords, flags|Saving keywords, flags]]
 
Будет:
 
<table class="wikitable" style="border-right: 0;">
 
<tr>
<th scope="col">хранилище<br />данных почтового ящика</th>
<th colspan="2" scope="col">ПО<br />сервера почтового ящика</th>
<th scope="col">дополнительные мета-данные<br />про ящик</th>
<th scope="col">протокол<br />обращения клиентов</th>
</tr>
 
<tr>
<td rowspan="3">Maildir</td>
<td rowspan="2" style="border-right: 0;">dovecot</td>
<td style="border-left: 0;" />
<td><code>UIDVALIDITY</code> <code>UID</code></td>
<th scope="row">IMAP</th>
<td style="border: 0; background-color: white;">IMAP-клиенты</td>
</tr>
</tr>


<tr>
<tr>
<td>SOGo</td>
<td><code>SyncKey</code>, <code>ServerId</code></td>
<td><code>SyncKey</code>, <code>ServerId</code></td>
<th scope="row>Exchange ActiveSync (EAS)</th>
<th scope="row">EAS (Exchange ActiveSync)</th>
<td style="border: 0; background-color: white;">EAS-клиенты</td>
</tr>
 
<tr>
<td colspan="2">-</td>
<td>-</td>
<th scope="row">MS Exchange</th>
<td style="border: 0; background-color: white;">MS-клиенты</td>
</tr>
 
</table>
 
==перенос (конкретные инструменты для Exchange→dovecot+SoGo)==
 
Было:
 
<table class="wikitable" style="border-right: 0;">
 
<tr>
<th scope="col">хранилище<br />данных почтового ящика</th>
<th scope="col">ПО<br />сервера почтового ящика</th>
<th scope="col">дополнительные мета-данные<br />про ящик</th>
<th scope="col">протокол<br />обращения клиентов</th>
</tr>
 
<tr>
<td rowspan="3">внутреннее хранилище</td>
<td rowspan="3">старое ПО (MS Exchange)</td>
<td><s><code>UIDVALIDITY</code> <code>UID</code></s></td>
<th scope="row"><s>IMAP</s></th>
<td style="border: 0; background-color: white;"><s>IMAP-клиенты</s></td>
</tr>
 
<tr>
<td><code>SyncKey</code>, <code>ServerId</code></td>
<th scope="row">EAS (Exchange ActiveSync)</th>
<td style="border: 0; background-color: white;">EAS-клиенты</td>
</tr>
 
<tr>
<td>(не интересовались)</td>
<th scope="row">MS Exchange</th>
<td style="border: 0; background-color: white;">MS-клиенты</td>
</tr>
 
</table>
 
Инструменты для вытаскивания соответствующих данных (и мета-данных, если что-то из них будет важно):
 
<table class="wikitable" style="border-right: 0;">
 
<tr>
<th scope="col">хранилище<br />данных почтового ящика</th>
<th scope="col">ПО<br />сервера почтового ящика</th>
<th scope="col">дополнительные мета-данные<br />про ящик</th>
<th scope="col">протокол<br />обращения клиентов</th>
</tr>
 
<tr>
<td rowspan="2">(thx kazanskyap)
<pre>add-pssnapin *Exchange*
 
Get-Mailbox USERNAME
| New-MailboxExportRequest
-FilePath \\SOMEHOST\c$\USERNAME.pst
</pre>
</td>
<td rowspan="2">из Exchange</td>
<td><code>UIDVALIDITY</code> <code>UID</code> (одно на сервер)
можно прочитать любым IMAP-клиентом
</td>
<th scope="row"><s>IMAP</s></th>
</tr>
</tr>


<tr>
<tr>
<td>(не интересно)</td>
<td><code>SyncKey</code> (своё на каждый клиент), <code>ServerId</code>
<th scope="row>MS Exchange</th>
прочитать из логов обращений
специальной командой
</td>
<th scope="row">EAS (Exchange ActiveSync)</th>
</tr>
 
</table>
 
...и импорта этих данных и мета-данных:
 
<table class="wikitable" style="border-right: 0;">
 
<tr>
<th scope="col">хранилище<br />данных почтового ящика</th>
<th scope="col">ПО<br />сервера почтового ящика</th>
<th scope="col">дополнительные мета-данные<br />про ящик</th>
<th scope="col">протокол<br />обращения клиентов</th>
</tr>
 
<tr>
<td rowspan="2"><code>readpst</code> и потом
либо <code>dovecot-lda</code>,
либо <code>dsync</code>
</td>
<td rowspan="2">в dovecot+SOGo</td>
<td><code>UIDVALIDITY</code>: как установить?
<code>UID</code>: можно записать (при большом желании)
</td>
<th scope="row">IMAP</th>
</tr>
 
<tr>
<td><code>SyncKey</code>, <code>ServerId</code>:
как установить?
</td>
<th scope="row">EAS (Exchange ActiveSync)</th>
</tr>
</tr>


Строка 45: Строка 204:


Будет:
Будет:
<table class="wikitable" style="border-right: 0;">
<tr>
<th scope="col">хранилище<br />данных почтового ящика</th>
<th colspan="2" scope="col">ПО<br />сервера почтового ящика</th>
<th scope="col">дополнительные мета-данные<br />про ящик</th>
<th scope="col">протокол<br />обращения клиентов</th>
</tr>
<tr>
<td rowspan="3">Maildir</td>
<td rowspan="2" style="border-right: 0;">dovecot</td>
<td style="border-left: 0;" />
<td><code>UIDVALIDITY</code> <code>UID</code></td>
<th scope="row">IMAP</th>
<td style="border: 0; background-color: white;">IMAP-клиенты</td>
</tr>
<tr>
<td>SOGo</td>
<td><code>SyncKey</code>, <code>ServerId</code></td>
<th scope="row">EAS (Exchange ActiveSync)</th>
<td style="border: 0; background-color: white;">EAS-клиенты</td>
</tr>
<tr>
<td colspan="2" style="background-color: white;">-</td>
<td style="background-color: white;"><s>(не интересовались)</s></td>
<th scope="row"><s>MS Exchange</s></th>
<td style="border: 0; background-color: white;"><s>MS-клиенты</s></td>
</tr>
</table>
На самом деле с переносом мета-данных (нужных для синхронизации) всё совсем неясно и для простоты можно было бы не заморачиваться с ними (а при большом желании реализовать возможность их переноса).
{{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}}

Текущая версия от 09:43, 10 марта 2018



Понятно, что сохранение копии "почтового ящика" само по себе не представляет большой ценности: нужно уметь её использовать -- хотя бы читать клиентом, а лучше начать предоставлять сервером клиентам. Такая задача имеет место как при создании резервной копии (которую мы должны уметь начать использовать, если что), так и при миграции со старого ПО на новое ПО сервера почтового ящика.

background

Я раньше уже интересовался близкой задачей -- user:imz/research_on_HOW_TO_backup_an_IMAP_account:

  • поле для изучения там было более общее и открытое: искался любой инструмент для сохранения IMAP-ящика, возможно, без иного доступа (кроме IMAP) к внутреннему хранилищу сервера почтового ящика;
  • но задача, касающаяся возобновления работы клиентов с сохранённой резервной копией (со своим иным IMAP-сервером), ставилась только для IMAP-клиентов.

Сейчас в этих заметках нас интересуют более конкретные вещи.

  • Мы как бы обладаем полным доступом к хранилищу текущего сервера (правда, засекреченного -- с одной стороны; с другой стороны -- с возможно несовершенным IMAP).
  • Протоколы общения с клиентами -- не только один IMAP.
  • Какое ПО будет использоваться, чтобы запустить новый наш сервер почтового ящика, тоже более-менее определено.

схема (что в принципе важно)

Было:

хранилище
данных почтового ящика
ПО
сервера почтового ящика
дополнительные мета-данные
про ящик
протокол
обращения клиентов
внутреннее хранилище старое ПО (MS Exchange) UIDVALIDITY UID IMAP IMAP-клиенты
SyncKey, ServerId EAS (Exchange ActiveSync) EAS-клиенты
(не интересовались) MS Exchange MS-клиенты

Значения UIDVALIDITY UIDSyncKey, ServerId) используются для определения состояния синхронизации клиентов с сервером. Разное ПО сервера генерирует их по своим правилам и хранит по-своему. Их смена приведёт к полной пересинхронизации клиентов (с потерей прошлого кэша) -- в общем, переезд на реплику не останется незамеченным. См. также:

Будет:

хранилище
данных почтового ящика
ПО
сервера почтового ящика
дополнительные мета-данные
про ящик
протокол
обращения клиентов
Maildir dovecot UIDVALIDITY UID IMAP IMAP-клиенты
SOGo SyncKey, ServerId EAS (Exchange ActiveSync) EAS-клиенты
- - MS Exchange MS-клиенты

перенос (конкретные инструменты для Exchange→dovecot+SoGo)

Было:

хранилище
данных почтового ящика
ПО
сервера почтового ящика
дополнительные мета-данные
про ящик
протокол
обращения клиентов
внутреннее хранилище старое ПО (MS Exchange) UIDVALIDITY UID IMAP IMAP-клиенты
SyncKey, ServerId EAS (Exchange ActiveSync) EAS-клиенты
(не интересовались) MS Exchange MS-клиенты

Инструменты для вытаскивания соответствующих данных (и мета-данных, если что-то из них будет важно):

хранилище
данных почтового ящика
ПО
сервера почтового ящика
дополнительные мета-данные
про ящик
протокол
обращения клиентов
(thx kazanskyap)
add-pssnapin *Exchange*

Get-Mailbox USERNAME
| New-MailboxExportRequest
-FilePath \\SOMEHOST\c$\USERNAME.pst
из Exchange UIDVALIDITY UID (одно на сервер)

можно прочитать любым IMAP-клиентом

IMAP
SyncKey (своё на каждый клиент), ServerId

прочитать из логов обращений специальной командой

EAS (Exchange ActiveSync)

...и импорта этих данных и мета-данных:

хранилище
данных почтового ящика
ПО
сервера почтового ящика
дополнительные мета-данные
про ящик
протокол
обращения клиентов
readpst и потом

либо dovecot-lda, либо dsync

в dovecot+SOGo UIDVALIDITY: как установить?

UID: можно записать (при большом желании)

IMAP
SyncKey, ServerId:

как установить?

EAS (Exchange ActiveSync)

Будет:

хранилище
данных почтового ящика
ПО
сервера почтового ящика
дополнительные мета-данные
про ящик
протокол
обращения клиентов
Maildir dovecot UIDVALIDITY UID IMAP IMAP-клиенты
SOGo SyncKey, ServerId EAS (Exchange ActiveSync) EAS-клиенты
- (не интересовались) MS Exchange MS-клиенты

На самом деле с переносом мета-данных (нужных для синхронизации) всё совсем неясно и для простоты можно было бы не заморачиваться с ними (а при большом желании реализовать возможность их переноса).