Linux - cota por diretório?

21

Eu tenho os seguintes cenários:

Partição única montada como /, com muito espaço em disco.

Há uma variedade de diretórios (/ pg / tbs1, / pg / tbs2, / pg / tbs3 e assim por diante), e eu gostaria de limitar o tamanho total desses diretórios.

Uma opção é criar alguns arquivos grandes, e depois executá-los no mkfs, montar sobre loopback e definir cota, mas isso torna a expansão um pouco problemática.

Existe alguma outra maneira de fazer a cota funcionar por diretório?


fonte
A montagem de arquivos via loopback realmente não apresenta um problema de expansão. Você simplesmente estenderia o arquivo subjacente e usaria resize2fspara aumentar o sistema de arquivos. Eu acho que usar o LVM é uma solução melhor, mas a que você propôs não tem as limitações que você acha que tem.
Larsks
Também btrfs e ZFS
hanshenrik

Respostas:

17

Se você é forçado a usar o ext3, usar o LVM é provavelmente a melhor solução. Crie um novo sistema de arquivos por projeto. Isso seria algo como isto:

# Create a 10g filesystem for "project1" in volume group "vg0"
lvcreate -L 10g -n project1 vg0

# Create an ext3 filesystem.
mke2fs -j /dev/vg0/project1

# Mount it (obviously you would want this in /etc/fstab)
mount /dev/vg0/project1 /projects/project1

É fácil aumentar os sistemas de arquivos do projeto:

# Add 2GB to the volume.
lvextend -L +2g /dev/vg0/project1

# Grow the filesystem.
resize2fs /dev/vg0/project1
larsks
fonte
6

Se você não confiar nas permissões do grupo, poderá usar um grupo UNIX diferente para cada "diretório de cota" e definir o bit sgid em cada diretório (para que os arquivos e diretórios criados pertençam ao grupo do diretório em vez do grupo principal do usuário criador) e use cotas de grupo.

jpetazzo
fonte
5

Sim. Veja o sistema de arquivos XFS e a cota do projeto. Outro sistema de arquivos não oferece esse recurso.

ondra
fonte
Infelizmente não posso mudar o fs subjacente. Mas é bom saber que o XFS tem esse recurso.
5

Na verdade, eu queria fazer isso por um tempo porque não queria criar usuários do sistema para todos os meus usuários de email virtual. Os sistemas de arquivos ZFS com cotas seriam ótimos e o zfs-fuse progride todos os dias, mas o que eu queria era uma solução muito leve. Finalmente, decidi escrever um sistema de arquivos FUSE que eu poderia montar como uma camada sobre outro sistema de arquivos (qualquer diretório base funcionará realmente). Ele possui um utilitário para gerenciar cotas com facilidade de script e, como os valores das cotas são apenas armazenados como xattrs em diretórios ou arquivos, um ponto de montagem pode fornecer suporte para um número arbitrário de cotas.

Venho testando-o em um servidor de correio há um tempo e recentemente decidi que chegara à adolescência e estava pronto para ser lançado na natureza. Se você estiver curioso, confira em http://code.google.com/p/fusequota/ . Eu gostaria muito de receber qualquer feedback.


fonte
O espelho Git não funcionou para mim. Sem erros, mas eu pode exceder a quota (em ext4 com opções de montagem RW, relatime, data = encomendado)
timdiels
3

O novo sistema de arquivos para cada pasta compartilhada é um exagero no IMHO. Apenas crie um novo grupo para cada pasta compartilhada, defina o grupo de proprietários da pasta compartilhada para este grupo, defina um pedaço fixo para agrupar (para que cada novo arquivo e diretório tenha esse grupo como proprietário) e, para permissões em arquivos e pastas, use listas acl. Em seguida, defina cotas para esses grupos.

user207604
fonte
1

Não conheço nenhum método para definir aspas por diretório.

Mas com a sua idéia de criar sistemas de arquivos com um tamanho limitado. Este pode ser um lugar onde o lvm seria uma boa solução.

Você pode fazer backup / reinstalar e usar o lvm , alocando apenas a quantidade mínima de espaço necessária para seus volumes lógicos. É muito fácil estender volumes lógicos lvm .

Zoredache
fonte