Настройка резервного копирования Linux-сервера за 5 минут

    Передо мной возникла необходимость настроить резервное копирование на новом Linux-сервере, задачка эта оочень важная, но уж больно скучная: нужно написать и отладить скрипты, которые будут архивировать нужные папки (причем желательно делать инкрементальные архивы), базы данных, хранилища subversion, а затем переносить эти архивы на удаленный сервер. По этому я попробовал нагуглить готовое решение для этой задачки и в результате наткнулся на backup-manager — замечательный опенсорсный набор bash-скриптов, позволяющих:
    • архивировать любые папки, в том числе и создавать инкрементальные архивы. В конфиге просто указывается список директорий, которые должны быть скопированы, а также «черный список» файлов, которые копироваться не будут.
    • делать резервное копирование баз данных MySQL. В конфиге указываются логин и пароль mysql-юзера, имеющего доступ к базам, а всю остальную работу backup-manager делает сам.
    • делать резервное копирование svn-репозиториев, причем бэкап делается не копированием папки с хранилищем, а с помощью команды svnadmin dump.
    • шифровать архивы.
    • копировать созданные архивы на удаленные сервера по FTP, SSH или (это самая важная для меня фича) в хранилище Amazon S3, а также записывать их на DVD.

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

    Скачать можно отсюда: www.backup-manager.org/downloads, либо просто можно установить пакет backup-manager (пример для Debian):

    aptitude install backup-manager

    Кроме того, нужно учесть, что для копирования данных в хранилище Amazon S3 в системе должны быть установлены пакеты libnet-amazon-s3-perl и libfile-slurp-perl:

    aptitude install libnet-amazon-s3-perl libfile-slurp-perl

    Теперь остается только настроить запуск backup-manager по крону и можно спать спокойно.

    Upd.
    Все настройки хранятся в файле /etc/backup-manager.conf, вот основные его параметры:

    # Папка, в которой архивы будут складываться локально
    export BM_REPOSITORY_ROOT="/var/archives"

    # Используемые методы резервного копирования
    export BM_ARCHIVE_METHOD="tarball-incremental mysql svn"

    # Далее для каждого из выбранных выше методов резервного копирования задаем настройки
    # Список папок, содержимое которых будем бэкапить
    BM_TARBALL_TARGETS[0]="/etc"
    BM_TARBALL_TARGETS[1]="/boot"
    BM_TARBALL_TARGETS[2]="/var/www"
    export BM_TARBALL_TARGETS

    # Список исключений, то есть файлов в перечисленных выше папках, которые бэкапить не нужно
    export BM_TARBALL_BLACKLIST="/dev /sys /proc /tmp *imagecache*"

    # Теперь указываем как часто делать мастер-бэкап и инкрементный бэкап
    export BM_TARBALLINC_MASTERDATETYPE="weekly"
    export BM_TARBALLINC_MASTERDATEVALUE="1"

    # Для бэкапа MySQL баз данных указываем какие базы бэкапить и параметры mysql-юзера
    export BM_MYSQL_DATABASES="__ALL__"
    export BM_MYSQL_ADMINLOGIN="user"
    export BM_MYSQL_ADMINPASS="1234"

    # Для бэкапа subversion-репозитория указываем путь к хранилищу
    export BM_SVN_REPOSITORIES="/var/repositories"

    # Выбираем метод аплоада созданного бэкапа а удаленный сервер
    # (еще есть варианты ftp, ssh, ssh-gpg, rsync)
    export BM_UPLOAD_METHOD="s3"

    # Для копирования копий на Amazon S3 задаем имя корзины, access key и secret key
    export BM_UPLOAD_S3_DESTINATION="basket-name"
    export BM_UPLOAD_S3_ACCESS_KEY="ABC123"
    export BM_UPLOAD_S3_SECRET_KEY="DEF456"


    Это самые основные настройки, в самом конфиге есть еще пара десятков параметров, все они подробно прокомментированы.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 45

      +6
      Спасибо, занес на всякий случай в закладки. Но если честно, то такое интимное дело как бекап, я люблю делать сам. Что бы потом головой об стенку не биться из за какой нибудь баги :) Если уж с бекапами что то будет не так, то пусть это будет целиком и полностью моя вина. Но это исключительно MyWay :)
      • UFO just landed and posted this here
          0
          А где собственно настройка сервера? Тема ведь называется «Настройка резервного копирования Linux-севера за 5 минут». Пример в студию.
            +1
            Все настройки хранятся в файле /etc/backup-manager.conf, вот основные его параметры:

            # Папка, в которой архивы будут складываться локально
            export BM_REPOSITORY_ROOT="/var/archives"

            # Используемые методы резервного копирования
            export BM_ARCHIVE_METHOD="tarball-incremental mysql svn"

            # Далее для каждого из выбранных выше методов резервного копирования задаем настройки
            # Список папок, содержимое которых будем бэкапить
            BM_TARBALL_TARGETS[0]="/etc"
            BM_TARBALL_TARGETS[1]="/boot"
            BM_TARBALL_TARGETS[2]="/var/www"
            export BM_TARBALL_TARGETS

            # Список исключений, то есть файлов в перечисленных выше папках, которые бэкапить не нужно
            export BM_TARBALL_BLACKLIST="/dev /sys /proc /tmp *imagecache*"

            # Теперь указываем как часто делать мастер-бэкап и инкрементный бэкап
            export BM_TARBALLINC_MASTERDATETYPE="weekly"
            export BM_TARBALLINC_MASTERDATEVALUE="1"

            # Для бэкапа MySQL баз данных указываем какие базы бэкапить и параметры mysql-юзера
            export BM_MYSQL_DATABASES="__ALL__"
            export BM_MYSQL_ADMINLOGIN="user"
            export BM_MYSQL_ADMINPASS="1234"

            # Для бэкапа subversion-репозитория указываем путь к хранилищу
            export BM_SVN_REPOSITORIES="/var/repositories"

            # Выбираем метод аплоада созданного бэкапа а удаленный сервер
            # (еще есть варианты ftp, ssh, ssh-gpg, rsync)
            export BM_UPLOAD_METHOD="s3"

            # Для копирования копий на Amazon S3 задаем имя корзины, access key и secret key
            export BM_UPLOAD_S3_DESTINATION="basket-name"
            export BM_UPLOAD_S3_ACCESS_KEY="ABC123"
            export BM_UPLOAD_S3_SECRET_KEY="DEF456"


            Это самые основные настройки, в самом конфиге есть еще пара десятков параметров, все они подробно прокомментированы.
              0
              Чем меньше времени потрачено на настройку, тем больше уйдёт на восстановление :)
            +7
            «Linux-север» — пингвины освоили второй полюс? )
              0
              Хмм, на первый взгляд достаточно удобно и просто: выбрал что, как и куда — и оно уже там.
                +3
                Автоматизация сбора данных для бэкапа — задача отличная, но бездумно автоматически писать бэкапы и спать спокойно можно будет только после проверки того, что забэкапилось. имхо.
                • UFO just landed and posted this here
                    +1
                    Возможно я не совсем внятно просто написал, но суть та же. Можно написать свои скрипты или взять готовые, только все это будет бесполезно, если не проверять, что эти скрипты набэкапили.
                      0
                      В случае если ты сам себе хостер приходится или самому писать скрипты, или искать готовое решение. Эти скрипты я протестировал и убедился в их надежности, но, разумеется, минимум раз в неделю необходимо будет проверять корректно ли делаются копии.
                    0
                    имхается мне что в современном мире актуальнее сервера виртуализировать и, соответственно, оставлять бэкап на совести средств виртуализации
                      +3
                      другой вариант: github.com/astrails/safe

                      так же конфигурируется за 5 минут.

                      поддержка:
                      multiple archives of: mysql, postgresql, files (with tar), and subversion (svndump)
                      backup to: local, sftp, s3
                      + encrypt with gnupg (key or password)
                      + backup rotation

                        +3
                        А теперь — самое главное! Есть ли у этого ПО какие-нибудь средства для того чтобы в считанные секунды после сбоя (или хотя бы минуты) восстановить из бекапа данные обратно в систему. Или опять все ручками самостоятельно искать и заливать?
                          +1
                          Очевидно, что ответ нет. Не того это класса ПО. Но достать бэкапы и развернуть их на новом сервере можно будет за час, максимум два (это если а) есть этот самый новый сервер и б) настроены внешние системы мониторинга и падение сервера будет замечено сразу, а не через полдня). Думаю для нужд большинства разработчиков это приемлемый даунтайм. В ином случае, заботиться нужно не о резервном копировании, а о повышении отказоустойчивости системы, а это уже совсем другая задача.
                            0
                            Если использовать формат dar, то теоретически можно — для него есть специальные программы просмотра архивов и можно рукама или скриптом, пользуясь только dar, выбрать нужные файлы за нужную дату. Для tar — скорее всего нет.

                            Но речь о секундах или минутах может идти только при бесконечно выской ширине канала от бэкапа до сервера.
                              0
                              Настраивал по этой статье несколько лет назад, и вот настал тот самый момент опробовать восстановление.
                              Оставлю здесь, так как пришлось немного покопаться чтобы подобрать нужные ключи:

                              tar --extract --gzip --directory /mnt/root --verbose --incremental --file hp-bin.20190901.master.tar.gz
                              tar --extract --gzip --directory /mnt/root --verbose --incremental --file hp-bin.20190908.tar.gz

                              tar --extract --gzip --directory /mnt/root --verbose --incremental --file hp-bin.20190915.tar.gz

                              Ну и так для всех бэкапированных директорий, начиная с наиболее свежего мастера и завершая последним инкрементом.
                              Предполагается, что в /mnt/root подключен новый диск, на который восстанавливается бэкап
                              0
                              А теперь не самое главное. Как проверить, что бэкапирование идёт нормально и можно будет восстановиться из архивов?

                              И моё мнение: пользоваться можно будет, когда версия 0.7 станет stable — потому что «Since version 0.7.1, Backup Manager supports dar archives.»
                                0
                                Проверять только руками, а какие могут быть альтернативы?

                                И моё мнение: пользоваться можно будет, когда версия 0.7 станет stable

                                К сожалению, последняя стабильная версия не поддерживает копирование архивов на S3.
                                  +2
                                  s3 вообще говоря не для всех, а вот ограничение на 2 гигабайта — это неудобно.
                                0
                                s3 вообще говоря не для всех

                                Спорное утверждение, на мой взгляд зарегистрировать аккаунт на Амазоне проще чем ставить где-то (в идеале в датацентре отличном от того, в котором стоит «бэкапируемый» сервер) еще одну железяку, чтобы переносить на нее данные по FTP.

                                а вот ограничение на 2 гигабайта — это неудобно

                                А где такое ограничение?
                                  0
                                  А, да, увидел:

                                  Slice archives to 2 GB if using dar archives format.

                                  Это же ограничение на один слайс, распилить архив можно на сколько угодно кусков.
                                    0
                                    я неправильно выразился, точнее даже ошибочно.

                                    Основной формат для архивов — tar — не поддерживает хранение архивов в нескольких файлах, то есть архив будет большим. В 0.7.1 появилась возможность создавать архивы в формате dar — который, кроме всего прочего, позволяет разбивать архивы на маленькие фрагменты. Например, можно делать файлы архивов в размер CDROM или DVD или вообще дискеты.
                                    0
                                    Спасибо, очень своевременная статья, хотел бекапится именно на S3 который уже используется в проекте.
                                      +1
                                      А почему не подошел BackupPC как бэкап-сервер?

                                      Из функционала:
                                      • поддерживает Windows, Linux, Mac OS
                                      • практически не требует инсталляции на клиенте
                                      • полные и инкрементные бэкапы
                                      • идентичные файлы в разных бэкапах разных систем не дублируются
                                      • и прочие прелести...
                                        0
                                        а BackupPC уже научился бэкапить mysql? Ну и для него, не забываем, нужен отдельный сервер.
                                          0
                                          ну в принципе да: тут вот дискуссия по поводу

                                          конечно же, Backuppc (мое сугубо субъективное мнение) идеальное решения для бэкапов целого зоопарка систем как пользовательских так и серверных…
                                            0
                                            ну какое же он идеальное. Это решение для предприятия с быстрыми каналами. Представьте, что надо гигабайт мелких файлов передать на восстанавливаемую систему — это уже не минуты и часы будут. Или как унести его бэкап на DVD диске. Или что будет, если бэкапный сервер сам накроется. Или как его заставить писать не на локальную файловую систему, а не FTP сервер. Или не придётся ли столкнуться с проблемой миллионов файлов.

                                            Я его для windows и linux использую, конечно, но отдельностоящий сервер им бэкапить неудобно.
                                        +1
                                        а отчеты слать в мониторинг\почту\jabber оно умеет?
                                          0
                                          Если при запуске оно выдает какую-то отладочную информацию, то можно в crontab'е указать MAILTO= и тогда вся эта информация будет приходить к вам на почту.
                                          • UFO just landed and posted this here
                                          • UFO just landed and posted this here
                                            0
                                            А чем собственно не устраивает fsbackup для создания копий? В backup-manager очень неудобно настраивается порядок создания полной и инкрементальной копии. Полную копию можно создавать либо раз в неделю, либо раз в месяц. А если я хочу создавать каждые две недели полную копию, причем в crontab запуск будет не каждый день, а через день?

                                            Будут ли сохраняться старые копии, или по сути будет только один текущий цикл храниться?

                                            Я не увидел какого-то плюса от его использования, кроме поддержки Amazon S3

                                              +1
                                              rsnapshot
                                                0
                                                Он не не устраивает, просто изначально я вообще не знал о том какие есть инструменты для решения этой задачи, по этому по запросу в гугле я нашел эту страницу и испытал перечисленные на ней утилиты на предмет работоспособности и соответствия моим требования. Кстати, насколько я понял ни fsbackup, ни rsnapshot не копируют данные на S3, а это для меня было одним из ключевых требований.
                                                0
                                                Подскажите, а использование встроенной в webmin возможности создания бэкапов — это хорошо или плохо?
                                                  0
                                                  О, сколько я подобных вещей перепробовал, пока не понял что быстрее самому написать все инструменты, чтобы они работали так, как тебе нужно, чем добиваться нужного функционала от готовых решений, которые заведомо не знают о твоих нюансах.

                                                  А бэкап БД — вообще отдельная тема.

                                                  Админы, не ленитесь писать скрипты автоматизации — это очень легко, даже если вы не программист.
                                                    0
                                                    спасибо. актуально. особенно на s3.
                                                      0
                                                      rdiff-backup попробуйте :)
                                                        +1
                                                        Сначала полез допиливать описываемое решение, но потом понял, что свой велосипед лучше :). За 10 минут набросал вот такой скриптик для бекапирования ноута. Он архивирует указанные директории, шифрует AES-ом и закидывает на Dropbox. Для десктопа самое оно:
                                                        1. #!/bin/bash
                                                        2.  
                                                        3. TARGETS="/boot /etc /root"
                                                        4. mount /boot
                                                        5.  
                                                        6. for i in $TARGETS; do
                                                        7. filename=$(echo $i | sed 's/\//-/g'); #убираем / в имени файла
                                                        8. tar -czPf /var/archives/`echo $HOSTNAME`$filename-`date +%Y%m%d`.tar.gz $i; # e.g. gbox-etc-20100314.tar.gz
                                                        9. done
                                                        10.  
                                                        11. for i in `ls /var/archives/`; do
                                                        12. gpg -e --symmetric --cipher-algo AES --batch --passphrase «Your_Password» /var/archives/$i; # шифруем
                                                        13. mv /var/archives/$i.gpg /home/allein/Dropbox/archives/; # шифрованные файлы закидуем на Dropbox
                                                        14. rm -f /var/archives/$i; # остальное удаляем
                                                        15. done
                                                        16.  
                                                        17. umount /boot

                                                        ______________________
                                                        Текст подготовлен в Хабра Редакторе от © SoftCoder.ru

                                                        Выставляем chmod и прописываем в крон.
                                                          0
                                                          Респект, столько интересных решений в комментах, завтра что-нибудь попробую. Сейчас есть самописный скрипт (из 2х строк, скриптом-то не назовёшь), который требует доделывания.
                                                            0
                                                            Авторам в голову надо вбить гвоздь.
                                                            В половине мест — пути абсолютные, в половине — относительные.
                                                            Весь ворох скриптов устанавливается посредством модного make-файла — не работающего, правда, не из-под чего, кроме линукса — но поправить системные пути из того же make-файла уже непосильная задача.

                                                            Зато — «Backup Manager 0.7.9 released», зато — «This release fixes 7 known bugs found in version 0.7.8.»

                                                            Пионерия на марше.

                                                              0
                                                              Скажите, а как восстанавливать данные из инкрементального бекапа?
                                                              Т.е. допустим есть мастер-бекап на воскресенье и инкрементальный на вторник, в среду всё поломалось и надо восстанавить из бекапа во вторник. Как это можно сделать?
                                                                0
                                                                По ссылке на backup manager выдает сайт на китайском о выращивании урожая в саду
                                                                  0
                                                                  Сайт по ссылке из статьи — уже не тот…
                                                                  Делал резервные копии с помощью встроенного функционала в панель ISP Manager с отправкой файлов в Яндекс Диск. У этого способа тоже есть недостатки.

                                                                  Only users with full accounts can post comments. Log in, please.