02 04/18
12:51

Backup-сервер с rsync на Windows

TL;DR:
Делаем бекап-сервер, который принимает данные от клиентов по rsync. В качестве ОС для сервера используем Windows, которая даёт нам дедупликацию и снапшоты (shadow copy). Восстановить бекап можно либо по тому же rsync, либо просто скопировав файлы из сетевой шары.

Полтора года назад я делал на windows сервер с функционалом, аналогичным описанному в этой статье. Сервер исправно трудился всё это время, но теперь необходимость в нём отпала. Отключение сервера – хороший повод вспомнить и описать процесс его настройки.

Почему сервер на Windows? Потому, что я разочаровался в дедупликации ZFS. Проблема в том, что она онлайновая (происходит в момент записи). В тот момент, когда надо просто положить блок данных на диск, сначала считается хэш этого блока, потом ищется в таблице другой блок с таким же хэшем, и если блок не найден, то он наконец-то пишется на диск. Чем больше данных на винте, тем больше хэшей в таблице, тем дольше поиск, тем медленнее запись. Windows этим не болеет, ввиду оффлайновой (отложенной) дедупликации. Данные сначала пишутся на диск, а дедуплицируются потом, в свободное от нагрузки время.

Поэтому был взят Windows Server, на котором была включена дедупликация. Сервер ставился в режиме Core, поэтому на его роль подойдет и Hyper-V Server, на котором умельцы тоже уже включают дедупликацию.

Ингридиенты:

  • cwRsyncServer – rsync-сервер для Windows
  • ShadowExplorer – программа для работы с теневыми копиями
  • blat – программа с романтическим названием для отсылки почты из командной строки

Поставил cwRsyncServer и прописал в его конфиге c:\Program Files (x86)\ICW\rsyncd.conf:

use chroot = false
strict modes = false
hosts allow = *
log file = rsyncd.log
uid = 0
gid = 0

# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#
[rsync]
path = /cygdrive/d/Rsync
read only = false
transfer logging = yes

На клиенте настроил копирование файлов на адрес rsync://backupserver.local/rsync. На этот вопросе подробно останавливаться не буду, всё стандартно.

Продолжу про сервер. ShadowExplorerPortable и blat были просто распакованы в каталог c:\bin. В тот же каталог положил вот такой скрипт shadow_rotate.bat:

vssadmin create shadow /for=d: > d:\lastbackup.txt
vssadmin delete shadows /for=d: /oldest /quiet >> d:\lastbackup.txt
fsutil volume diskfree d: >> d:\lastbackup.txt
powershell  Get-DedupStatus >> d:\lastbackup.txt
c:\bin\blat.exe d:\lastbackup.txt -to max@mail.local -subject "backup02: shadow rotate" 

Добавил этот shadow_rotate.bat в шедулер, чтобы запускался раз в неделю.

Сделал руками 10 штук теневых копий. Содержимое не важно, важно их наличие:

vssadmin create shadow /for=d:

Как не трудно догадаться, забекапленные данные у меня хранились на диске D: в каталоге Rsync. Скрипт делал одну новую теневую копию и удалял одну самую старую теневую копию. О результатах докладывал на адрес max@mail.local, присовокупляя статистику по эффективности дедупликации и инфрмацию о свободном дисковом пространстве. Вот пример такого письма:

vssadmin 1.1 - Volume Shadow Copy Service administrative command-line tool
(C) Copyright 2001-2013 Microsoft Corp.

Successfully created shadow copy for 'd:\'
    Shadow Copy ID: {9949b3f5-5756-43f4-996b-8b2b11d4ed49}
    Shadow Copy Volume Name: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy395
vssadmin 1.1 - Volume Shadow Copy Service administrative command-line tool
(C) Copyright 2001-2013 Microsoft Corp.

Total # of free bytes        : 3097947373568
Total # of bytes             : 8001369927680
Total # of avail free bytes  : 3097947373568

FreeSpace    SavedSpace   OptimizedFiles     InPolicyFiles      Volume         
---------    ----------   --------------     -------------      ------         
2.82 TB      937.26 GB    25492              26633              D:     

В принципе, всё. Клиент пишет файлы на сервер, сервер крутит карусель из теневых копий на диске с бекапами.

С помощью ShadowExplorer можно посмотреть список снапшотов и список файлов в каждом снапшоте:

Можно нажать на файл правой кнопкой мыши и, выбрав Export, сохранить файл куда-нибудь.

А можно запустить проводник (или total commander, например), перейти на виртуальный диск Z: и получить прямой доступ на чтение к выбранному в данный момент в ShadowExplorer снапшоту. Важно: если запущен ShadowExplorer, то механизм теневых копий будет работать не так, как ожидается. Соответственно и скрипт shadow_rotate.bat будет работать неправильно.


You must be logged in to post a comment.