UrBackup: различия между версиями

Материал из sysadm
Перейти к навигации Перейти к поиску
 
(не показаны 43 промежуточные версии этого же участника)
Строка 5: Строка 5:
  
 
== Сервер ==
 
== Сервер ==
=== Структура сервера для Linux ===
+
=== Важные факты ===
 
 
'''Важные факты'''
 
 
* Веб-интерфейс сервера доступен через FastCGI (на порту 55413) и HTTP (на порту 55414).
 
* Веб-интерфейс сервера доступен через FastCGI (на порту 55413) и HTTP (на порту 55414).
 
* На порту FastCGI может быть настроено шифрование SSL.
 
* На порту FastCGI может быть настроено шифрование SSL.
 
* Для обнаружения клиентов, сервер каждые 50 сек. отправляет широковещательный UDP пакет на 255.255.255.255:35622
 
* Для обнаружения клиентов, сервер каждые 50 сек. отправляет широковещательный UDP пакет на 255.255.255.255:35622
 
* Сервер UrBackup может подключаться на http://198.58.118.162 для загрузки обновлений серверной и клиентской части.
 
* Сервер UrBackup может подключаться на http://198.58.118.162 для загрузки обновлений серверной и клиентской части.
 +
 +
=== Структура сервера для Linux ===
  
 
'''Рабочие каталоги сервера'''
 
'''Рабочие каталоги сервера'''
Строка 53: Строка 53:
 
firewall-cmd --reload
 
firewall-cmd --reload
 
</pre>
 
</pre>
 +
 +
=== Структура сервера для Windows ===
 +
 +
нужно смотреть, пока нет информации
  
 
=== Принцип работы резервного копирования файлов ===
 
=== Принцип работы резервного копирования файлов ===
Строка 67: Строка 71:
 
* Если во время резервного копирования клиент переходит в автономный режим, а резервное копирование выполняется инкрементально, сервер продолжает создавать жесткие ссылки на файлы в предыдущем резервном копировании, но не пытается снова загрузить файлы. Файлы, которые не удалось загрузить, не сохраняются в списке файлов на стороне сервера. Если резервная копия является полной и клиент переходит в автономный режим, процесс резервного копирования прерывается и сохраняется список частичных файлов, включающий все файлы, загруженные до этого момента.
 
* Если во время резервного копирования клиент переходит в автономный режим, а резервное копирование выполняется инкрементально, сервер продолжает создавать жесткие ссылки на файлы в предыдущем резервном копировании, но не пытается снова загрузить файлы. Файлы, которые не удалось загрузить, не сохраняются в списке файлов на стороне сервера. Если резервная копия является полной и клиент переходит в автономный режим, процесс резервного копирования прерывается и сохраняется список частичных файлов, включающий все файлы, загруженные до этого момента.
 
* Если все файлы были переданы, сервер обновляет «текущую» символическую ссылку в расположении хранилища резервной копии клиента, чтобы указать на новую резервную копию. Это происходит только в том случае, если клиент не отключился во время резервного копирования.
 
* Если все файлы были переданы, сервер обновляет «текущую» символическую ссылку в расположении хранилища резервной копии клиента, чтобы указать на новую резервную копию. Это происходит только в том случае, если клиент не отключился во время резервного копирования.
 +
 +
=== Файловые бэкапы ===
 +
* при полном файловом бэкапе на сервер передаются все файлы
 +
** после загрузки файла вычисляется хэш, сверяется со списком имеющихся файлов, если найден, то создается хардлинк на имеющийся файл, иначе сохраняется новый файл
 +
* при инкрементном файловом бэкапе на сервер передаются только новые и измененные файлы
 +
** если на сервере включено использование символических ссылок (настройка по умолчанию), то не изменившиеся с последнего бэкапа каталоги содержащие более 10 файлов переносятся из каталога предыдущего бэкапа в пул “.directory_pool”
 +
*** в каталоге предыдущего бэкапа создается символическая ссылка на соответствующий каталог пула “.directory_pool”
 +
** вся структура каталога предыдущего бэкапа копируется в каталог нового бэкапа, данные файлов не дублируются, создаются новые хардлинки
 +
** загруженные новые и измененные файлы сохраняются в новый каталог бэкапа
 +
* инкрементные файловые бэкапы содержат всю структуру файлов и каталогов, поэтому для полного восстановления не требуется наличие полных бэкапов
 +
* в веб-интерфейсе отображается не полный объем файловых бэкапов, а только объем новых данных, которые были сохранены при его выполнении
 +
 +
 +
'''''hard link''''' - это имя файла + inode указывающий на его данные
 +
 +
* любой файл имеет минимум один hard link
 +
* множество файлов в разных каталогах с разными именами могут иметь один и тот же inode и соответственно ссылаться на одни и те же физические данные
 +
* для файловой системы все hard link-и равнозначны, нет главных и второстепенных
 +
* данные файла освобождаются при удалении последнего hard link-а
 +
* атрибуты файла (владелец, группа владельца, доступы, время создания, время модификации, размер, ...) хранятся в его заголовке, который принадлежит к данным файла, поэтому у разных hard link-ов одного файла всегда будут одинаковые атрибуты
 +
 +
'''hard link-и и подсчет размера данных на диске'''
 +
<pre>
 +
mkdir -p ~/test/dir1 ~/test/dir2
 +
 +
