Hetzner предлагает для владельцев выделенных серверов место для резервного хранения, доступ к которому возможен только из локальной сети Hetzner. К сожалению Hetzner на своих Backup-серверах не поддерживает RSync. Чтобы воспользоваться всеми прелестями инкрементальных-баккупов и т.п. существует решение, которое не совсем поддерживается Hetzner, но тем не менее описано в его wiki.
План такой.
- Примонтировать Backup-сервер через sshfs.
- Создать на нем образ диска при помощи утилиты dd.
- Примонтировать этот образ диска в локальную директорию.
- Сконфигурировать RSync для работы с локальной директорией.
- …
- PROFIT!!!
Я попробовал решить задачу влоб — mount и fstab. Не получилось. На старте системы образ диска, расположенный в директории, примонтированной через sshfs, не подключался. Backup-сервер во время работы мог отмонтироваться и не примонтироваться обратно. Опыта работы с этой темой у меня немного, поэтому если у кого-то есть рабочее решение, то не поленитесь и скиньте его в комменты. Буду очень рад его узнать.
Я пошел по другому пути — autofs. Autofs утилита, которая автоматически примонтирует что угодно при первом обращении к ресурсу и автоматически отмонтирует ресурс через некоторое время. В DebianUbuntu autofs из репозитория не может примонтировать образ диска с backup-сервера, который перед этим нужно тоже примонтировать. Проблема в том что в репозитории версия autofs собрана без ключика —disable-mount-locking. Нам придется перекомпилировать autofs перед использованием.
Поехали!
Начнем с autofs. Установим необходимые пакеты для сборки:
sudo apt-get install build-essential fakeroot dpkg-dev
Получим исходники autofs. Если ваша версия autofs отличается от 5.0.7-3, то поправьте её в команде ниже.
cd /usr/src mkdir autofs cd autofs apt-get source autofs apt-get build-dep autofs dpkg-source -x autofs_5.0.7-3.dsc
Теперь у нас есть исходники пакета autofs. Добавим необходимый ключ в правила сборки пакета.
cd autofs-5.0.7/debian vi rules
Вы увидите такой фрагмент в файле:
# Also explicitly define some dirs/locations which will be searched # if not defined. MOUNT=/bin/mount UMOUNT=/bin/umount MOUNT_NFS=/sbin/mount.nfs E2FSCK=/sbin/fsck.ext2 E3FSCK=/sbin/fsck.ext3 E4FSCK=/sbin/fsck.ext4 initdir=/etc/init.d piddir=/var/run dh_auto_configure -- --enable-force-shutdown --enable-ignore-busy --mandir=/usr/share/man --with-confdir=/etc/default --with-mapdir=/etc --with-fifodir=/var/run --with-flagdir=/var/run --with-hesiod --with-openldap --with-sasl # Always define HAVE_SLOPPY_MOUNT (mount -s). Also a hack and # the same comment as above applies: upstream should use it unconditionally.
Сделайте его таким, убрав строку содержащую ключ —enable-force-shutdown и добавив строку содержащую ключ —disable-mount-locking:
# Also explicitly define some dirs/locations which will be searched # if not defined. MOUNT=/bin/mount UMOUNT=/bin/umount MOUNT_NFS=/sbin/mount.nfs E2FSCK=/sbin/fsck.ext2 E3FSCK=/sbin/fsck.ext3 E4FSCK=/sbin/fsck.ext4 initdir=/etc/init.d piddir=/var/run dh_auto_configure -- --enable-ignore-busy --disable-mount-locking --mandir=/usr/share/man --with-confdir=/etc/default --with-mapdir=/etc --with-fifodir=/var/run --with-flagdir=/var/run --with-hesiod --with-openldap --with-sasl # Always define HAVE_SLOPPY_MOUNT (mount -s). Also a hack and # the same comment as above applies: upstream should use it unconditionally.
Сохраните файл и перейдите в директории на уровень выше:
cd ..
Запускаем сборку:
dpkg-buildpackage -rfakeroot -b
И затем, если все собралось хорошо, устанавливаем пакет:
dpkg -i ../autofs_5.0.7-3_amd64.deb
У нас есть работающий autofs, теперь установим остальные компоненты:
apt-get install sshfs
Все компоненты у нас есть.
Настроим вход без пароля на сервер резервного копирования согласно мануалу Hetzner (откроется в новом окне).
Как только вы добьетесь того что на backup-сервер можно будет заходить по sftp без пароля можно настроить autofs. Я вдохновлялся вот этим мануалом, но у меня оно не заработало в том виде, который предлагает автор.
Создадим каталог в который будем монтировать место для резервного копирования:
mkdit /mnt/sshfs
Добавим эту строку в файл /etc/auto.master:
/mnt/sshfs /etc/auto.sshfs uid=0,gid=0,--timeout=30,--ghost
Создадим файл /etc/auto.sshfs и добавим в него следующее (не забудте поменять uXXXXXX@uXXXXXX.your-backup.de):
hetzner-backup-server -fstype=fuse,rw,nodev,nonempty,allow_other,reconnect,max_read=65536 :sshfs#uXXXXXX@uXXXXXX.your-backup.de:/
Теперь перезапустим autofs и проверим как оно работает:
service autofs restart cd /mnt/sshfs/hetzner-backup-server ls -lh
Если вы не увидели никаких ошибок, а увидели список файлов и папок на вашем backup-сервере, то все ОК. Если не ОК, то см. ниже как отлаживать autofs.
Теперь создадим образ диска (замените 100G на объем доступный вам):
dd if=/dev/zero of=/mnt/sshfs/hetzner-backup-server/backup.img bs=1 seek=100G count=1 mkfs.ext4 /mnt/sshfs/hetzner-backup-server/backup.img
Добавим эту строку в файл /etc/auto.master:
/backups /etc/auto.img --timeout=30
Создадим файл /etc/auto.img и добавим в него следующее:
hetzner-backup-server -fstype=ext4,defaults,loop :/mnt/sshfs/hetzner-backup-server/backup.img
Теперь перезапустим autofs:
service autofs restart
Теперь при обращении к /backups/hetzner-backup-server сначала autofs примонтирует место для резервного копирования через sshfs, а затем с него примонтирует наш образ диска backup.img в локальную ФС /backups/hetzner-backup-server.
Теперь настроим инкрементальное резервное копирование с помощью RSync.
Скачайте удобный скрипт, который упрощает работу: https://github.com/florianbeer/hactar и разместите его в /usr/local/bin/hactar.
Затем создадим файл со списоком того, что мы бы не хотели иметь в резервной копии, и разместим его в /etc/hactar.excludes. Мой файл выглядит так:
/backups /backup /bin /boot /db /dev /lib /lib64 /lost+found /media /mnt /proc /run /sbin /selinux /sys /tmp /var/backups /var/cache /var/lib /var/lock /var/log /var/opt /var/run /var/tmp /var/swap.img
Теперь добавим задачу в cron. Будем создавать инкрементальную копию каждый день в два часа ночи, хранить копии 120 дней и выводить как можно больше информации в лог:
0 2 * * * /usr/local/bin/hactar -v -r 120 / /backups/hetzner-backup-server > /var/log/hacktar.log
Теперь настроим резервное копирование MySQL. Пока я решил попробовать использовать logrotate для этого.
Создадим файл конфигурации для logrotate /etc/logrotate.d/mysql-backup с таким содержанием, заменив PASSWORD на ваш пароль root для mysql и DATABASES на список ваших баз данных, которые вы хотите сохранить, разделенный пробелами:
/backups/hetzner-backup-server/mysql/all.sql.gz { daily rotate 120 nocompress create 640 root adm postrotate mysqldump -uroot -pPASSWORD --databases DATABASES > /backups/hetzner-backup-server/mysql/all.sql --single-transaction gzip -9f /backups/hetzner-backup-server/mysql/all.sql endscript }
Делаем так
touch /backups/hetzner-backup-server/mysql/all.sql.gz logrotate -f /etc/logrotate.d/mysql-backup
Все.
Что делать если autofs не монтирует ресурсы
Отлаживать и еще раз отлаживать.
Откройте два терминала и в одном остановите демон autofs:
service autofs stop
И запустите приложение в ручную включив режим вывода информации:
automount -f -v
Пытайтесь переходить в каталоги, которые должны содержать примонтированные ресурсы и смотреть что выводит automount.
Если вам понравилось, пожалуйста, не поленитесь кликнуть «мне нравится» или «поделиться» или «+1» чуть ниже, или кинуть ссылку на статью в свой блог или форум. Спасибо :)
Поделюсь своим опытом монтирования хранилища hetzner к linux и последующего расшаривания через NFS для подключения к гипервизору esxi.
Добавить в /etc/fstab следующую строку:
//your-user-number.your-backup.de/backup /mnt/hetzner-backup cifs iocharset=utf8,rw,username=your-user-number,password=your-password,uid=root,gid=root,file_mode=0660,dir_mode=0770 0 0
sudo apt install fuse-convmvfs
sudo mkdir /mnt/hetzner-backup-fuse
Добавить в файл /etc/exports:
/mnt/hetzner-backup-fuse/ your-ip-address(rw,sync,fsid=0,no_subtree_check,no_root_squash)
В файл /etc/fstab добавить:
convmvfs /mnt/hetzner-backup-fuse fuse srcdir=/mnt/hetzner-backup,icharset=utf8,ocharset=utf8 0 0
После такой манипуляции на внешнем адресе будет NFS шара хранилища hetzner.
Из минусов нельзя прописать несколько шар в файле /etc/exports, будет светиться только последняя строчка, хотя в саму систему в файл /etc/fstab может примонтировать сколько угодно fuse фс.