Участник:IvanZakharyaschev/Репликация почтового ящика: различия между версиями
м (→схема (что в принципе важно): пояснение про синхронизацию клиентов) |
Нет описания правки |
||
(не показаны 4 промежуточные версии 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) к внутреннему хранилищу сервера почтового ящика; | ||
Строка 40: | Строка 45: | ||
<tr> | <tr> | ||
<td>(не | <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> | |||
<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">-</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> | <th scope="row">MS Exchange</th> | ||
<td style="border: 0; background-color: white;">MS-клиенты</td> | <td style="border: 0; background-color: white;">MS-клиенты</td> | ||
Строка 47: | Строка 134: | ||
</table> | </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> | |||
<td><code>SyncKey</code> (своё на каждый клиент), <code>ServerId</code> | |||
прочитать из логов обращений | |||
специальной командой | |||
</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> | |||
</table> | |||
Будет: | Будет: | ||
Строка 78: | Строка 232: | ||
<tr> | <tr> | ||
<td colspan="2" style="background-color: white;">-</td> | <td colspan="2" style="background-color: white;">-</td> | ||
<td style="background-color: white;"><s>(не | <td style="background-color: white;"><s>(не интересовались)</s></td> | ||
<th scope="row"><s>MS Exchange</s></th> | <th scope="row"><s>MS Exchange</s></th> | ||
<td style="border: 0; background-color: white;"><s>MS-клиенты</s></td> | <td style="border: 0; background-color: white;"><s>MS-клиенты</s></td> | ||
Строка 84: | Строка 238: | ||
</table> | </table> | ||
На самом деле с переносом мета-данных (нужных для синхронизации) всё совсем неясно и для простоты можно было бы не заморачиваться с ними (а при большом желании реализовать возможность их переноса). | |||
{{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 12: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
UID
(и SyncKey
, ServerId
) используются для
определения состояния синхронизации клиентов с сервером. Разное ПО
сервера генерирует их по своим правилам и хранит по-своему. Их смена
приведёт к полной пересинхронизации клиентов (с потерей прошлого кэша)
-- в общем, переезд на реплику не останется незамеченным.
См. также:
Будет:
хранилище данных почтового ящика |
ПО сервера почтового ящика |
дополнительные мета-данные про ящик |
протокол обращения клиентов |
||
---|---|---|---|---|---|
Maildir | dovecot | UIDVALIDITY UID |
IMAP | IMAP-клиенты | |
SOGo | SyncKey , ServerId |
EAS (Exchange ActiveSync) | EAS-клиенты | ||
- | - | MS Exchange | MS-клиенты |
перенос (конкретные инструменты для Exchange→dovecot+SoGo)
Было:
хранилище данных почтового ящика |
ПО сервера почтового ящика |
дополнительные мета-данные про ящик |
протокол обращения клиентов |
|
---|---|---|---|---|
внутреннее хранилище | старое ПО (MS Exchange) | UIDVALIDITY UID |
||
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-клиентом |
|
SyncKey (своё на каждый клиент), ServerId
прочитать из логов обращений специальной командой |
EAS (Exchange ActiveSync) |
...и импорта этих данных и мета-данных:
хранилище данных почтового ящика |
ПО сервера почтового ящика |
дополнительные мета-данные про ящик |
протокол обращения клиентов |
---|---|---|---|
readpst и потом
либо |
в dovecot+SOGo | UIDVALIDITY : как установить?
|
IMAP |
SyncKey , ServerId :
как установить? |
EAS (Exchange ActiveSync) |
Будет:
хранилище данных почтового ящика |
ПО сервера почтового ящика |
дополнительные мета-данные про ящик |
протокол обращения клиентов |
||
---|---|---|---|---|---|
Maildir | dovecot | UIDVALIDITY UID |
IMAP | IMAP-клиенты | |
SOGo | SyncKey , ServerId |
EAS (Exchange ActiveSync) | EAS-клиенты | ||
- |
На самом деле с переносом мета-данных (нужных для синхронизации) всё совсем неясно и для простоты можно было бы не заморачиваться с ними (а при большом желании реализовать возможность их переноса).