Создание резервных копий ВМ Moodle

Создание резервных копий ВМ Moodle

от Игорь М -
Количество ответов: 6

Добрый день. 

Прошу прощения, что снова задаю вопрос, лишь косвенно связанный с Moodle, но поиски по инету ни к чему не привели.

Несколько лет ВМ с установленной Moodle (Ось - серверная Ubuntu 16, ВМ - на Виртуалбокс) бекапировалась при помощи duplicity. До недавнего момента все было нормально. Однако полетел один жесткий диск, была долгая эпопея с восстановлением, закончившаяся успешно. Однако теперь бекапирование делается очень долго. Сама ВМ "весит" около 165 Гб, когда создается полный бекап, проходит где-то два-два с половиной часа. Но как только начинается делать инкрементальный бекап - то это действие может затянуться и на 8, и на 10 часов. Сегодня был "рекорд" - более 11 часов. Естественно, это не особо нравится, потому как на время бекапирования ВМ "замораживается" и Мудл не доступен. А ночи, получается, не хватает. 

Вообще так получилось до проблем с дисками, что ВМ настроена была так, что сама ВМ была установлена в одном месте, которое и бекапировалось, а снимки виртуалбокс, которые считались "еще одними бекапами" хранились вообще непонятно где (что, кстати, привело к дополнительным проблемам при восстановлении - новичкам на будущее). При замене диска я все снимки слил и теперь ВМ представляет собой 1 файл. Возможно, большой размер файл и обуславливает повышенное время создания инкрементального бекапа, но не 10 же часов?

Запускается duplicity следующим скриптом, запускаемым по расписанию кроном:

--------------------------------------------------

#!/bin/bash

DIR_VMS='/mnt/raid/new_moodle'
DIR_BKP_STORE='/mnt/backup/backup_new_moodle'
NAME_LOG='/var/log/backup_new_moodle.log'
echo " " >> $NAME_LOG
echo "----------------START----------------" >> $NAME_LOG
VBoxManage controlvm new_moodle pause
echo "Началось архивирование образов жестких дисков в " `date +%Y.%m.%d-%H:%M:%S` >> $NAME_LOG
duplicity --full-if-older-than 1M --no-encryption $DIR_VMS file://$DIR_BKP_STORE >> $NAME_LOG
echo "Архивирование закончено в " `date +%Y.%m.%d-%H:%M:%S` >> $NAME_LOG
duplicity remove-older-than 4M --force file://$DIR_BKP_STORE
VBoxManage controlvm new_moodle resume
date >> $NAME_LOG
echo "----------------END----------------" >> $NAME_LOG

 -------------------------------------------------------

Изначально время жизни архива было 1 год, но диска стало не хватать и я поставил 4 месяца. Каждый месяц делается полный бекап. 

Сегодня, когда время бекапирования перевалило за 11 часов, я принудительно остановил процесс, и получил странный лог - странность в том, что два раза повторилось START, чего раньше не было. Выше - лог полного бекапирования, которое прошло "с нуля" в пустую папку на ура. Ну, а ниже - начало и прерывание. 

Что может быть не так в скрипте? Или, возможно, настроить сам duplicity, но я нигде никаких особых подробностей не нашел.

Я с Линуксом не особо знаком, нужда, как говорится, заставила...

 

p.s. Вообще у нас теперь две ВМ, бекапирование которых по очереди чередуется кроном и таким же скриптом, но с другими путями, но со второй ВМ проблем пока нет, да она и маленькая по размеру - полный бекап всего 15 минут делается. Но, может. как то влияет. 

В ответ на Игорь М

Re: Создание резервных копий ВМ Moodle

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle
Полный бекап 197 Гб moodledata у меня выполняется 40 минут. Это tar + zstd. Инкрементальный - 2-4 минуты .
Но это контейнер, а не виртуалка.

IMHO Хранение снапшотов ВМ в отдельных файлах и отдельном месте было разумным решением. Возможно это особенность реализации снапшотов в VB.
Постоянно делать бекап всей виртуалки при таких размерах - бессмысленно.
Инкрементальный бекап всей ВМ - еще более бессмысленное занятие.
Инкрементальный бекап хорошо работает только с файлами. Сделайте это на уровне файлов moodle и получите адекватный результат и по времени и по размеру.

Виртуальная машина это удобно, но очень дорого с точки зрения накладных расходов.
В ответ на Виталий Лавров

Re: Создание резервных копий ВМ Moodle

