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

25 02/15
14:56

Ubuntu 14.04 и exfat-nofuse

Exfat – это файловая система, придуманная компанией Microsoft специально для флешек. В отличии от FAT32, exfat умеет хранить файлы размером больше 4Gb, а в отличии от NTFS, exfat умеет “выравнивать износ” ячеек (что должно здорово продлевать срок жизни флешек). Поддерживается в Windows начиная с XP SP2, в OS X начиная с 10.6.5. В Ubuntu 14.04 так же поддерживается из коробки, для этого достаточно установить пакет exfat-fuse. Но как и все драйвера, работающие через fuse, этот драйвер медленнее, чем драйвер, выполненный в виде модуля ядра. Его мы и будем ставить. Чтобы этот модуль автоматически пересобирался при обновлении ядра, добавим его в DKMS.
(more…)

19 02/15
20:21

Virtualbox: правильный экспорт виртуалки с Windows 7/8/8.1 в OVA

Бывает полезно установить windows в виртуальную машину, активировать и экспортировать в ova. Из этого OVA можно сколько угодно раз импортировать машину, экспериментировать, удалять и снова импортировать. Даже на другой компьютер переносить. Только при каждом импорте отъезжает активация.

При удалении файлов внутри виртуальной машины размер образа меньше не становится. В результате и OVA занимает больше места, чем хотелось бы.

Обе эти проблемы можно решить.
(more…)

23 11/14
23:16

И снова о пиве

Сегодня у меня впервые за последние лет 10 потребовали паспорт при покупке пива. Забавно это не потому, что мне 35 лет и я бородат. А потому, что пиво было безалкогольным.

19 11/14
00:47

IPsec между Linux и Mikrotik.

Объединяем два офиса с помощью шифрованного туннеля. В первом офисе роутером является Mikrotik, во втором сервер с Linux. На сервере установлена Ubuntu 12.04, на которой будет установлен и настроен openswan. Поскольку IP на обоих концах фиксированные и дополнительных подключающихся по vpn клиентов не планируется, L2TP использовать не будем. Только чистый IPSec.
(more…)