Сетевая корзина (Recycle Bin) на файловом сервере в Samba 4.5

 По различными причинам, случается так что какой то файл может быть удален с файлового сервера и в этом случае он будет потерян на всегда. Для того чтобы иметь возможность восстановить удаленный файл на файловом сервере samba предусмотрен модуль VFS (Virtual File System) — recycle (сетевая корзина), рассмотрим его применение.

 

Мое личное мнение что не стоит давать повсеместный доступ к сетевой корзине, а лучше ее вынести в отдельную общую папку и по необходимости подключать тому или иному человеку, а лучше всегда процесс восстановления удаленных файлов оставить на системном администраторе. Исходя из этого ниже будет рассмотрен именно такой сценарий, с выносом сетевой корзины в отдельную папку.

 

В файле конфигурации samba (/etc/samba/smb.conf) в секцию [global] добавим следующие параметры:


Пояснения по параметрам recycle:

recycle:repository — Задаем каталог расположения сетевой корзины. Если параметр не задан, то по-умолчанию сетевая корзина (.recycle) будет располагаться в корне каждой общей папки.
recycle:keeptree — Сохранять структуру каталогов для удаленных файлов.
recycle:versions — В случае если у удаленных файлов их имена совпадают, то к удаленном файлу в начале имени будет добавляться Copy #N of.
recycle:touch — Задавать дату изменения файла на время удаления файла.
recycle:exclude — Список исключений для файлов.

Сетевая корзина может располагаться только в той же FS что и общая папка для которой задается сетевая корзина. В случае если указать путь к сетевой корзине на другом диске, то в этом случае удаленные файлы не будут туда помещены, так как хард-линк можно сделать только в рамках одной FS.
Если уже используется какой-то модуль VFS, то перечисляем все объекты через пробел, например:
vfs object = recycle full_audit

 

Если необходимо включение сетевой корзины для какой то определенной общей папке, то тогда выше описанные параметры необходимо прописывать в секцию описания общей папки.

 

Что бы сетевая корзина не разрасталась, ее необходимо чистить. Для примера создадим скрипт (прим. recycle-clean.sh) для автоматического удаления файлов старше 30 дней. Содержание скрипта:

 

Добавим в cron выполнение созданного скрипта каждый день в 21:00: