Seafile не удаляет за вас мусор. Для очистки хранилища от удалённых библиотек и файлов вам нужно будет воспользоваться специальным скриптом — seaf-gc.sh.
Сборщик мусора очищает два типа неиспользуемых блоков:
- Блоки, принадлежащие удаленным библиотекам.
- Устаревшие блоки.
Перед запуском 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
Если не указывать в аргументах идентификаторы библиотек, то все библиотеки будут проверены.
Пример.
Удаление мусора
Для удаления мусора не используйте опцию --dry-run:
seaf-gc.sh [repo-id1] [repo-id2] ...
Если не указывать в аргументах идентификаторы библиотек, то все библиотеки будут очищены.
А теперь тонкости.
Опция -r позволяет пропускать блоки, которые устарели.
seaf-gc.sh -r
Однако, народ в Интернете жалуется, что данная опция ведёт себя странно, рекомендую использовать оба варианта очистки мусора.
Мусор из корзины не удаляется, администратор должен его почистить.
Пример.
Многопоточность
Можно запустить сборщик мусора в несколько потоков:
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