Lixeira no Samba

Em qualquer servidor de arquivos, a principal prioridade é assegurar a integridade e a segurança dos dados. Entretanto, pois estável que seja a rede e por mais robusto que seja o servidor, o elo mais fraco da cadeia acaba sendo sem o usuário. De nada adianta um servidor perfeitamente estável se ele deleta um arquivo importante sem querer.

Pensando nisso, o Samba oferece a opção de usar uma lixeira, que pode lhe poupar muita dor de cabeça em diversas situações. Isso é feito através da opção “vfs object = recycle“, que cria uma lixeira dentro de cada pasta compartilhada, que armazena todos os arquivos deletados. Isso previne a remoção acidental de arquivos, já que o usuário passa a precisar deletar o arquivo e em seguida limpar o conteúdo da lixeira para realmente removê-lo, que é o comportamento esperado por muitos.

Por padrão, os arquivos deletados vão para a pasta “.recycle” (dentro do compartilhamento), mas o nome pode ser alterado através da opção “recycle:repository = lixeira” (onde o “lixeira” é o nome desejado, que pode ser qualquer um). Quando uma pasta é deletada, o padrão é simplesmente misturar todos os arquivos no diretório raiz da lixeira, mas isso pode ser evitado adicionando a opção “recycle:keeptree = yes”. Aqui temos mais um exemplo de compartilhamento, incluindo as três opções:

[projetos]
path = /mnt/sda2/projetos
writable = yes
valid users = +apolo, isac
vfs object = recycle
recycle:repository = lixeira
recycle:keeptree = yes

utra opção útil é a “recycle:versions”, que faz com que a lixeira mantenha diferentes versões do mesmo arquivo, em vez de manter apenas a última versão. Os arquivos repetidos passam então a ser renomeados para “Copy #1 of Samba.sxw”, “Copy #2 of Samba.sxw” e assim por diante.

recycle:versions = yes

Com isso você passa a dormir um pouco mais tranquilo a noite e se salva (na maior parte dos casos) de precisar recuperar arquivos acidentalmente deletados a partir de backups. É preciso apenas se lembrar de verificar o conteúdo das lixeiras de vez em quando e limpar as pastas quando elas começarem a consumir muito espaço em disco (você pode inclusive deletar a pasta da lixeira inteira, pois ela é recriada automaticamente quando o próximo arquivo for deletado).

Uma opção para reduzir o problema do espaço desperdiçado é centralizar todas as lixeiras em uma única pasta. Isso permite inclusive que você utilize uma partição ou um HD separado para armazenar os arquivos da lixeira, sem correr o risco de ela crescer até ocupar todo o espaço disponível na partição principal. Para isso, adicionamos a opção “recycle:repository”, seguida da pasta a ser utilizada (que deve ser criada previamente), como em:

recycle:repository = /var/samba/trash/

Centralizar todos os arquivos em uma única pasta criaria uma grande confusão, já que ela misturaria arquivos deletados por todos os usuários. Uma solução é adicionar a variável “%U”, que faz com que os arquivos sejam organizados em várias subpastas, separados por usuário (as subpastas são criadas automaticamente conforme necessário). Nesse caso a opção fica:

recycle:repository = /var/samba/trash/%U

problema em usar essa opção é que os usuários deixam de ver a lixeira, já que ela passa a ficar em uma pasta separada. Uma solução para o problema é criar um novo compartilhamento, que permite que cada usuário veja sua lixeira particular. Para isso, iremos novamente usar a variável “%U”:

[lixeira]
path = /var/samba/trash/%U
writable = yes

Usei a opção “writable = yes” para permitir que o próprio usuário possa limpar a lixeira quando quiser, mas isso é opcional. Vale lembrar que para que ele consiga limpar os arquivos da lixeira, é necessário que ele tenha permissão de escrita para a pasta “/var/samba/trash/”.

Mais uma medida útil para evitar desperdício de espaço é bloquear a gravação de arquivos de backup e arquivos temporários na lixeira, já que eles costumam ser numerosos e raramente são importantes. É saudável bloquear também arquivos .iso (que são tipicamente muito grandes), de forma que eles sejam também deletados diretamente. As extensões de arquivos são especificadas através da opção “recycle:exclude” e nomes de pasta através da opção “recycle:exclude_dir”, como em:

recycle:exclude = *.tmp, *.log, *.obj, ~*.*, *.bak, *.iso
recycle:exclude_dir = tmp, cache

Além de serem especificadas individualmente dentro de cada compartilhamento, as opções referentes à lixeira podem ser especificadas dentro da seção [global], o que é naturalmente o mais simples caso você deseje ativá-la para todos os compartilhamentos. O default do Samba 3 é manter todas as opções desativadas, de forma que a lixeira é usada quando as opções são especificadas.

Um exemplo de configuração, com a lixeira ativada dentro da seção [global], dois compartilhamentos de arquivos e mais o compartilhamento que dá acesso à pasta central por parte dos usuários seria:

[global]
workgroup = GRUPO
netbios name = SERVIDOR
vfs objects = recycle
recycle:keeptree = yes
recycle:versions = yes
recycle:repository = /var/samba/trash/%U
recycle:exclude = *.tmp, *.log, *.obj, ~*.*, *.bak, *.iso
recycle:exclude_dir = tmp, cache

[engenharia]
path = /mnt/sda2/engenharia
writable = yes
valid users = +engenheiros

[gerencia]
path = /mnt/gerencia
writable = yes
valid users = paulo, rebeca
hosts allow = micro3, micro4
browseable = no

[lixeira]
path = /var/samba/trash/%U
writable = yes

Ver Mais

Postagem relacionada