# создание файла 1 GiB
 +
fallocate -l 1g ~/test/dir1/file1
 +
 +
# создание 3-х дополнительных hard link-а
 +
cp -l ~/test/dir1/file1 ~/test/dir1/file2
 +
cp -l ~/test/dir1/file1 ~/test/dir2/file3
 +
cp -l ~/test/dir1/file1 ~/test/dir2/file4
 +
 +
ls -lhis ~/test/dir1
 +
итого 2,0G
 +
50338615 1,0G -rw-r--r--. 4 user user 1,0G окт 11 01:30 file1
 +
50338615 1,0G -rw-r--r--. 4 user user 1,0G окт 11 01:30 file2
 +
 +
ls -lhis ~/test/dir2
 +
итого 2,0G
 +
50338615 1,0G -rw-r--r--. 4 user user 1,0G окт 11 01:30 file3
 +
50338615 1,0G -rw-r--r--. 4 user user 1,0G окт 11 01:30 file4
 +
 +
du -sh  ~/test
 +
1,0G /home/user/test
 +
 +
du -sh ~/test/dir1
 +
1,0G /home/user/test/dir1
 +
 +
du -sh ~/test/dir2
 +
1,0G /home/user/test/dir2
 +
 +
du -sh ~/test/*
 +
1,0G /home/user/test/dir1
 +
0 /home/user/test/dir2
 +
 +
du -sh ~/test/dir1 ~/test/dir2
 +
1,0G /home/user/test/dir1
 +
0 /home/user/test/dir2
 +
 +
du -sh ~/test/dir2 ~/test/dir1
 +
1,0G /home/user/test/dir2
 +
0 /home/user/test/dir1
 +
</pre>
  
 
=== Чистка ===
 
=== Чистка ===
  
* Если полный файловый бэкап был прерван на стороне клиента, то информация о нем не записывается в базу сервера, каталог бэкапа остается и не используется последующими бэкапами.
+
* Если полный файловый бэкап был прерван на стороне клиента, то он не отображается в списке бэкапов, но информация о сохраненных файлах запишется в базу и будет использоваться при последующих бэкапах.
* В каталоге пула “.directory_pool” часто остаются каталоги на которые не осталось символических ссылок из каталогов резервных копий.
+
* Данные полных и инкрементных файловых бэкапов не дублируются, каталоги всех файловых бэкапов содержат хардлинки на те же физические данные файлов.
 +
** Любое количество полных и инкрементных файловых бэкапов будет занимать столько же места сколько один полный бэкап плюс объем всех измененных файлов.
 +
** Удаление лишних полных бэкапов обычно не увеличивает свободное место
 +
** Инкрементные файловые бэкапы как и полные содержат весь список файлов, для восстановления полного объема данных достаточно иметь последний инкрементный бэкап
 +
* Если на сервере включено использование символических ссылок (настройка по умолчанию), то в каталогах полных и инкрементных бэкапов часть подкаталогов будет заменяться на символические ссылки в скрытый каталог пула “.directory_pool”
 +
** Каталоги в “.directory_pool” также могут содержать символические ссылки на другие каталоги в “.directory_pool”
 +
** Замена каталогов на символические ссылки происходит только при выполнении инкрементного файлового бэкапа, но выполняется в том числе и каталогах полных бэкапов
 +
** Иногда из-за сбоев и ручных чисток, каталог “.directory_pool” может содержать каталоги на которые нет символических ссылок, используйте штатную чистку remove-unknown
 +
 
 +
<pre>
 +
Настройки / Дополнительно
 +
  Использовать символические ссылки для инкрементального бэкапа фалов [v]
 +
</pre>
  
 
'''Штатные механизмы чистки'''
 
'''Штатные механизмы чистки'''
Строка 77: Строка 157:
 
Во время чистки не должны выполняться задания бэкапа.
 
Во время чистки не должны выполняться задания бэкапа.
 
<pre>
 
<pre>
# удаление из хранилища каталогов о которых нет информации в базе данных UrBackup
+
# освобождение части хранилища, где x процент (например 10%) или объем (например 10G) который необходимо очистить
 +
# 0% означает удаление только устаревших бэкапов, которые система еще не успела автоматически удалить
  
 
# Linux
 
# Linux
urbackupsrv remove-unknown
+
urbackupsrv cleanup --amount x
  
 
# Windows
 
# Windows
remove_unknown.bat
+
cleanup.bat x
  
# освобождение части хранилища, где x процент (например 10%) или объем (например 10G) который необходимо очистить
+
# удаление из хранилища каталогов о которых нет информации в базе данных UrBackup
# 0% означает удаление только устаревших бэкапов, которые система еще не успела автоматически удалить
 
  
 
# Linux
 
# Linux
urbackupsrv cleanup --amount x
+
urbackupsrv remove-unknown
  
 
# Windows
 
# Windows
cleanup.bat x
+
remove_unknown.bat
 
 
 
</pre>
 
</pre>
  
 
''' Ручная чистка '''
 
''' Ручная чистка '''
  
Если штатные механизмы не справляются, то можно удалить вручную.
+
* Для ручной чистки используйте штатные механизмы чистки (см. выше)
Для этого нужно понимать что вы удаляете и принимать риск, что данные в базе могут стать не согласованными с каталогами резервных копий.
+
* Если вам кажется что штатные механизмы не справляются, то скорее всего вы что-то не понимаете в структуре хранения данных.
 +
* Не пытайтесь отдельно посчитать сколько места занимают каталоги файловых бэкапов, корректно посчитать занимаемый объем можно только на уровне каталога клиента
 +
* Необходимо помнить, что каталоги файловых бэкапов содержат хардлинки на одни и те же файлы, занимаемое файлом место освобождается только при удалении последнего хардлинка указывающего на него
  
Пример скрипта ручной чистки каталога .directory_pool
+
Пример скрипта ручной чистки каталога .directory_pool (лучше это не использовать)
 
<pre>
 
<pre>
 
#!/bin/bash
 
#!/bin/bash
Строка 107: Строка 188:
 
cli_path=/path/to/urbackup/<client_name>
 
cli_path=/path/to/urbackup/<client_name>
  
# составляем список всех линков со всех каталогов резервных копий
+
# составляем список всех символических ссылок
find -L ${cli_path}/220610-2333 -type l -exec ls -lh {} \; | cut -d '>' -f 2 > $cli_path/links.txt
+
find ${cli_path}/ -type l -exec ls -lh {} \; | cut -d '>' -f 2 > $cli_path/links.txt
find -L ${cli_path}/220611-0814 -type l -exec ls -lh {} \; | cut -d '>' -f 2 >> $cli_path/links.txt
 
#...
 
  
# удаляем каталоги пула на которые нет линков в каталогах резервных копий
+
# выводим каталоги пула на которые нет линков
for f in $cli_path/.directory_pool/??/*; do
+
for f in ${cli_path}/.directory_pool/??/*; do
 
   cat $cli_path/links.txt | grep $f >/dev/null || (
 
   cat $cli_path/links.txt | grep $f >/dev/null || (
 
     echo $f
 
     echo $f
     rm -rf "$f"
+
     # rm -rf "$f"
 
   )
 
   )
 
done
 
done
 +
 +
</pre>
 +
 +
=== Архивация ===
 +
 +
UrBackup имеет возможность помечать бэкапы любых типов как архивные.
 +
 +
Архивные бэкапы не могут быть удалены ночной или экстренной очисткой пока они отмечены как архивные.
 +
 +
Для того чтобы отметить бэкап как архивный, откройте раздел "Бэкапы", выберите нужного клиента, выберите бэкап и установите галку в поле "Архивировано".
 +
 +
UrBackup также имеет возможность автоматически помечать бэкапы любых типов как архивные.
 +
 +
Общие настройки для всего сервера можно установить в разделе "Настройки / Архив"
 +
 +
Настройки для отдельного клиента можно установить в разделе "Настройки / Настройки клиента / (выберите клиента) / Архив"
 +
 +
<pre>
 +
Таблица расписания имеет следующие поля:
 +
  Архивировать каждые    - интервал в течение которого задание не должно повторяться
 +
  Архивировать за        - интервал в течение которого отметка архивации должна сохраняться (предположение, нужно проверить)
 +
  Расписание архивации  - расписание в формате (час *,0-23; день *,1-31; месяц *,1-12; день недели *,0-7), * - все допустимые значения,
 +
                          допустимо перечисление значений через запятую
 +
  Тип бэкапа            - см. ниже
 +
  Буквы томов            - для бэкапов типа образ, можно дополнительно указать букву тома
 +
 +
Тип бэкапа:
 +
  Резервная копия файла
 +
    Полный файловый бэкап
 +
    Инкрементальный файловый бэкап
 +
  Бэкап образа
 +
    Полный образ
 +
    Инкрементальный образ
 +
</pre>
 +
 +
Примеры:
 +
<pre>
 +
Выполнять в первую пятницу каждого месяца в 0 часов:
 +
  Архивировать каждые: 27 дней
 +
  Расписание архивации: *;*;*;5
 +
 +
Выполнять каждую пятницу в 3 часа ночи:
 +
  Архивировать каждые: 1 день      (указан конкретный час, ограничивать повторы не требуется)
 +
  Расписание архивации: 3;*;*;5
 +
 +
Выполнять 1 числа каждого месяца в 0 часов:
 +
  Архивировать каждые: 2 дня      (исключает повторы каждый час, возможно 1 будет ограничивать также)
 +
  Расписание архивации: *;1;*;*
 +
 +
Выполнять по средам и пятницам:
 +
  Архивировать каждые: 2 дня      (исключает повторы каждый час, возможно 1 будет ограничивать также)
 +
  Расписание архивации: *;*;*;3,5
 +
 +
Выполнять ежедневно каждые 4 часа:
 +
  Архивировать каждые: 4 часа      (исключает повторы в течение 4-х часов)
 +
  Расписание архивации: *;*;*;*
 +
 +
# обратите внимание, что для запуска задания должны выполняться оба условия
 +
# значение в поле "Архивировать каждые" исключает повторы в заданном интервале
  
 
</pre>
 
</pre>
Строка 144: Строка 282:
  
 
== Клиент для Linux ==
 
== Клиент для Linux ==
 
[https://www.urbackup.org/download.html#linux_all_binary Установка клиента Linux]
 
 
Строку запуска скрипта установки необходимо брать с сайта (ссылка выше). На 6.10.2020 она выглядит так.
 
<pre>
 
TF=$(mktemp) && wget "https://hndl.urbackup.org/Client/2.4.10/UrBackup%20Client%20Linux%202.4.10.sh" -O $TF && sudo sh $TF; rm -f $TF
 
</pre>
 
 
<pre>
 
systemctl status urbackupclientbackend
 
</pre>
 
  
 
Рабочий каталог клиента
 
Рабочий каталог клиента
Строка 164: Строка 291:
  
 
Если необходимо переключить клиента на другой сервер, то необходимо удалить рабочий каталог клиента <code>/var/lib/urbackup</code>
 
Если необходимо переключить клиента на другой сервер, то необходимо удалить рабочий каталог клиента <code>/var/lib/urbackup</code>
 
Скрипт удаление urbackup клиента
 
<pre>
 
/usr/local/sbin/uninstall_urbackupclient
 
</pre>
 
  
 
Настройка механизма снепшотов
 
Настройка механизма снепшотов
Строка 256: Строка 378:
 
= Установка =
 
= Установка =
  
== Установка на Ubuntu 20.04 ==
+
== Установка сервера на Ubuntu 20.04 ==
  
 
Установка
 
Установка
Строка 275: Строка 397:
 
</pre>
 
</pre>
  
== Установка на CentOS 8 ==
+
== Установка сервера на CentOS 8 ==
 
<pre>
 
<pre>
 
# создание пользователя urbackup
 
# создание пользователя urbackup
Строка 297: Строка 419:
 
</pre>
 
</pre>
  
== Установка из исходников ==
+
== Установка сервера из исходников ==
 
* На официальном сайте [https://www.urbackup.org www.urbackup.org] откройте раздел '''Download'''
 
* На официальном сайте [https://www.urbackup.org www.urbackup.org] откройте раздел '''Download'''
 
* Найдите раздел '''Install from sources'''
 
* Найдите раздел '''Install from sources'''
Строка 365: Строка 487:
 
rm -rf /tmp/urbackup-server-2.5.33
 
rm -rf /tmp/urbackup-server-2.5.33
 
rm -f /tmp/urbackup-server-2.5.33.tar.gz
 
rm -f /tmp/urbackup-server-2.5.33.tar.gz
 +
</pre>
 +
 +
== Установка клиента на Linux ==
 +
 +
'''Скрипт установки urbackup клиента'''
 +
 +
[https://www.urbackup.org/download.html#linux_all_binary Установка клиента Linux]
 +
 +
Строку запуска скрипта установки необходимо брать с сайта (ссылка выше). На 6.10.2020 она выглядит так.
 +
<pre>
 +
TF=$(mktemp) && wget "https://hndl.urbackup.org/Client/2.4.10/UrBackup%20Client%20Linux%202.4.10.sh" -O $TF && sudo sh $TF; rm -f $TF
 +
</pre>
 +
 +
<pre>
 +
systemctl status urbackupclientbackend
 +
</pre>
 +
 +
'''Скрипт удаления urbackup клиента'''
 +
<pre>
 +
/usr/local/sbin/uninstall_urbackupclient
 +
</pre>
  
 +
== Установка сервера/клиента на Windows ==
 +
* Скачайте инсталлятор с официального сайта [https://www.urbackup.org/ www.urbackup.org]
 +
* Запустите и следуйте инструкциям
  
 +
== Добавление пути к исполняемым файлам ==
 +
'''Linux'''
 +
<pre>
 +
vi ~/.bash_profile
 +
#-----------------------------------------------
 +
export PATH=${PATH}:/usr/local/bin
 +
#-----------------------------------------------
 
</pre>
 
</pre>
 +
 +
'''Windows'''
 +
* Проверьте переменную PATH на уровне системы и профиля пользователя
 +
* Если необходимо добавьте соответствующий путь
  
 
= Настройка =
 
= Настройка =

Текущая версия на 03:01, 11 октября 2025

Сайт разработчика (https://www.urbackup.org/)

Обзор

Сервер

Важные факты

  • Веб-интерфейс сервера доступен через FastCGI (на порту 55413) и HTTP (на порту 55414).
  • На порту FastCGI может быть настроено шифрование SSL.
  • Для обнаружения клиентов, сервер каждые 50 сек. отправляет широковещательный UDP пакет на 255.255.255.255:35622
  • Сервер UrBackup может подключаться на http://198.58.118.162 для загрузки обновлений серверной и клиентской части.

Структура сервера для Linux

Рабочие каталоги сервера

# веб-интерфейс
/usr/share/urbackup         # здесь
/usr/local/share/urbackup   # или здесь

# база данных конфигурации и прочие рабочие файлы
/var/urbackup               # здесь
/usr/local/var/urbackup     # или здесь

Исполняемые файлы

/usr/bin/urbackupsrv
/usr/bin/urbackup_snapshot_helper
/usr/bin/urbackup_mount_helper


Настройка Firewall

vi /usr/lib/firewalld/services/urbackup-server.xml
#-------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>urbackup-server</short>
  <description>UrBackup server</description>
  <port protocol="tcp" port="55413"/>
  <port protocol="tcp" port="55414"/>
  <port protocol="tcp" port="55415"/>
  <port protocol="udp" port="35623"/>
</service>
#-------------------------------------------------------------------------------

firewall-cmd --reload
firewall-cmd --info-service=urbackup-server

firewall-cmd --permanent --zone=<your_zone> --add-service=urbackup-server
firewall-cmd --reload

Структура сервера для Windows

нужно смотреть, пока нет информации

Принцип работы резервного копирования файлов

актуальную версию см. в документации

  • Резервное копирование запускается когда сервер обнаруживает, что время до последнего инкрементного резервного копирования больше, чем интервал для инкрементного резервного копирования, или время до последнего полного резервного копирования больше, чем интервал для полного резервного копирования. Резервное копирование также можно запускать по запросам клиентов.
  • Сервер создает новый каталог для сохранения резервной копии. Схема именования для этого каталога - YYMMDD-HHMM. Каталог создается в хранилище резервной копии в каталоге, имя которого совпадает с именем клиента.
  • Сервер запрашивает у клиента построение списка файлов. Клиент создает список файлов и сообщает, что это сделано.
  • Сервер загружает с клиента ’urbackup/data/filelist.ub’. Если это инкрементальное резервное копирование, то сервер сравнивает новый ’filelist.ub’ с последним полученным от клиента и определяет различия.
  • Сервер начинает загрузку файлов. Если это инкрементальное резервное копирование, то загружаются только новые и измененные файлы. Если резервное копирование полное, то с клиента загружаются все файлы.
  • Сервер загружает файл во временный файл и размещает его в папке urbackup_tmp_files в каталоге хранилища резервных копий, либо в указанную в расширенных настройках временную папку. После успешной загрузки файла, сервер вычисляет его хэш и проверяет наличие другого файла с таким же значением хэша. Если такой файл существует, они считаются одинаковыми, и жесткая ссылка на другой файл сохраняется, а временный файл удаляется. Если такой файл не существует, файл перемещается в новое расположение резервной копии. Путь к файлу и значение хэша сохраняются в базе данных сервера.
  • Если выполняется инкрементальное резервное копирование и файл не изменен, то создается жесткая ссылка на соответствующий файл предыдущего резервного копирования.
  • Если выполняется инкрементальное резервное копирование при включенной опции "использовать символические ссылки при инкрементальном резервном копировании" и каталог с более чем 10 файлами или папками не изменился, то каталог переносится в “.directory_pool” и на него создаются символьные ссылки в старом и новом каталоге резервного копирования. Количество символьных ссылок на данный каталог увеличивается/уменьшается каждый раз когда создается/удаляется другая символьная ссылка.
  • Если во время резервного копирования клиент переходит в автономный режим, а резервное копирование выполняется инкрементально, сервер продолжает создавать жесткие ссылки на файлы в предыдущем резервном копировании, но не пытается снова загрузить файлы. Файлы, которые не удалось загрузить, не сохраняются в списке файлов на стороне сервера. Если резервная копия является полной и клиент переходит в автономный режим, процесс резервного копирования прерывается и сохраняется список частичных файлов, включающий все файлы, загруженные до этого момента.
  • Если все файлы были переданы, сервер обновляет «текущую» символическую ссылку в расположении хранилища резервной копии клиента, чтобы указать на новую резервную копию. Это происходит только в том случае, если клиент не отключился во время резервного копирования.

Файловые бэкапы

  • при полном файловом бэкапе на сервер передаются все файлы
    • после загрузки файла вычисляется хэш, сверяется со списком имеющихся файлов, если найден, то создается хардлинк на имеющийся файл, иначе сохраняется новый файл
  • при инкрементном файловом бэкапе на сервер передаются только новые и измененные файлы
    • если на сервере включено использование символических ссылок (настройка по умолчанию), то не изменившиеся с последнего бэкапа каталоги содержащие более 10 файлов переносятся из каталога предыдущего бэкапа в пул “.directory_pool”
      • в каталоге предыдущего бэкапа создается символическая ссылка на соответствующий каталог пула “.directory_pool”
    • вся структура каталога предыдущего бэкапа копируется в каталог нового бэкапа, данные файлов не дублируются, создаются новые хардлинки
    • загруженные новые и измененные файлы сохраняются в новый каталог бэкапа
  • инкрементные файловые бэкапы содержат всю структуру файлов и каталогов, поэтому для полного восстановления не требуется наличие полных бэкапов
  • в веб-интерфейсе отображается не полный объем файловых бэкапов, а только объем новых данных, которые были сохранены при его выполнении


hard link - это имя файла + inode указывающий на его данные

  • любой файл имеет минимум один hard link
  • множество файлов в разных каталогах с разными именами могут иметь один и тот же inode и соответственно ссылаться на одни и те же физические данные
  • для файловой системы все hard link-и равнозначны, нет главных и второстепенных
  • данные файла освобождаются при удалении последнего hard link-а
  • атрибуты файла (владелец, группа владельца, доступы, время создания, время модификации, размер, ...) хранятся в его заголовке, который принадлежит к данным файла, поэтому у разных hard link-ов одного файла всегда будут одинаковые атрибуты

hard link-и и подсчет размера данных на диске

mkdir -p ~/test/dir1 ~/test/dir2

# создание файла 1 GiB
fallocate -l 1g ~/test/dir1/file1

# создание 3-х дополнительных hard link-а
cp -l ~/test/dir1/file1 ~/test/dir1/file2
cp -l ~/test/dir1/file1 ~/test/dir2/file3
cp -l ~/test/dir1/file1 ~/test/dir2/file4

ls -lhis ~/test/dir1
итого 2,0G
50338615 1,0G -rw-r--r--. 4 user user 1,0G окт 11 01:30 file1
50338615 1,0G -rw-r--r--. 4 user user 1,0G окт 11 01:30 file2

ls -lhis ~/test/dir2
итого 2,0G
50338615 1,0G -rw-r--r--. 4 user user 1,0G окт 11 01:30 file3
50338615 1,0G -rw-r--r--. 4 user user 1,0G окт 11 01:30 file4

du -sh  ~/test
1,0G	/home/user/test

du -sh ~/test/dir1
1,0G	/home/user/test/dir1

du -sh ~/test/dir2
1,0G	/home/user/test/dir2

du -sh ~/test/*
1,0G	/home/user/test/dir1
0	/home/user/test/dir2

du -sh ~/test/dir1 ~/test/dir2
1,0G	/home/user/test/dir1
0	/home/user/test/dir2

du -sh ~/test/dir2 ~/test/dir1
1,0G	/home/user/test/dir2
0	/home/user/test/dir1

Чистка

  • Если полный файловый бэкап был прерван на стороне клиента, то он не отображается в списке бэкапов, но информация о сохраненных файлах запишется в базу и будет использоваться при последующих бэкапах.
  • Данные полных и инкрементных файловых бэкапов не дублируются, каталоги всех файловых бэкапов содержат хардлинки на те же физические данные файлов.
    • Любое количество полных и инкрементных файловых бэкапов будет занимать столько же места сколько один полный бэкап плюс объем всех измененных файлов.
    • Удаление лишних полных бэкапов обычно не увеличивает свободное место
    • Инкрементные файловые бэкапы как и полные содержат весь список файлов, для восстановления полного объема данных достаточно иметь последний инкрементный бэкап
  • Если на сервере включено использование символических ссылок (настройка по умолчанию), то в каталогах полных и инкрементных бэкапов часть подкаталогов будет заменяться на символические ссылки в скрытый каталог пула “.directory_pool”
    • Каталоги в “.directory_pool” также могут содержать символические ссылки на другие каталоги в “.directory_pool”
    • Замена каталогов на символические ссылки происходит только при выполнении инкрементного файлового бэкапа, но выполняется в том числе и каталогах полных бэкапов
    • Иногда из-за сбоев и ручных чисток, каталог “.directory_pool” может содержать каталоги на которые нет символических ссылок, используйте штатную чистку remove-unknown
Настройки / Дополнительно
  Использовать символические ссылки для инкрементального бэкапа фалов [v] 

Штатные механизмы чистки

Во время чистки не должны выполняться задания бэкапа.

# освобождение части хранилища, где x процент (например 10%) или объем (например 10G) который необходимо очистить
# 0% означает удаление только устаревших бэкапов, которые система еще не успела автоматически удалить

# Linux
urbackupsrv cleanup --amount x

# Windows
cleanup.bat x

# удаление из хранилища каталогов о которых нет информации в базе данных UrBackup

# Linux
urbackupsrv remove-unknown

# Windows
remove_unknown.bat

Ручная чистка

  • Для ручной чистки используйте штатные механизмы чистки (см. выше)
  • Если вам кажется что штатные механизмы не справляются, то скорее всего вы что-то не понимаете в структуре хранения данных.
  • Не пытайтесь отдельно посчитать сколько места занимают каталоги файловых бэкапов, корректно посчитать занимаемый объем можно только на уровне каталога клиента
  • Необходимо помнить, что каталоги файловых бэкапов содержат хардлинки на одни и те же файлы, занимаемое файлом место освобождается только при удалении последнего хардлинка указывающего на него

Пример скрипта ручной чистки каталога .directory_pool (лучше это не использовать)

#!/bin/bash

cli_path=/path/to/urbackup/<client_name>

# составляем список всех символических ссылок
find ${cli_path}/ -type l -exec ls -lh {} \; | cut -d '>' -f 2 > $cli_path/links.txt

# выводим каталоги пула на которые нет линков
for f in ${cli_path}/.directory_pool/??/*; do
  cat $cli_path/links.txt | grep $f >/dev/null || (
    echo $f
    # rm -rf "$f"
  )
done

Архивация

UrBackup имеет возможность помечать бэкапы любых типов как архивные.

Архивные бэкапы не могут быть удалены ночной или экстренной очисткой пока они отмечены как архивные.

Для того чтобы отметить бэкап как архивный, откройте раздел "Бэкапы", выберите нужного клиента, выберите бэкап и установите галку в поле "Архивировано".

UrBackup также имеет возможность автоматически помечать бэкапы любых типов как архивные.

Общие настройки для всего сервера можно установить в разделе "Настройки / Архив"

Настройки для отдельного клиента можно установить в разделе "Настройки / Настройки клиента / (выберите клиента) / Архив"

Таблица расписания имеет следующие поля:
  Архивировать каждые    - интервал в течение которого задание не должно повторяться
  Архивировать за        - интервал в течение которого отметка архивации должна сохраняться (предположение, нужно проверить)
  Расписание архивации   - расписание в формате (час *,0-23; день *,1-31; месяц *,1-12; день недели *,0-7), * - все допустимые значения,
                           допустимо перечисление значений через запятую
  Тип бэкапа             - см. ниже
  Буквы томов            - для бэкапов типа образ, можно дополнительно указать букву тома

Тип бэкапа:
  Резервная копия файла
    Полный файловый бэкап
    Инкрементальный файловый бэкап
  Бэкап образа
    Полный образ
    Инкрементальный образ

Примеры:

Выполнять в первую пятницу каждого месяца в 0 часов:
  Архивировать каждые: 27 дней
  Расписание архивации: *;*;*;5

Выполнять каждую пятницу в 3 часа ночи:
  Архивировать каждые: 1 день      (указан конкретный час, ограничивать повторы не требуется)
  Расписание архивации: 3;*;*;5

Выполнять 1 числа каждого месяца в 0 часов:
  Архивировать каждые: 2 дня      (исключает повторы каждый час, возможно 1 будет ограничивать также)
  Расписание архивации: *;1;*;*

Выполнять по средам и пятницам:
  Архивировать каждые: 2 дня      (исключает повторы каждый час, возможно 1 будет ограничивать также)
  Расписание архивации: *;*;*;3,5

Выполнять ежедневно каждые 4 часа:
  Архивировать каждые: 4 часа      (исключает повторы в течение 4-х часов)
  Расписание архивации: *;*;*;*

# обратите внимание, что для запуска задания должны выполняться оба условия
# значение в поле "Архивировать каждые" исключает повторы в заданном интервале

Клиент для Windows

Клиент имеет основной процесс и процесс интерфейса. Интерфейсный процесс отображается в трее, предоставляет пользователю интерфейс для управления и передает команды и изменения конфигурации основному процессу.

Основной процесс слушает 3 порта:

  • 35622/UDP - порт обнаружения, принимает широковещательные сообщения от сервера и сообщает в ответ имя своего компьютера
  • 35623/TCP - порт управления, принимает команды и изменения конфигурации от интерфейсного процесса и от сервера
  • 35621/TCP - порт передачи данных, принимает запросы на резервирование от сервера

Сервер устанавливает постоянное соединение с портом управления 35623/TCP каждого клиента, через который они могут запрашивать задачи резервирования и изменения конфигурации от сервера.

Основной процесс сканирует каталоги резервирования и создает файлы

  • "urbackup/data/filelist.ub" - список всех резервируемых файлов
  • "urbackup/backup_client.db" - индексная база данных о всех резервируемых файлах

Для быстрого обновления этих файлов основной процесс использует встроенный механизм Windows для мониторинга изменений в каталогах. Каждые 10 секунд, а также при запросе списка файлов, индексная база получает обновления.

Для резервирования файлов, сервер загружает список файлов от клиента и запускает резервирование и загрузку изменений через встроенный в Windows файловый сервер.

Для резервирования образа используется только порт 35621/TCP.

Клиент для Linux

Рабочий каталог клиента

/var/lib/urbackup

Рабочий каталог клиента создается при первом подключении клиента к серверу. В нем случайно генерируется ключевой файл server_ident.key, по которому клиент будет проводить аутентификацию сервера в дальнейшем. Никакой другой сервер уже не сможет подключиться к клиенту, если данный файл создан.

Если необходимо переключить клиента на другой сервер, то необходимо удалить рабочий каталог клиента /var/lib/urbackup

Настройка механизма снепшотов

/usr/local/etc/urbackup/snapshot.cfg

# urbackup поддерживает варианты:
# 1) dattobd volume snapshot kernel module from https://github.com/datto/dattobd
# 2) LVM - Logical Volume Manager snapshots

Клиент командной строки

/usr/local/bin/urbackupclientctl

Открытие доступа на FW

vi /usr/lib/firewalld/services/urbackup-client.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>urbackup-client</short>
  <description>UrBackup client for Linux</description>
  <port protocol="tcp" port="35621"/>
  <port protocol="udp" port="35622"/>
  <port protocol="tcp" port="35623"/>
</service>
firewall-cmd --reload
firewall-cmd --info-service=urbackup-client

firewall-cmd --permanent --zone=<your_zone> --add-service=urbackup-client
firewall-cmd --reload

Перенос на другой хост

  • /path/to/urbackup - каталог с бэкапами
  • /var/urbackup - каталог с рабочими данными

Пути к данным каталогам на старом и новом хосте должны совпадать.

Для переноса UrBackup сервера на другой хост, необходимо

  1. остановить и отключить urbackup сервис на старом хосте
  2. установить urbackup сервер на новом хосте
  3. остановить сервис urbackup сервера на новом хосте
  4. переименовать каталоги /var/urbackup, /path/to/urbackup в *.default (сохраняем исходное состояние)
  5. перенести со старого хоста на новый с сохранением всех метаданных (время, права, владелец, ...) каталоги /var/urbackup, /path/to/urbackup
  6. если на новом хосте на перенесенных каталогах владелец и группа отличны от urbackup, то необходимо установить владельца и группу urbackup
  7. запустить сервис urbackup сервера на новом хосте

Пример восстановления доступов

chown -R urbackup:urbackup /var/urbackup
chmod 755 /var/urbackup
chmod -R 644 /var/urbackup/*
chmod 750 /var/urbackup/backup_server_files.db
chmod 750 /var/urbackup/dataplan_db.txt
chmod 750 /var/urbackup/dataplan_db.txt.new
chmod 750 /var/urbackup/fileindex
chmod 750 /var/urbackup/server_version_info.properties
chmod 750 /var/urbackup/server_version_info.properties.new
chmod 750 /var/urbackup/UrBackupUpdate.exe
chmod 750 /var/urbackup/UrBackupUpdateLinux.sh
chmod 750 /var/urbackup/*.sig*

chown -R urbackup:urbackup /path/to/urbackup
chown 755 /path/to/urbackup
chown 750 /path/to/urbackup/*

Сервер UrBackup немного отличается на CentOS 8 и Ubuntu 20.04. В Ubuntu 20.04 используется файл /var/urbackup/backupfolder в котором хранится путь к каталогу с бэкапами. В CentOS 8 такого файла нет, вероятно путь к каталогу с бэкапами хранится в базе. Это необходимо учитывать при переносе между хостами с разными ОС.

Также для данного файла необходимо задать особые права

chown root:root /var/urbackup/backupfolder
chmod 644 /var/urbackup/backupfolder

Установка

Установка сервера на Ubuntu 20.04

Установка

add-apt-repository ppa:uroni/urbackup
apt update
apt install urbackup-server

В процессе установки укажите путь к каталогу для хранения резервных копий urbackup

/path/to/urbackup

Проверьте статус сервиса

systemctl status urbackupsrv

Установка сервера на CentOS 8

# создание пользователя urbackup
useradd -r -d /var/urbackup -s /sbin/nologin -c "User for UrBackup Server" urbackup

# создание каталога резервных копий
mkdir /path/to/urbackup
chown -R urbackup:urbackup /path/to/urbackup
chmod -R 770 /path/to/urbackup

# добавление репозитория uroni
cd /etc/yum.repos.d/
wget https://download.opensuse.org/repositories/home:uroni/CentOS_8/home:uroni.repo

# установка
dnf install urbackup-server

# запуск сервера
systemctl enable urbackup-server
systemctl start urbackup-server

Установка сервера из исходников

  • На официальном сайте www.urbackup.org откройте раздел Download
  • Найдите раздел Install from sources
    • скачайте последний архив исходников
    • следуйте инструкциям, по ссылке More information: Install from sources

Пример установки из исходников на Rocky Linux 10

cd /tmp
wget https://hndl.urbackup.org/Server/2.5.33/urbackup-server-2.5.33.tar.gz
tar -xvzf urbackup-server-2.5.33.tar.gz
cd urbackup-server-2.5.33/

# проверка зависимостей, можно выполнять без прав root
./configure

# если вывод содержит error или WARNING то найдите и установите соответствующие devel пакеты
# необходимые репозитории appstream, baseos, epel
dnf repolist
dnf install gcc-c++ zlib-ng-compat-devel libzstd-devel libcurl-devel cryptopp-devel

# в итоге должны получить
./configure
#-------------------------------------------------------------------------------
...
config.status: creating Makefile
config.status: creating config.h
config.status: executing depfiles commands
#-------------------------------------------------------------------------------

#компиляция бинарников, можно выполнять без прав root
make

# установка, необходимы права root
sudo -s

make install
# adduser: нераспознанный параметр «--quiet»

# ошибка не критична, проверяем что пользователь создан корректно
id urbackup
uid=980(urbackup) gid=974(urbackup) группы=974(urbackup)

grep urbackup /etc/passwd
urbackup:x:980:974::/usr/local/var/urbackup:/bin/bash

# определяем куда установлен сервер
find /usr -name 'urbackupsrv'
#-------------------------------------------------------------------------------
/usr/local/bin/urbackupsrv
#-------------------------------------------------------------------------------

# создание сервиса
cp urbackup-server.service /etc/systemd/system/
vi /etc/systemd/system/urbackup-server.service
# скорректируйте путь /usr/bin/urbackupsrv на путь куда установлен сервер

systemctl enable urbackup-server.service

cp defaults_server /etc/default/urbackupsrv
cp logrotate_urbackupsrv /etc/logrotate.d/urbackupsrv

systemctl daemon-reload
systemctl start urbackup-server

# удаление каталога установки и файла архива
rm -rf /tmp/urbackup-server-2.5.33
rm -f /tmp/urbackup-server-2.5.33.tar.gz

Установка клиента на Linux

Скрипт установки urbackup клиента

Установка клиента Linux

Строку запуска скрипта установки необходимо брать с сайта (ссылка выше). На 6.10.2020 она выглядит так.

TF=$(mktemp) && wget "https://hndl.urbackup.org/Client/2.4.10/UrBackup%20Client%20Linux%202.4.10.sh" -O $TF && sudo sh $TF; rm -f $TF
systemctl status urbackupclientbackend

Скрипт удаления urbackup клиента

/usr/local/sbin/uninstall_urbackupclient

Установка сервера/клиента на Windows

  • Скачайте инсталлятор с официального сайта www.urbackup.org
  • Запустите и следуйте инструкциям

Добавление пути к исполняемым файлам

Linux

vi ~/.bash_profile
#-----------------------------------------------
export PATH=${PATH}:/usr/local/bin
#-----------------------------------------------

Windows

  • Проверьте переменную PATH на уровне системы и профиля пользователя
  • Если необходимо добавьте соответствующий путь

Настройка

Откройте веб-интерфейс вашего сервера http://<ip_your_server>:55414

Настройки / Путь для хранения бэкапов - укажите каталог для хранения резервных копий

Задайте пароль администратора

Резервирование

MySQL

Ссылки по теме

Безопасность

Безопасность клиента

/var/lib/urbackup/server_ident.key