For the complete documentation index, see llms.txt. This page is also available as Markdown.

Перенос данных 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:

Проверьте, что процессы больше не держат файлы в старом хранилище:

Если команда выводит процессы, не продолжайте перенос. Разберите, какая служба осталась активной, остановите её и повторите проверку.

Разметьте и отформатируйте новый диск

Создайте на новом диске таблицу 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?