Seafile хранит данные в своём собственном формате. Однако, сами данные размещаются в файловой системе, например, ext4 или NTFS. После сбоя электропитания, при жёсткой перезагрузке или при ошибках RAID контроллера возможно повреждение данных в хранилище.
Дистрибутив Seafile содержит утилиту seaf-fsck, которая поможет исправить повреждения. Она восстанавливает любую поврежденную библиотеку до её последнего рабочего состояния.
Аргументы seaf-fsck:
cd seafile-server-latest
./seaf-fsck.sh [--repair|-r] [--export|-E export_path] [repo_id_1 [repo_id_2 ...]]
seaf-fsck может работать в трёх режимах:
- Проверка целостности библиотек.
- Восстановление повреждённых библиотек.
- Экспорт библиотек.
Проверка целостности библиотек
Запуск seaf-fsck.sh без аргументов запустит проверку целостности библиотек в режиме чтения.
cd seafile-server-latest
./seaf-fsck.sh
Если вы хотите проверить целостность определенных библиотек, добавьте идентификаторы библиотек в качестве аргументов:
cd seafile-server-latest
./seaf-fsck.sh [library-id1] [library-id2] ...
Вывод выглядит так:
[02/13/15 16:21:07] fsck.c(470): Running fsck for repo ca1a860d-e1c1-4a52-8123-0bf9def8697f.
[02/13/15 16:21:07] fsck.c(413): Checking file system integrity of repo fsck(ca1a860d)...
[02/13/15 16:21:07] fsck.c(35): Dir 9c09d937397b51e1283d68ee7590cd9ce01fe4c9 is missing.
[02/13/15 16:21:07] fsck.c(200): Dir /bf/pk/(9c09d937) is curropted.
[02/13/15 16:21:07] fsck.c(105): Block 36e3dd8757edeb97758b3b4d8530a4a8a045d3cb is corrupted.
[02/13/15 16:21:07] fsck.c(178): File /bf/02.1.md(ef37e350) is curropted.
[02/13/15 16:21:07] fsck.c(85): Block 650fb22495b0b199cff0f1e1ebf036e548fcb95a is missing.
[02/13/15 16:21:07] fsck.c(178): File /01.2.md(4a73621f) is curropted.
[02/13/15 16:21:07] fsck.c(514): Fsck finished for repo ca1a860d.
О поврежденных файлах и каталогах сообщают.
Иногда результат такой:
[02/13/15 16:36:11] Commit 6259251e2b0dd9a8e99925ae6199cbf4c134ec10 is missing
[02/13/15 16:36:11] fsck.c(476): Repo ca1a860d HEAD commit is corrupted, need to restore to an old version.
[02/13/15 16:36:11] fsck.c(314): Scanning available commits...
[02/13/15 16:36:11] fsck.c(376): Find available commit 1b26b13c(created at 2015-02-13 16:10:21) for repo ca1a860d.
Это означает, что текущее состояние библиотеки повреждено. В таком случае fsck попытается найти последнее рабочее состояние и проверить целостность.
Пример. У меня есть несколько библиотек:
Проверим парочку:
cd /opt/seafile-server-latest
./seaf-fsck.sh 463391eb-7b2e-4854-9ec2-69228fd3784e 5978b1c7-72f4-468d-b4c7-24eff048b559
Восстановление повреждённых библиотек
Восстановить все библиотеки:
cd seafile-server-latest
./seaf-fsck.sh --repair
Обычно сначала запускается проверка целостности библиотек, чтобы найти повреждённые, затем выполняется восстановление для найденных:
cd seafile-server-latest
./seaf-fsck.sh --repair [library-id1] [library-id2] ...
Пример. Полечим все библиотеки:
cd /opt/seafile-server-latest
./seaf-fsck.sh --repair
Экспорт библиотек
Библиотеки можно экспортировать в файловую систему.
Синтаксис:
cd seafile-server-latest
./seaf-fsck.sh --export top_export_path [library-id1] [library-id2] ...
top_export_path - это каталог для размещения экспортируемых файлов. Каждая библиотека будет экспортирована как подкаталог.
Если вы не укажете идентификаторы библиотек, все библиотеки будут экспортированы.
Зашифрованные библиотеки не экспортируются, они пропускаются.
Пример. Экспортирую библиотеку с фотками:
cd /opt/seafile-server-latest
./seaf-fsck.sh --export /opt/exportphoto ce93d8c6-573a-4c50-ab26-8333d05b0cc5