Перенос данных MikoPBX на новый диск
Эта инструкция нужна, когда локальное хранилище MikoPBX заполнено или старый диск требуется заменить на новый. В хранилище находятся записи разговоров, история разговоров, системные логи, дополнительные модули, резервные копии и временные файлы. В обычной установке каталог хранилища смонтирован в /storage/usbdisk1.
Инструкция рассчитана на установку MikoPBX на виртуальную машину или физический сервер. Для Docker-установки переносите каталог, который проброшен в контейнер как /storage, средствами хостовой ОС.
Команды разметки и форматирования удаляют все данные на выбранном диске. Продолжайте только если вы точно определили новый свободный диск.
Что важно знать
MikoPBX не использует постоянную ручную запись в /etc/fstab как единственный источник правды. Сведения о диске хранятся в базе конфигурации MikoPBX, а при подключении хранилища система монтирует раздел по UUID и пересобирает /etc/fstab.
Для переключения хранилища после копирования данных используйте штатный скрипт:
/etc/rc/connect_storageНе запускайте /sbin/freestorage из SSH-сессии как первый шаг миграции: этот скрипт останавливает в том числе SSH-сервер dropbear, поэтому удалённое подключение может оборваться.
Предварительные требования
есть доступ к MikoPBX по SSH под
root;
Инструкцию для подключения по SSH Вы можете найти здесь.
к серверу подключён новый свободный диск;
сделана актуальная резервная копия конфигурации и важных данных;
на диске хранилища достаточно места для временной работы системы на время копирования;
вы готовы к короткому простою телефонии на время остановки служб и перезагрузки.
Определите текущий и новый диск
Подключитесь к MikoPBX по SSH и выполните диагностические команды:
Найдите:
текущий storage-раздел, смонтированный в
/storage/usbdisk1;новый диск без точки монтирования, без файловой системы и без важных данных.
Пример: текущий storage находится на /dev/vdb1, а новый свободный диск - /dev/vdc.
Дополнительно проверьте новый диск:
Если у диска есть разделы, файловая система, UUID, точка монтирования или вы не уверены в его назначении, остановитесь и уточните, что это действительно свободный диск.
Сохраните локальную копию базы конфигурации
Перед переключением диска сохраните копию базы и текущего /etc/fstab:
Эта копия не заменяет полноценный backup, но помогает быстро откатить изменение выбора storage-диска.
Остановите службы, которые пишут в хранилище
Остановите фоновые задачи и основные службы MikoPBX:
Проверьте, что процессы больше не держат файлы в старом хранилище:
Если команда выводит процессы, не продолжайте перенос. Разберите, какая служба осталась активной, остановите её и повторите проверку.
Разметьте и отформатируйте новый диск
Следующие команды полностью очищают NEW_DISK.
Создайте на новом диске таблицу GPT, один раздел на весь диск и файловую систему ext4:
Убедитесь, что переменные заполнены:
Скопируйте данные старого хранилища
Смонтируйте новый раздел во временный каталог и скопируйте содержимое текущего /storage/usbdisk1:
Проверьте копию:
Количество объектов должно совпадать. Если после проверки вы запускаете службы до окончания миграции, число файлов может измениться из-за логов и временных файлов, поэтому сравнение выполняйте именно при остановленных службах.
Отмонтируйте временную точку:
Подключите новый диск как хранилище MikoPBX
Снимите старый storage-раздел с /storage/usbdisk1:
Если получите target is busy, проверьте держателей:
Остановите найденные процессы и повторите umount. Если lsof и, при наличии, fuser ничего не показывают, а раздел всё равно занят, допустим крайний вариант:
После этого запустите штатное подключение storage-диска и передайте имя нового диска без /dev/:
Скрипт должен найти новый раздел с каталогом mikopbx, сохранить UUID в конфигурации MikoPBX, смонтировать его в /storage/usbdisk1 и пересобрать /etc/fstab.
Запустите службы
Верните службы под управление monit и перезапустите workers:
Проверьте состояние:
Проверьте постоянное монтирование после перезагрузки
Перезагрузите MikoPBX:
SSH-сессия может оборваться. После загрузки подключитесь снова и проверьте:
В корректном состоянии:
/storage/usbdisk1смонтирован с нового раздела;UUID нового раздела указан в
/etc/fstab;в таблице
m_Storageуказан новый диск;каталог
/storage/usbdisk1/mikopbxи база истории разговоров доступны;основные службы MikoPBX в
monit summaryимеют статусOK;Asterisk отвечает на
core show uptime.
Откат
Если новый диск не подключился, а старый диск не очищался, можно вернуться на старый storage:
Замените vdb на имя старого диска без /dev/.
Если нужно вернуть всю запись конфигурации storage из сохранённой копии базы:
Частые проблемы
/etc/rc/connect_storage пишет, что диск уже смонтирован.
Старое хранилище ещё подключено к /storage/usbdisk1. Остановите пишущие службы и выполните umount /storage/usbdisk1.
Новый диск не появляется в списке подходящих дисков.
Проверьте lsblk -f. Диск должен быть виден системе, не должен быть смонтирован как другой каталог и должен быть больше 2 ГБ.
После umount появляется target is busy.
Используйте lsof +f -- /storage/usbdisk1 и, если команда есть в системе, fuser -vm /storage/usbdisk1. Остановите процессы, которые держат файлы. umount -l применяйте только после остановки служб и проверки, что активных держателей не осталось.
После перезагрузки storage не смонтировался.
Сравните UUID в blkid, /etc/fstab и m_Storage. Затем повторите подключение:
Службы долго находятся в Initializing или Waiting.
Сразу после boot это нормально для части проверок monit. Подождите 1-2 минуты и повторите:
Last updated
Was this helpful?

