Minha pasta / tmp não é uma partição, mas tem tamanho fixo. Por quê?

3

Eu estava compilando 2 kernels de uma só vez, mas o processo de compilação parou. Razão: diretório / tmp completo. Eu verifiquei com df e ... / tmp tem um tamanho fixo de 2GB! (Meu PC tem 4GB de RAM) Por quê? Eu nem tenho uma partição / tmp ... como posso mudar isso?

    File system    1K-blocks    Usati Disponib. Uso% Montato su
/dev/sda5       35431432 13651652  19973276  41% /
dev              1989592        0   1989592   0% /dev
run              1992432      976   1991456   1% /run
tmpfs            1992432      280   1992152   1% /dev/shm
tmpfs            1992432        0   1992432   0% /sys/fs/cgroup
tmpfs            1992432  1436412    556020  73% /tmp
    
por peperunas 13.07.2013 / 14:57

3 respostas

5

Colocar um limite no /tmp size se ele estiver montado como tmpfs é para evitar um ataque do DOS. Se um serviço estivesse comprometido ou um usuário malicioso, eles poderiam simplesmente escrever para /tmp até que toda a troca e memória estivessem ocupadas.

Como a condição OOM não se aplica a arquivos, os processos seriam eliminados até que o shell do usuário mal-intencionado fosse eliminado (e ele não conseguiria efetuar login devido à falta de memória) ou o serviço comprometido seria eliminado. Neste estágio, o sistema seria muito lento para que o administrador realmente fizesse qualquer outra coisa e reiniciasse, o que limparia a evidência, tornando-a técnica efetiva do DOS.

Não tendo /tmp como uma montagem separada, um problema ligeiramente diferente aconteceria. Tornar a partição / completa pode tornar o sistema não inicializável e, em uma situação muito ruim (por exemplo, uma atualização da glibc), pode exigir muito mais reparos.

Embora esses problemas possam ser significativos para vários sistemas, há também um motivo para impedi-los para usuários de computadores. Por exemplo, uma vez eu usei um programa que tentava escrever vários GB de arquivos em momentos em que 512 MiB era uma grande quantidade de RAM, o que tornaria o sistema inutilizável se o tmpfs fosse ilimitado. Desta forma, apenas causam problemas para o próprio programa e outros que tentam escrever para /tmp .

50% da RAM para o tmpfs permite usar 50% da RAM para outras coisas, como rodar programas, evitando assim grandes trocas. Como geralmente é assumido que uma quantidade mínima de informação é mantida lá (41M no meu sistema), mas precisa ser rapidamente acessível é a razão de usar o tmpfs em primeiro lugar (não é necessário preservá-lo entre reinicializações). Assim, 50% é 'razoável' para ambos com grande folga no caso de um pico /tmp de uso acontecer, ao mesmo tempo que impede a lentidão do sistema.

Como mencionado por abdelsaid, você pode alterar as configurações em /etc/fstab :

none /tmp tmpfs size=2G 0 0 # Change the size= parameter to whatever you want

PS. Onde você está tentando compilar os kernels (em /tmp )? Normalmente, você os compila com direitos de usuário E salva os resultados no caso de precisar de módulos de terceiros, etc. O gcc deve manter uma quantidade mínima de arquivos em /tmp , evitando assim todo o problema.

Depois que você usar 4 GB de /tmp no sistema de 4 GB, é possível (especialmente quando você estiver usando um ambiente de trabalho pesado) que o sistema diminuirá significativamente.

    
por 13.07.2013 / 19:38
4

Por instalação padrão, o RHEL e a maioria das distribuições Linux montam tmpfs (um sistema de arquivos temporariamente baseado em RAM) no diretório / dev / shm e esse tamanho de sistema de arquivos é sempre configurado para ser metade da memória instalada .

fonte: link

Você pode mudar isso especificando tamanho = ... em / etc / fstab:

por exemplo. 2 GB:

tmpfs      /dev/shm      tmpfs   defaults,size=2g   0   0

por exemplo. 4 GB:

tmpfs      /dev/shm      tmpfs   defaults,size=4g   0   0
    
por 13.07.2013 / 15:34
2

Se você preferir não ter o / tmp montado no tmpfs, procure em / etc / fstab por uma linha similar a esta:

tmpfs /tmp tmpfs defaults,noexec,nosuid 0 0

Remova-o, se presente.

Dependendo da distribuição, também pode ser configurado em / etc / default / tmpfs ou / etc / default / rcS. Edite esse arquivo e se a linha a seguir estiver presente, comente (prefixar um #):

RAMTMP=yes
    
por 13.07.2013 / 16:58