Перейти к основному содержанию
 

Seafile — расширение FUSE

Seafile

В Seafile данные не хранятся в виде файлов а разбиты на блоки. Это позволяет эффективно использовать механизм дедупликации данных. Но иногда администратору сервера необходимо получить доступ к данным Seafile как в обычной файловой системе, для этого используется расширение seaf-fuse.

Seaf-fuse является реализацией виртуальной файловой системы FUSE. Этот скрипт монтирует всё содержимое Seafile в папку (которая называется "mount point"), так что мы получаем доступ ко всем файлам Seafile так же, как к обычной папке на сервере.

Примечания:

  • Доступ к зашифрованным папкам с помощью seaf-fuse не предоставляется.
  • Данные доступны только для чтения.
  • В debian/centos для монтирования папки FUSE пользователь должен быть в группе "fuse".

Что хочется получить:

  • Seafile настроен на Ubuntu.
  • Я хочу все данные Seafile смонтировать в директорию /opt/seafile-fuse.
  • Все службы Seafile у меня работают под пользователем sf, поэтому seaf-fuse тоже будет запускаться под этим же пользователем.
  • Монтирование директории должно происходить автоматически после перезагрузки сервера (systemd).

Ссылки

https://manual.seafile.com/extension/fuse/

Как использовать seaf-fuse

Создаём точку монтирования, назначаем владельцем пользователя, от имени которого работает seafile:

mkdir /opt/seafile-fuse
chown sf\: /opt/seafile-fuse

У меня Ubuntu, поэтому для монтирования директории пользователь должен быть участником группы fuse. Создадим группу и добавим в неё пользователя:

groupadd fuse
usermod -aG fuse sf

seafile

Для проверки можно запустить скрипт seaf-fuse от имени пользователя, под которым работает seafile:

/opt/seafile-server-latest/seaf-fuse.sh start /opt/seafile-fuse

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

Starting seaf-fuse, please wait ...
Failed to init log.
Failed to start seaf-fuse

Нужно сначала удалить лог файл. Или сменить владельца на пользователя, под которым работает seaf-fuse.

В папке /opt/seafile-fuse появится содержимое Seafile. Пример содержимого:

$ ls -lhp /opt/seafile-fuse

drwxr-xr-x 2 root root 4.0K Jan  1  1970 abc@abc.com/
drwxr-xr-x 2 root root 4.0K Jan  1  1970 foo@foo.com/
drwxr-xr-x 2 root root 4.0K Jan  1  1970 plus@plus.com/
drwxr-xr-x 2 root root 4.0K Jan  1  1970 sharp@sharp.com/
drwxr-xr-x 2 root root 4.0K Jan  1  1970 test@test.com/

Верхний уровень библиотек — папка с именем пользователя Seafile. Внутри папки пользователя библиотеки:

$ ls -lhp /opt/seafile-fuse/abc@abc.com

drwxr-xr-x 2 root root  924 Jan  1  1970 5403ac56-5552-4e31-a4f1-1de4eb889a5f_Photos/
drwxr-xr-x 2 root root 1.6K Jan  1  1970 a09ab9fc-7bd0-49f1-929d-6abeb8491397_My Notes/

Внутри библиотек :

$ ls -lhp /opt/seafile-fuse/abc@abc.com/5403ac56-5552-4e31-a4f1-1de4eb889a5f_Photos/

-rw-r--r-- 1 root root 501K Jan  1  2021 image.png
-rw-r--r-- 1 root root 501K Feb  1  2021 sample.jpeg

Для остановки монтирования:

/opt/seafile-server-latest/seaf-fuse.sh stop

По умолчанию доступ к содержимому имеет пользователь root, дадим доступ всем пользователям сервера. Редактируем файл /etc/fuse.conf. Раскомментируем опцию:

user_allow_other

seafile

Для проверки можно запустить скрипт seaf-fuse от имени пользователя, под которым работает seafile, с параметрами:

/opt/seafile-server-latest/seaf-fuse.sh start -o allow_other /opt/seafile-fuse

В папке /opt/seafile-fuse появится содержимое Seafile. Доступ к содержимому имеют все пользователи.

Для остановки монтирования:

/opt/seafile-server-latest/seaf-fuse.sh stop

Автоматизируем запуск seaf-fuse

Запуск служб Seafile у меня уже автоматизирован:

Seafile — автозапуск

Добавим автозапуск seaf-fuse в systemd.

${seafile_dir} — измените переменную на путь к вашей директории Seafile. У меня /opt.
User и Group — измените на своего пользователя и группу.

Работаем под рутом. Создаём сервис seafile-fuse:

sudo vim /etc/systemd/system/seafile-fuse.service

Сервис будет запускаться после seafile и seahub. Содержимое:

[Unit]
Description=Seafile fuse
After=network.target seafile.service seahub.service

[Service]
Type=forking
ExecStart=${seafile_dir}/seafile-server-latest/seaf-fuse.sh start -o allow_other /opt/seafile-fuse
ExecStop=${seafile_dir}/seafile-server-latest/seaf-fuse.sh stop
LimitNOFILE=infinity
User=sf
Group=sf

[Install]
WantedBy=multi-user.target

Настраиваем автозагрузку:

systemctl daemon-reload
systemctl enable seafile-fuse

seafile

Проверяем:

systemctl start seafile-fuse
systemctl status seafile-fuse

seafile

Теперь после загрузки сервера папка с содержимым Seafile будет монтироваться автоматически.

P.S.

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

Теги