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 будет работать неправильно.
Tags: Copy-Paste HOWTO