от Игорь М -
Ну, мы исходили из своих возможностей. Точнее их отсутствия. Учитывая что с базами и линуксом, получается, работаю только я, который в них, мягко говоря, мало что понимает и делает все "в первый раз на свой страх и риск", установить заново систему ,настроить и восстановить потом из архива moodledata и базу мне гораздо проблематичнее, чем подоткнуть файл ВМ. Не, сделать то я , возможно, сделаю, но сколько мне на это нужно будет времени.
Со снапшотами мы погорячились. у нас один снимок "вытекал" из другого. То есть если какой-то снимок в середине битый - вся следующая за ним ветка оказывалась бесполезна. Я, когда сливал их в один файл, с этим столкнулся, причем на предпоследнем, когда оставалось "совсем чуть-чуть". Уже даже не помню, как удалось таки восстановить.
И вот думаю... А ведь таки да - один файл проверять на различие от предыдущей версии - это реально уйма времени и ресурсов. Может, нам тогда делать просто полный архив, например, через день? И удалять те, которые больше недели. Размер диска позволяет (три ТБ)
В ответ на Виталий Лавров

Re: Создание резервных копий ВМ Moodle

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Виталий, редко кто рассказывает про запуск мудл в продакшне в контейнерах. Если не сложно, поделитесь в отдельной тех. ветке конфигами, думаю многим будет полезно
В ответ на Vadim Dvorovenko

Re: Создание резервных копий ВМ Moodle

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle
Создается контейнер очень просто "lxc-create -t ubuntu -n lms --dir /LXC/lxc2/rootfs-lms"

Дальше это полноценная ubuntu  только не привязанная к железу.
rootfs у нее на отдельном от системы lvm-томе. nginx,php-fpm,moodle и postgres поставлены так, чтобы все данные они хранили в /srv (который находится на отдельном lvm томе)

Конфиг  lxc до комментария создал lxc-create. Сеть и диски я дописал сам. Туда же можно добавлять ограничения по числу ядер и памяти.

lxc.include = /usr/share/lxc/config/ubuntu.common.conf
lxc.start.auto = 1
lxc.rootfs = /LXC/lxc2/rootfs-lms
lxc.rootfs.backend = dir
lxc.utsname = lms
lxc.arch = amd64
#
lxc.network.type = veth
lxc.network.link = br1
lxc.network.flags = up
lxc.network.hwaddr = 00:16:3e:51:51:3a
lxc.mount.entry= /LXC/srv2/lms /LXC/lxc2/rootfs-lms/srv none bind 0 0


В ответ на Виталий Лавров

Re: Создание резервных копий ВМ Moodle

от Игорь М -
А не подскажете вот по какому вопросу. Решили делать полные бекапы через день. Чтобы не занимать место - решили оставлять только три полных копии. Написали скрипт. Первый раз бекапирование отработало - создало бекап "с нуля", все нормально, относительно быстро. Но сегодня, через день, снова бекапирование длится уже вот восьмой час. Видимо, опять разницу ищет. Хотя в логе при начале бекапирования так и написано, что "последняя полная резервная копия старая, будет создана полная резервная копия". Может, что то в скрипте не так?
------------------------------------------------
#!/bin/bash
DIR_VMS='/mnt/raid/M_2021'
DIR_BKP_STORE='/mnt/backup/backup_2021'
NAME_LOG='/var/log/backup-2021.log'
echo " " >> $NAME_LOG
echo "----------------START----------------" >> $NAME_LOG
VBoxManage controlvm M_2021 pause
echo "Началось архивирование образов жестких дисков в " `date +%Y.%m.%d-%H:%M:%S` >> $NAME_LOG
duplicity --full-if-older-than 1D --no-encryption $DIR_VMS file://$DIR_BKP_STORE >> $NAME_LOG
echo "Архивирование закончено в " `date +%Y.%m.%d-%H:%M:%S` >> $NAME_LOG
duplicity remove-older-than 6D --force file://$DIR_BKP_STORE
duplicity remove-all-inc-of-but-n-full 3 --force file://$DIR_BKP_STORE
VBoxManage controlvm M_2021 resume
date >> $NAME_LOG
echo "----------------END----------------" >> $NAME_LOG
-----------------------------------------------------------------

--full-if-older-than 1D - если видит, что полный архив делался раньше, чем день назад - делает полный. Так как скрипт будет раз в два дня запускаться, то вроде самое оно.
remove-older-than 6D - удаляет все, что раньше 6 дней (ну у нас же бэкап - раз в два дня)
Что-то не учтено еще?
В ответ на Игорь М

Re: Создание резервных копий ВМ Moodle

от Игорь М -
ну и сейчас совсем непонятное... Скрипт заустился в полночь. сейчас у нас уже почти полдень - 11.34 Бекапирование идет до сих пор.
И htop показывает, что бекапирование идет два с половиной часа. Я в пять утра смотрел - показывал, что полтора часа. Такое ощущение, что он или постоянно с начала начинает, или просто зациклился. 

cron вроде настроен на конкретные дни недели
 
но при этом лог показывает, что был один запуск скрипта