S3QL – это соответствующая стандарту полнофункциональная, удаленная файловая система UNIX на базе облачного хранилища, концептуально неотличимая от любой локальной файловой системы. Кроме того, у S3QL есть дополнительные функции, такие как сжатие, шифрование, дедупликация данных, моментальные снимки файловой системы, что делает её особенно подходящей для резервного копирования и архивирования в режиме онлайн.
Стоит отметить, что файловая система s3ql позволяет подключить бакет S3 в качестве файловой системы только на одном устройстве. Использование одного и того же бакета в качестве файловой системы на разных устройствах невозможно.
Nextcloud – платформа, предлагающая набор программ для создания собственного облачного хранилища. Nextcloud поддерживает функцию внешнего хранилища, с помощью которой можно подключить (монтировать) внешние облачные хранилища, работающие по протоколу Amazon S3, FTP/FTPS, OpenStack Object Storage, SFTP, SMB/CIFS, WebDAV.
Кроме того, с помощью редактирования конфигурационного файла Nextcloud можно подключить облачное хранилище S3 в качестве основного хранилища. Однако, судя по комментариям, оба варианта имеют некоторые недостатки. Поэтому рассмотрим вариант использования облачного хранилища S3 в качестве файловой системы для Nextcloud.
Таким образом мы можем легко расширить файловое хранилище, при этом использовать недорогой сервис, предоставляющий хранение по протоколу S3 (протокол, совместимый с объектным хранилищем Amazon S3).
Как видно на скриншоте ниже, на сервере использовано всего 13 ГБ объема диска, при этом на Nextcloud (который расположен на этом сервере), использовано 182 ГБ объема диска. Используются параметры производительности сервера, но в качестве физического диска используется файловая система S3QL.
Обобщено, нам нужно установить пакет s3ql, примонтировать сетевую файловую систему, перенести данные Nextcloud в новую файловую систему, в настройках конфигурационного файла Nextcloud указать новое расположение директории хранения данных, создать службу systemd для автоматического монтирования файловой системы (в случае перезагрузки системы).
Установка и монтирование файловой системы S3QL
В качестве операционной системы используется Ubuntu 20.04. Пакет s3ql доступен в репозитории Ubuntu, однако версия выше в более новых версиях дистрибутива. По этой причине рекомендую использовать Ubuntu версии 20.04 или другой дистрибутив, который чаcто обновляет пакеты.
Установка пакета s3ql:
sudo apt install s3ql
Создаём директорию (каталог, папку), в которую будет примонтирована файловая система s3ql:
sudo mkdir -p /mnt/nextcloud
Название каталога может быть произвольным.
Задаем необходимые права для каталога:
chown -R www-data:www-data /mnt/nextcloud
В качестве хранилища S3 я выбрал сервис Wasabi. Цена одна из самых минимальных, скорость отличная. В сочетании с сервером Hetzner, скорость открытия файлов не отличается от скорости расположения файлов на сервере. Кроме того, Wasabi официально поддерживает файловую систему s3ql.
Перед монтированием файловой системы необходимо инициализировать серверную часть, в которой будут храниться данные. Это делается с помощью команды mkfs.s3ql.
Пример инициализации при использовании бэкэнда Amazon S3, где nikratio-s3ql-bucket – это бакет S3, в котором будет храниться файловая система:
mkfs.s3ql s3://ap-south-1/nikratio-s3ql-bucket
Пример инициализации при использовании Wasabi:
mkfs.s3ql s3c://s3.wasabisys.com:443/<BUCKET-NAME>
Где <BUCKET-NAME> это название созданного вами бакета.
В процессе инициализации необходимо будет указать данные access-key, secret-key, которые можно получить при создании пользователя в используемом сервисе S3. В ходе запроса данных encryption password можно ничего не указывать и нажать Enter.
Монтирование файловой системы s3ql в созданную ранее папку:
mount.s3ql s3://ap-south-1/nikratio-s3ql-bucket /mnt/nextcloud
Пример монтирования s3ql при использовании Wasabi:
mount.s3ql s3c://s3.wasabisys.com:443/<BUCKET-NAME> /mnt/nextcloud
Размонтирование (отключение) файловой системы:
umount.s3ql /mnt/nextcloud
Другие команды s3ql
- fsck.s3ql – проверка файловой системы s3ql
- s3qlstat – статистика файловой системы s3ql
Создание службы systemd для s3ql
Служба sysmd будет использовать в качестве автомонтирования файловой системы s3ql.
Сначала нужно создать файл авторизации:
nano /etc/s3ql.authinfo
Вставляем свои данные, полученные на используемом сервисе:
[wasabi-s3] backend-login: access-key backend-password: secret-key storage-url: s3c://s3.wasabisys.com:443/<BUCKET-NAME>
Сохраняем изменения и закрываем редактор nano комбинацией клавиш CTRL+O, CTRL+X.
Где access-key, secret-key – ключи, полученные на используемом сервисе, а BUCKET-NAME – название бакета.
Задаем права файлу авторизации:
chmod 600 /etc/s3ql.authinfo
Создаем папку /var/cache/s3ql:
sudo mkdir -p /var/cache/s3ql
Создаем службу systemd:
nano /etc/systemd/system/s3ql-mounthing.service
Вставляем следующее содержимое, не забыв заменить на свои данные:
[Unit] Description=mount s3ql filesystem Wants=network-online.target [Service] ExecStart=/usr/bin/mount.s3ql --fg --cachedir /var/cache/s3ql --authfile /etc/s3ql.authinfo --compress none --cachesize 1048576 --allow-other s3c://s3.wasabisys.com:443/tuxcloud /mnt/nextcloud ExecStop=/usr/bin/umount.s3ql /mnt/nextcloud TimeoutStopSec=42 [Install] WantedBy=multi-user.target
Где tuxcloud – это название вашего бакета, а /mnt/nextcloud – папка монтирования файловой системы s3ql.
Сохраняем изменения и закрываем редактор nano комбинацией клавиш CTRL+O, CTRL+X.
Включаем службу:
systemctl enable s3ql-mounthing
Для проверки, вы можете перезагрузить систему и затем проверить статус службы командой systemctl status s3ql-mounthing
Перенос данных, пользовательской папки (директории) Nextcloud в новое расположение
В нашем случае мы перенесем папку из физического расположения на сервере в облачную файловую систему s3ql.
Останавливаем службы, необходимые для Nextcloud:
service nginx stop service php7.4-fpm stop service redis-server stop service mysql stop
Проверяем, если права папки монтирования принадлежат www-data, если нет, то задаем их:
chown -R www-data:www-data /mnt/nextcloud
Копируем содержимое данных пользовательского каталога Nextcloud в примонтированную папку:
rsync -av /nextcloud-data/ /mnt/nextcloud
Где nextcloud-data – это используемый каталог, указанный в ходе установки Nextcloud, у вас может быть другой. А /mnt/nextcloud – ранее созданный каталог для монтирования файловой системы s3ql.
Вносим изменения в конфигурационный файл Nextcloud:
sudo -u www-data nano /var/www/nextcloud/config/config.php
В следующих двух строках указываем новое расположение пользовательского каталога Nextcloud:
... 'datadirectory' => '/mnt/nextcloud', ... и ниже: [...] 'logfile' => '/mnt/nextcloud/nextcloud.log', [...]
Так же меняем параметр строки filelocking.enabled с true на false.
[...] 'filelocking.enabled' => 'false', [...]
Сохраняем изменения и закрываем редактор nano комбинацией клавиш CTRL+O, CTRL+X.
Перезапускаем ранее остановленные службы и выполняем индексирование:
service php7.4-fpm start service redis-server start service mysql start cd /var/www/nextcloud redis-cli -s /var/run/redis/redis-server.sock FLUSHALL quit sudo -u www-data php occ files:scan --all -v sudo -u www-data php occ files:scan-app-data -v service nginx restart
Некоторое время потребуется для загрузки скопированных файлов на сервер S3.
Решение возможных проблем
Столкнулся с проблемой, при которой сразу после переноса данных, функция «Версии» сохраняла в большом количестве версии файлов. Решение:
sudo -u www-data php /var/www/nextcloud/occ versions:cleanup Tux
Где Tux – это имя пользователя Nextcloud.
Никаких других проблем не было. Использую сервер от Hetzner, перед созданием снимков системы (snapshot), останавливаю службы, необходимые для Nextcloud, затем делаю снимок.
Перенос данных, пользовательской папки (директории) в Nextcloud snap
Инструкция по переносу пользовательской директории Nextcloud при использовании версии Nextcloud snap в удаленную файловую систему s3ql.
Nextcloud snap позволяет использовать другое расположение пользовательского каталога только в директориях /media/ и /mnt/, поэтому монтировать файловую систему s3ql надо только в одну из перечисленных директорий.
Из инструкции выше выполните шаги по установке пакета s3ql, созданию файла s3ql.authinfo и каталога монтирования, директории кэширования /var/cache/s3ql и службы systemd – s3ql-mounthing. А так же выполните монтирование файловой системы s3ql.
Прежде чем мы сменим пользовательскую директорию в конфигурационном файле Nextcloud, нам нужно подключить модули removable-media и network-observe:
sudo snap connect nextcloud:removable-media sudo snap connect nextcloud:network-observe
Согласно официальному руководству отключаем Nextcloud:
sudo snap stop nextcloud
Меняем расположение пользовательского каталога в конфигурационном файле:
sudo nano /var/snap/nextcloud/current/nextcloud/config/config.php
// ... 'datadirectory' => '/mnt/nextcloud', // ...
Где /mnt/nextcloud – это созданный каталог для монтирования s3ql.
Копируем содержимое каталога данных в новую директорию:
rsync -av /var/snap/nextcloud/common/nextcloud/data /mnt/nextcloud
Запускаем Nextcloud snap:
sudo snap start nextcloud
Советы и рекомендации
• Программа «Верни Сбер на iPhone» для Windows: Как восстановить приложение СберБанка на iOS не выходя из дома
• Как играть в Brawl Stars в России с помощью Comss.one DNS
• GitHub Copilot стал бесплатным: как получить доступ в России через Comss.one DNS
• Как использовать Google Gemini 2.0 Flash (Experimental) бесплатно – на сайте Gemini, в Google AI Studio и приложении
• Доступ к GitHub Copilot, Notion и Home Connect через Comss.one DNS в России
• Как использовать Sora – нейросеть OpenAI для генерации видео