В 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
Для проверки можно запустить скрипт 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
Для проверки можно запустить скрипт 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 у меня уже автоматизирован:
Добавим автозапуск 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
Проверяем:
systemctl start seafile-fuse
systemctl status seafile-fuse
Теперь после загрузки сервера папка с содержимым Seafile будет монтироваться автоматически.
P.S.
Если вы используете скрипты для резервного копирования или восстановления библиотек, то не забудьте добавить в них остановку и запуск новой службы.