FreeBPX восстановление

Из-за выхода из строя винчестера, упал сервер. Ошибки ввода вывода не давали возможности с ним нормально поработать.

Так как все равно нужно было устанавливать систему то было решено сразу на новый винт поставить последнюю версию. 

После установки системы занялись попытками получить полезные данные со старого диска. И первая проблема которая возникла это одинаковые LVM2 метки дисков старого и нового. В результате нет возможности получить доступ к разделам на старом диске. Более того этот самый старый диск еще и мешал загрузке системы. Пришлось подключать старый диск в горячем режиме к уже загруженной системе. 

  • Метки дисков можно просмотреть командой: vgdisplay
  • Изменение метки команда: vgrename <UID> volgroup
  • Активация изменений без перезагрузки: vgchange -a y

Пример:

Я правда для верности его просто перегрузил. После изменения имен дисков LVM2 стало возможно получить доступ к разделам. Но смонтировать его не удалось. Из-за большого числа ошибок, было решено диск не добивать, а просто снять копию с диска в файл, для дальнейшей работы уже с образом:

Утилиту ddrescue пришлось поставить отдельно.

Файл монтируется командой: 

mount -o loop /path/to/file.iso /mnt

(При этом для случая образов с оптических дисков или дискет, указывается тип системы -t iso9660 – для оптических дисков и -t msdos – для дискет)

ПРИМЕЧАНИЕ: если есть проблема с устройством loop, его можно настроить через команду: losetup -P.

Получилось смонтировать образ и получить доступ к файловой системе.

Дальше захотелось красиво забекапить все данные, запустить службы и просто красиво сохранить данные.

Для этого были остановлены службы с новой системы:

  • fwconsole stop
  • system asterisk stop
  • system fail2ban stop
  • system httpd stop
  • system mariadb stop

Что бы они не занимали нужные порты и не мешали работать.

После чего подготавливаем chroot окружение, а именно создаем в нем копии файловых систем ядра (proc, dev, sys):

  • mount -t proc none /mnt/chroot/proc
  • mount -o bind /dev /mnt/chroot/dev
  • mount -o bind /sys /mnt/chroot/sys

И переход в новое окружение: chroot /mnt/chroot 

ПРИМЕЧАНИЕ: можно смонтировать эти файловые системы и из нового окружения, например: mount -t proc none /proc. По идее еще бы правильно смонтировать временные системы (из областей памяти).

После чего приступаем в запуску служб. Самая первая и самая нужная это база данных.

Запустить ее через system mariadb start – не удастся, так как система пожалуется, что вы в chroot окружении. Поэтому используем команду mysqld_safe.

Однако в моем конкретном случае база данных не поднялась, из-за ошибок в innodb. Для устранения ошибок идем в файл /etc/my.cnf.d/server.cnf и редактируем там раздел mariadb добавляем в него строку innodb_force_recovery = 1. Запускаем сервер, он пробует во становить данные и если все хорошо, то корректно завершаем сервер и удаляем строку из конфига. Если нет, то пытаемся увеличить уровень (подробнее тут https://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html).

Если восстановление успешное запускаем базу в нормальном режиме. После чего снимаем дам с базы данных: mysqldump –all-databases >restore.sql

https://www.digitalocean.com/community/tutorials/how-to-move-a-mysql-data-directory-to-a-new-location-on-ubuntu-16-04

Далее я пошел по пути запуска asterisk, для этого вручную запустил httpd демон, командой: nohup httpd &

Далее запустил астериск, командой: /etc/init.rd/asterisk start

После чего команда: fwconsole start

С первого раза возникали проблемы с запуском админки, а точнее оно не видела запущенный asterisk.

Для проверки того, что адника будет нормально работать выполнял вот такой файл

А также просмотр лога ошибок

tail -f /var/log/asterisk/full | grep ERROR

И добивался того, что бы он соединился с сервером asterisk. Для этого немного пошаманил с фалом конфигурации /etc/asterisk/manager.conf – тут прописал сетевые интерфейсы (permit=192.168.1.0/255.255.255.0), кроме того пока борол проблему нашел, что обязательно надо запустить  fwconsole chown && fwconsole start. В идеале бы стоило выполнить systemctl start freepbx, но в chroot оно не работает. 

ПРИМЕЧАНИЕ: кстати в нормальных условиях можно проверить статут FreePBX, через команду: systemctl status -l freepbx.service.

Если надо сменить пароль для порта управления, то  UPDATE freepbx_settings SET value=’correct_password’ WHERE keyword=’AMPMGRPASS’;

В результате строгий порядок запуска, который указан выше.

После успешного запуска удалось зайти в админку FreePBX.

Для копирования настроек вручную используют вот такие моменты:

FreePBX интенсивно использует БД астериска (не свой mysql, а /var/lib/asterisk/astdb)

просто скопировать /etc/asterisk/* и astdb на другую машину.

Тогда уж проще самому бэкапить /etc/asterisk/* (и еще несколько файлов из etc) /var/lib/asterisk/astdb /var/lib/asterisk/sounds/custom /var/lib/mysql/asterisk /var/lib/mysql/asteriskcdr (если надо cdr) /var/www/html/admin /var/spool/asterisk/voicemail (если нужна ГП) 
Тогда уж точно будешь знать, что развернув все на новом компе, получишь “как было”. 

Далее из модуля “Backup”  расположенного в меню “Admin” -> “Backup & Restore” – выполняем создание бекапа. Использовал шаблон “Config Backup” и  “System Audio”. Создал файл с данными и потом скопировал его на новую машину. Файл с данными находится /var/spool/asterisk/backup. https://wiki.freepbx.org/display/FPG/Using+the+Backup+module 

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

Обсуждение закрыто.