Резервное копирование через BMWCLIENT
Назначение документа
В документе описаны возможности резеревного копирования Облака. Резервное копирование выполняется через BMWCLIENT.
Документ нужен администраторам организации.
См. также: Резервное копирование почты, календарей, профилей пользователей и адресных книг
Возможности BMWCLIENT и примеры запросов
Для каждого запроса необходимо обязательно передавать следующий список полей:
- -server — доменное имя для запросов в BMWCLIENT, например bmw.on-premise.ru.
- -tls — использует ли сервер шифрование (https). Флаг принимает два значения: true или false. По умолчанию считается, что шифрование используется.
- -method — метод, который необходимо вызвать в gRPC API.
- -token — токен для авторизации запросов к gRPC API, полученный на шаге 1.
Опционально можно задавать следующие параметры:
- -maxMessageSizeMB — максимальный размер сообщения передаваемый по gRPC. Значение по умолчанию: 128 МБ.
- -skipVersionCheck — сравнивать ли версии клиента и сервера. Значение по умолчанию: false.
- -timeout — принимает значение в секундах, нужно использовать на случай медленного соединения или, если запросы не выполняются с ошибкой timeout.
Получить список пользователей, файлы которых были изменены после указанного времени
Выполните следующую команду:
./bmwclient -server bmw.%domain% -tls=false -method cloudUsers -token %token% -startts %start_timestamp%
Пример запроса:
./bmwclient -server bmw.domain1.on-premise.ru \
-method cloudUsers -token JleaQ8dNU0UBX6oaugaWmJ12vaaFp9Sa \
-skipVersionCheck=true -startts 1695204000
-startts — дата и время изменения файлов у пользователей. Передается в формате UNIX timestamp.
Результат:
[INFO]: 2023/09/20 14:46:01 backend address is: bmw.domain1.on-premise.ru:443,
method is: cloudUsers
[INFO]: 2023/12/07 14:03:16 test_login_qdqm0ext@domain1.on-premise.ru
[INFO]: 2023/12/07 14:03:16 test_login_kjymg1yn@domain2.on-premise.ru
[INFO]: 2023/12/07 14:03:16 test_login_asyqg1ge@domain2.on-premise.ru
[INFO]: 2023/12/07 14:03:16 test_login_z0ohfzsc@domain2.on-premise.ru
[INFO]: 2023/12/07 14:03:16 test_login_aetdr5x9@domain3.on-premise.ru
[INFO]: 2023/12/07 14:03:16 test_login_2ixphpmh@domain4.on-premise.ru
Получить структуру файлов в облаке
Выполните следующую команду:
-email — email адрес почтового ящика, для которого выполняется запрос структуры.
Пример запроса:
./bmwclient -server bmw.domain1.on-premise.ru -method cloudBackup \
-domain wm2.on-premise.ru -token JleaQ8dNU0UBX6oaugaWmJ12vaaFp9Sa \
-email n.gruzdev@wm2.on-premise.ru
Результат:
[INFO]: 2023/09/27 14:13:56 backend address is: bmw.domain1.on-premise.ru:443,
method is: cloudBackup
[INFO]: tree:{info:{type:4 bizprj:2199023255553 ownerid:1000011 quota:2147483648} vfs:{name:"/" mode:2 list:{name:"Календарь" nodeid:"\x03\x00\x00\x00C\xc53d^b\xc4H\xad\xacН" mode:4098 list:{name:"1 (4).txt" mtime:1683124497 nodeid:"L\x00\x00\x00C\xc53d^b\xc4H\xad\xacН" mode:4097 size:9 hash:"Test info\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"}
}} acls:{treeid:"623432346630303030303030"}} path:"/recovered_data" lock:3
Создать полную резервную копию облака
Чтобы создать полную резервную копию файлов в облаке для конкретного пользователя и сохранить результат в директорию, нужно выполнить следующую команду:
./bmwclient -server bmw.%domain% -method cloudBackup -token %token% \
-email %email% -savePath backups -zip -save
- -email — email-адрес почтового ящика, для которого снимается резервная копия.
- -savePath — путь на диске, куда необходимо сохранить резервную копию облака.
- -save — сохранить результат резервного копирования на диск в директорию, без сжатия.
- -zip — сжать в zip-архив результаты резервного копирования и сохранить на диск.
Флаги -save и -zip взаимоисключающие, их нельзя использовать вместе в одном запросе.
Пример запроса с параметром -save:
./bmwclient -server bmw.domain1.on-premise.ru -method cloudBackup \
-token JleaQ8dNU0UBX6oaugaWmJ12vaaFp9Sa -email n.gruzdev@wm2.on-premise.ru \
-save -savePath ./backups
В примере, в параметре -savePath, указан путь относительно папки, в которой находится bmwclient.
Результат:
[INFO]: 2023/09/20 18:25:42 backend address is: bmw.domain1.on-premise.ru:443,
method is: cloudBackup
Результат резервного копирования в папке backups/n.gruzdev@wm2.on-premise.ru-1702027656
. Где 1702027656
— это дата бэкапа в формате UNIX timestamp.
Пример запроса с параметрами -zip:
./bmwclient -server bmw.domain1.on-premise.ru -method cloudBackup \
-token JleaQ8dNU0UBX6oaugaWmJ12vaaFp9Sa -email n.gruzdev@wm2.on-premise.ru \
-zip -savePath ./backups
Результат:
[INFO]: 2023/09/20 18:25:42 backend address is: bmw.domain1.on-premise.ru:443,
method is: cloudBackup
Единственное отличие от бэкапа с параметром -save
— содержимое папки сжимается в архив.
Содержимое бэкапа и файла tree.json
В папке с бэкапом всегда сохраняется файл tree.json
и файлы находящиеся в облаке. При этом одинаковые файлы сохраняются один раз, а в файле tree.json
содержится ссылка на этот файл. В файле tree.json
отражена структура файлов в облаке, она находится внутри объекта "vfs"
:
"vfs": {
...
"list": [
{
"name": "Календарь",
"nodeid": "AwAAAEPFM2ReYsRIrazQnQ==",
"mode": 4098,
"list": [
{
"name": "1.txt",
"mtime": 1683124497,
"nodeid": "TAAAAEPFM2ReYsRIrazQnQ==",
"mode": 4097,
"size": 9,
"hash": "VGVzdCBpbmZvAAAAAAAAAAAAAAA="
}
{
"name": "1A46632B-.jpeg",
"mtime": 1684172802,
"nodeid": "0gAAAH4dVWTo0RCJj27QnQ==",
"mode": 4097,
"size": 138053,
"hash": "bRMrS29FKvSoH4jexlhIumahHLw="
}
{
"name": "1B606A7D-.jpeg",
"mtime": 1684158651,
"nodeid": "xgAAAH4dVWTo0RCJj27QnQ==",
"mode": 4097,
"size": 138053,
"hash": "bRMrS29FKvSoH4jexlhIumahHLw="
}
...
]
}
]
}
"name"
— название файла/папки;"mtime"
— дата последнего обновления;"mode"
и"nodeid"
— метаданные;"size"
— размер файла в битах;"hash"
— хэш от содержимого файла.
Внимание
Файлы размером менее 20 байт не сохраняются в папку с бэкапом, а в файле tree.json
в поле hash
записывается содержимое файла в формате Base64.
Все файлы в этом примере находятся внутри папки Календарь. Также можно заметить, что у файлов 1A46632B-.jpeg
и 1B606A7D-.jpeg
одинаковое значение в поле hash
— значит это одинаковые файлы.
В интерфейсе облака это выглядит так:
Чтобы сопоставить файл из папки с бэкапом с файлом в tree.json
:
- Скопируйте значение в поле
hash
. - Сконвертируйте это значение из Base64 в Hex. Например, с помощью: https://base64.guru/converter/decode/hex.
-
Полученное значение — это файл в папке.
Восстановить данные в облаке
Выполните следующую команду:
./bmwclient -server bmw.%domain% -method cloudRestore \
-token %token% -email %email% -readPath %backups_dir%
- -email — email-адрес почтового ящика, для которого выполняется восстановление.
- -readPath — путь до папки или zip-архива, в которой находится копия облака.
Пример запроса:
./bmwclient -server bmw.domain1.on-premise.ru -method cloudRestore \
-token JleaQ8dNU0UBX6oaugaWmJ12vaaFp9Sa -email n.gruzdev@wm2.on-premise.ru \
-readPath ./backups/n.gruzdev@wm2.on-premise.ru-1695212742
Результат:
[INFO]: 2023/09/21 10:19:09 backend address is: bmw.domain1.on-premise.ru:443,
method is: cloudRestore
Результат, если указан путь до zip-архива:
[INFO]: 2023/09/21 10:19:09 backend address is: bmw.domain1.on-premise.ru:443,
method is: cloudRestore
[INFO]: 2023/12/08 17:09:49 unzipping tmp/n.gruzdev@wm2.on-premise.ru-1702027656/
tree.json
[INFO]: 2023/12/08 17:09:49 unzipping tmp/n.gruzdev@wm2.on-premise.ru-1702027656/
ce6b1c9881e86da69491a7fb1ea4ee8389be2bca
[INFO]: 2023/12/08 17:09:49 unzipping tmp/n.gruzdev@wm2.on-premise.ru-1702027656/
8ac8a3b6100a4b087630df8ec086bd6e96581d86
[INFO]: 2023/12/08 17:09:50 unzipping tmp/n.gruzdev@wm2.on-premise.ru-1702027656/
f1bd71e8454f37762b84f1ad78edecff59bf1414
[INFO]: 2023/12/08 17:09:50 unzipping tmp/n.gruzdev@wm2.on-premise.ru-1702027656/
dbb9c3ce2f14e98016cba2e2f37725bc8b97a639
[INFO]: 2023/12/08 17:09:50 unzipping tmp/n.gruzdev@wm2.on-premise.ru-1702027656/
b4ea03212c7a351c3a23cf6c72df30dec9e7182c
[INFO]: 2023/12/08 17:09:50 unzipping tmp/n.gruzdev@wm2.on-premise.ru-1702027656/
6d132b4b6f452af4a81f88dec65848ba66a11cbc
[INFO]: 2023/12/08 17:09:50 deleted temp directory ./tmp/