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

Seafile - garbage collection (GC)

Seafile

Seafile не удаляет за вас мусор. Для очистки хранилища от удалённых библиотек и файлов вам нужно будет воспользоваться специальным скриптом - seaf-gc.sh.

Сборщик мусора очищает два типа неиспользуемых блоков:

  1. Блоки, принадлежащие удаленным библиотекам.
  2. Устаревшие блоки.

Перед запуском seaf-gc.sh в Community Edition нужно остановить службы seafile и seahub.

Пробный запуск

Чтобы увидеть сколько мусора можно удалить, не выполняя само удаление, воспользуйтесь режимом пробного запуска:

seaf-gc.sh --dry-run [repo-id1] [repo-id2] ...

Вывод выглядит так:

[03/19/15 19:41:49] seafserv-gc.c(115): GC version 1 repo aa(f3d0a8d0)
[03/19/15 19:41:49] gc-core.c(394): GC started. Total block number is 5.
[03/19/15 19:41:49] gc-core.c(75): GC index size is 1024 Byte.
[03/19/15 19:41:49] gc-core.c(408): Populating index.
[03/19/15 19:41:49] gc-core.c(262): Populating index for repo f3d0a8d0.
[03/19/15 19:41:49] gc-core.c(308): Traversed 8 commits, 5 blocks.
[03/19/15 19:41:49] gc-core.c(264): Populating index for sub-repo 9217622a.
[03/19/15 19:41:49] gc-core.c(308): Traversed 4 commits, 4 blocks.
[03/19/15 19:41:49] gc-core.c(440): Scanning unused blocks.
[03/19/15 19:41:49] gc-core.c(472): GC finished. 5 blocks total, about 9 reachable blocks, 0 blocks can be removed.

[03/19/15 19:41:50] seafserv-gc.c(124): === Repos deleted by users ===
[03/19/15 19:41:50] seafserv-gc.c(145): === GC is finished ===

[03/19/15 19:41:50] Following repos have blocks to be removed:
repo-id1
repo-id2

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

Пример. 

seafile

Удаление мусора

Для удаления мусора не используйте опцию --dry-run:

seaf-gc.sh [repo-id1] [repo-id2] ...

Если не указывать в аргументах идентификаторы библиотек, то все библиотеки будут очищены.

А теперь тонкости.

Опция -r позволяет пропускать блоки, которые устарели.

seaf-gc.sh -r

Однако, народ в Интернете жалуется, что данная опция ведёт себя странно, рекомендую использовать оба варианта очистки мусора.

Мусор из корзины не удаляется, администратор должен его почистить.

Пример.

seafile

Многопоточность

Можно запустить сборщик мусора в несколько потоков:

seaf-gc.sh -t 20

Автоматизация очистки мусора

Можно сделать скрипт очистки и настроить расписание с помощью крона. Необходимо:

  • Настроить файл службы seafile и seahub. Внизу есть ссылка для установки Seafile, там я писал инструкцию на настройки служб.
  • sudo -u seafile - замените имя пользователя на то, под которым работает seafile.
  • $pathtoseafile замените на путь к seafile.
  • Скрипт запускать от root или с правами sudo.
  • Поместите скрипт в crontab пользователя root.

Создадим файл скрипта и дадим права на выполнение:

sudo touch /opt/haiwen/seafile/cleanupScript.sh
sudo chmod +x /opt/haiwen/seafile/cleanupScript.sh

Содержимое:

#!/bin/bash

#####
# Uncomment the following line if you rather want to run the script manually.
# Display usage if the script is not run as root user
#        if [[ $USER != "root" ]]; then
#                echo "This script must be run as root user!"
#                exit 1
#        fi
#
# echo "Super User detected!!"
# read -p "Press [ENTER] to start the procedure, this will stop the seafile server!!"
#####

# stop the server
echo Stopping the Seafile-Server...
systemctl stop seafile.service
systemctl stop seahub.service

echo Giving the server some time to shut down properly....
sleep 20

# run the cleanup
echo Seafile cleanup started...
sudo -u seafile $pathtoseafile/seafile-server-latest/seaf-gc.sh

echo Giving the server some time....
sleep 10

# start the server again
echo Starting the Seafile-Server...
systemctl start seafile.service
systemctl start seahub.service

echo Seafile cleanup done!

Добавьте расписание в crontab для пользователя root:

crontab -e

Расписание - каждое воскресенье в 2:00:

0 2 * * Sun /opt/haiwen/seafile/cleanupScript.sh

Сборка мусора в docker

Чтобы выполнить сборку мусора внутри док-контейнера seafile, вы должны запустить /scripts/gc.shскрипт. 

docker exec <whatever-your-seafile-container-is-called> /scripts/gc.sh

Ссылки

https://www.seafile.com

Seafile - установка на Ubuntu 18.04 LTS

Теги