Перемещение папки с данными Nextcloud на более вместительный внешний жесткий диск кажется простой операцией копирования и редактирования. Но это не так. Важная деталь заключается в том, что Nextcloud идентифицирует локальное хранилище по его абсолютному пути на диске. Если этот путь изменить по неосторожности, сервер может рассматривать файлы как расположенные в другом месте, что может привести к появлению дубликатов или «осиротевших» записей файлов, повреждению метаданных или потере связей между общими ресурсами.
Таким образом, наиболее безопасный практический подход для существующей установки заключается в том, чтобы Nextcloud продолжал видеть тот же путь к каталогу данных , перемещая фактические данные на внешний диск. В текущем руководстве администратора Nextcloud прямо рекомендуется переместить каталог, а затем создать символическую ссылку с исходного пути на новое местоположение. В руководстве также предупреждается, что прямое изменение datadirectoryтребует изменений в базе данных и не является поддерживаемым методом миграции. См. руководство по устранению неполадок с каталогом данных Nextcloud .
Перед началом работы: что проверяется, а что зависит от вашей конфигурации?
| Вопрос | Практический ответ |
Могу ли я просто внести изменения datadirectoryв текст config.php? | Само по себе это небезопасно. В документации Nextcloud указано, что изменение абсолютного пути к локальному хранилищу может нарушить связи в базе данных. Предпочтительнее сохранить исходный путь с помощью символической ссылки. |
| Нужна ли мне полная резервная копия? | Да. Документация Nextcloud по резервному копированию включает в себя конфигурацию, каталог данных, базу данных и соответствующие данные пользовательских приложений/тем. Не рассматривайте старый диск как единственную резервную копию. |
| Обязательно ли внешний жесткий диск должен быть в файловой системе ext4? | Данная процедура не предписывает использование какой-либо конкретной файловой системы. В приведенных ниже примерах используется ext4, поскольку стандартное поведение Linux в отношении прав собственности и разрешений довольно простое. Для других файловых систем могут потребоваться другие параметры монтирования. |
Стоит ли мне files:scan --allпосле этого побегать? | Обычно не используется для перемещения с сохранением пути. Применяется, когда файлы фактически отсутствуют в файловом кэше или когда файлы были скопированы в дерево данных вне Nextcloud и требуется немедленное повторное сканирование. |
| Насколько надежен USB-накопитель по сравнению с внутренним жестким диском? | Это зависит от корпуса, кабеля, питания, файловой системы и хоста. Недоступность съемного диска представляет собой риск потери доступности, поэтому сделайте монтирование постоянным и проверьте его перед запуском Nextcloud. |
1. Установите внешний жесткий диск на устойчивой опоре.
Сначала определите устройство и файловую систему. В Linux команды, такие как `<filesystem>` lsblk -fи blkid`<filesystem>`, показывают UUID файловой системы. Избегайте создания постоянной конфигурации на основе имени устройства, например /dev/sdb1`<filesystem>`; имена устройств в Linux могут меняться при добавлении оборудования или изменении порядка обнаружения. В руководстве по fstab для Linux рекомендуется использовать идентификаторы UUID или LABEL для постоянных точек монтирования.
lsblk -f
sudo blkid /dev/sdb1
sudo mkdir -p /mnt/nextcloud-data-storage
Добавьте подходящую запись в файл /etc/fstab. Замените пример UUID и тип файловой системы значениями с вашего диска:
UUID=YOUR-FILESYSTEM-UUID /mnt/nextcloud-data-storage ext4 defaults 0 2
Затем проверьте монтирование, прежде чем вносить изменения в Nextcloud:
sudo mount -a
findmnt /mnt/nextcloud-data-storage
df -h /mnt/nextcloud-data-storage
Перед перемещением файлов Nextcloud проверьте внешний диск по UUID и подтвердите точку его монтирования.
Распространенное заблуждение: наличие каталога с определенным именем /mnt/nextcloud-data-storageне доказывает, что диск смонтирован в этом каталоге. Если диск отсутствует, каталог точки монтирования может по-прежнему существовать на системном диске. Действие: используйте команду findmnt`make` или ` mountpointmake` каждый раз при тестировании миграции и после перезагрузки.
2. Создайте резервную копию Nextcloud и остановите запись.
В текущем руководстве по резервному копированию Nextcloud указано, что восстанавливаемая резервная копия включает в себя каталог данных, конфигурацию, базу данных и другое содержимое, специфичное для развертывания, такое как пользовательские приложения и темы. Ознакомьтесь с официальной документацией Nextcloud по резервному копированию и убедитесь, что резервная копия хранится в другом месте, а не на том диске, который вы собираетесь переразметить или перепрофилировать.
Далее включите режим обслуживания из каталога установки Nextcloud. В Debian и Ubuntu учетная запись веб-сервера обычно выглядит так www-data:
cd /var/www/nextcloud
sudo -E -u www-data php occ maintenance:mode --on
В руководстве по миграции также указано, что во время переноса не следует запускать задания cron, и рекомендуется остановить веб-серверы/серверы приложений на время перемещения данных. Способ выполнения этого зависит от используемой системы развертывания: Apache, Nginx плюс PHP-FPM, Docker Compose, Snap, AIO и Kubernetes имеют разные границы доступа к сервисам.
Действие: отключите запись cron в Nextcloud или остановите соответствующую службу cron, затем остановите веб-службу/приложение перед окончательным копированием. Если набор данных очень большой, вы можете предварительно заполнить внешний диск данными, пока сайт находится в сети, затем перейти в режим обслуживания, остановить записывающие устройства и выполнить заключительный rsyncпроход для фиксации изменений.
3. Скопируйте всю папку с данными, включая скрытые файлы.
Не копируйте только папки пользователей. Каталог данных также содержит скрытые файлы, такие как .ncdataданные приложений, которые относятся к хранилищу. Nextcloud явно указывает на скрытые файлы (включая файлы, начинающиеся с точки) в своей процедуре перемещения.
Предположим, текущий каталог — это `<каталог>` /var/www/nextcloud/data, а внешний диск смонтирован в `< /mnt/nextcloud-data-storageкаталог>`. Создайте целевой каталог и скопируйте в него содержимое:
sudo mkdir -p /mnt/nextcloud-data-storage/data
sudo rsync -Aax --info=progress2 /var/www/nextcloud/data/ /mnt/nextcloud-data-storage/data/
В документации по восстановлению Nextcloud rsync -Aaxв качестве примера используется сохранение дерева каталогов и метаданных. Для очень больших установок выполните второй проход после остановки всех записывающих устройств и изучите результат. Необходимые параметры могут различаться в зависимости от того, использует ли ваш источник списки контроля доступа (ACL), расширенные атрибуты, необычные файловые системы или хранилище, смонтированное в контейнере.
Остановите фоновую запись и скопируйте все дерево данных, включая скрытые файлы метаданных Nextcloud.
Распространенное заблуждение: завершенное копирование означает окончание миграции. Это не так. Nextcloud по-прежнему нуждается в ожидаемом пути, и HTTP-пользователь должен иметь возможность перемещаться по новому местоположению и записывать в него данные. Действие: проверьте количество файлов или контрольные суммы перед переключением путей и сохраняйте исходный каталог нетронутым до тех пор, пока новое хранилище не пройдет проверку.
4. Сохраните исходный путь к данным с помощью символической ссылки.
Это ключевая мера безопасности. Предположим, что Nextcloud в настоящее время использует:
'datadirectory' => '/var/www/nextcloud/data',
Не изменяйте это значение для рекомендуемой миграции с сохранением пути. Вместо этого сохраните старый каталог в качестве копии для отката и замените его символической ссылкой, указывающей на внешний диск:
sudo mv /var/www/nextcloud/data /var/www/nextcloud/data.old
sudo ln -s /mnt/nextcloud-data-storage/data /var/www/nextcloud/data
ls -ld /var/www/nextcloud/data
В документации Nextcloud описан этот метод создания символических ссылок, поскольку локальное хранилище идентифицируется абсолютным путем. При наличии такой ссылки Nextcloud продолжает видеть данные, /var/www/nextcloud/dataдаже если они находятся на внешнем диске.
Перед внесением существенных изменений в права доступа проверьте права собственности:
stat -c '%U:%G %a %n' /var/www/nextcloud/data.old
stat -c '%U:%G %a %n' /mnt/nextcloud-data-storage/data
namei -l /mnt/nextcloud-data-storage/data
Пользователь HTTP должен иметь возможность перемещаться по родительским каталогам и читать/записывать данные в каталог. Правильный владелец зависит от дистрибутива и способа установки. В документации Nextcloud по OCC отмечается, что учетная запись HTTP обычно используется www-dataв Debian/Ubuntu, apacheFedora/CentOS и отличается в других системах.
Сохраните исходный путь к каталогу данных и укажите в нем путь к внешнему диску с помощью символической ссылки.
Распространенное заблуждение: рекурсивное выполнение универсальной команды chmod 777исправляет права доступа. Это может скрывать реальную проблему и ослаблять безопасность. Действие: сравните новый каталог с исходными правами собственности и правами доступа, сохраните списки контроля доступа (ACL) там, где они используются, и внесите только минимально необходимые исправления для пользователя HTTP.
А что, если вы действительно хотите перемен datadirectory?
В документации Nextcloud описана процедура без использования символических ссылок, но она помечена как неподдерживаемая и предупреждает о возможности повреждения базы данных. Для этого требуется как изменение config.php, так и обновление соответствующей local::/old-data-dir/записи в oc_storagesтаблице.
Это не просто альтернативный синтаксис для той же операции; он изменяет идентификатор хранилища, который Nextcloud записывает внутри себя. Действие: используйте метод символической ссылки, если у вас нет проверенной резервной копии, проверенного процесса восстановления и конкретной причины для удаления старого пути. При новой установке Nextcloud выберите конечное местоположение данных во время установки. Nextcloud прямо указывает, что это проще, чем перемещать его позже.
5. Перезагрузите систему, проверьте правильность монтирования и снова подключите Nextcloud к сети.
Перед запуском Nextcloud убедитесь, что внешняя файловая система действительно смонтирована и что символическая ссылка ведет на нее:
findmnt /mnt/nextcloud-data-storage
readlink -f /var/www/nextcloud/data
sudo -E -u www-data test -r /var/www/nextcloud/data/.ncdata && echo readable
Перезапустите веб-службу/приложение и повторно включите задание cron Nextcloud, используя метод, подходящий для вашей конфигурации. Затем отключите режим обслуживания и проверьте состояние сервера:
cd /var/www/nextcloud
sudo -E -u www-data php occ maintenance:mode --off
sudo -E -u www-data php occ status
Войдите в систему и протестируйте несколько операций: откройте существующий файл, загрузите новый файл, переименуйте его, удалите, восстановите из корзины и убедитесь, что другой клиент может его синхронизировать. Перезагрузите хост и повторите процедуру findmnt; это позволит обнаружить некорректную /etc/fstabзапись до того, как она станет неожиданностью во время сбоя.
После переключения проверьте как монтирование операционной системы, так и обычные операции с файлами в Nextcloud.
Вам это нужно occ files:scan --all?
Не автоматически. В документации по команде files в Nextcloud говорится, что files:scanона обновляет файловый кэш для новых или измененных файлов и может быть полезна после ручного копирования или при исследовании несоответствий кэша. Правильно выполненное перемещение с сохранением пути предназначено для сохранения тех же файлов и того же логического пути к локальному хранилищу, поэтому полное сканирование не должно быть шагом по умолчанию «на всякий случай».
Действие: сначала протестируйте пользовательский интерфейс и сравните ожидаемые файлы. Если файлы отсутствуют в Nextcloud, хотя они присутствуют на диске, используйте целевое сканирование или, если это оправдано. files:scan --allИмейте в виду, что полное сканирование большой установки может занять значительное время.
Итоговый контрольный список миграции
- Актуальная база данных, конфигурация и резервная копия данных находятся вне диска, с которого осуществляется миграция.
- Внешняя файловая система имеет стабильное монтирование, настроенное по UUID или LABEL.
findmntподтверждает, что внешний накопитель действительно подключен.
- Во время окончательной синхронизации запись в Nextcloud и выполнение заданий cron приостанавливаются.
- Была скопирована вся директория с данными, включая файл
.ncdata.
- Исходный
datadirectoryпуть к файлу сохраняется с помощью символической ссылки.
- Пользователь HTTP может перемещаться по пути монтирования и читать/записывать данные.
- Nextcloud запускается без ошибок хранилища и
occ statusработает в обычном режиме.
- Тесты загрузки, переименования, удаления, восстановления, скачивания и синхронизации прошли успешно.
- Сервер был перезагружен один раз, чтобы подтвердить, что внешний жесткий диск надежно подключается при запуске.
- Старая директория с данными не будет удалена до тех пор, пока новая конфигурация не будет протестирована и не будет создана отдельная резервная копия.
Главная идея проста: миграция данных Nextcloud — это не просто копирование файловой системы. Путь является частью идентификатора локального хранилища Nextcloud. По возможности сохраняйте этот путь, сделайте внешний диск надежным местом монтирования системы, остановите запись во время окончательного копирования и сохраните возможность отката до тех пор, пока новое хранилище не выдержит как тестирования приложениями, так и перезагрузки.