Como posso usar o armazenamento de RAM para o diretório / tmp e como definir uma quantidade máxima de uso de RAM para ele?

77

Depois de ver o comentário por Anonymous na questão Como o diretório / tmp foi limpo? , achei que seria uma ótima idéia implementar no meu sistema, já que tenho 16GB de RAM e nunca usei tudo isso.

  

Meus arquivos temporários nunca são gravados no disco. Eles são gravados em um disco RAM. Eu coloquei tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 em / etc / fstab.

Minha pergunta é:

Posso definir um valor máximo para uso de RAM para /tmp ? E, nesse caso, o que aconteceria se o valor máximo fosse excedido, ele gravaria na unidade de disco rígido?

Eu li uma solução que declara:

mkdir -p /tmp/ram
sudo mount -t tmpfs -o size=512M tmpfs /tmp/ram/

Mas, no meu entendimento, isso não será uma solução permanente. Se eu precisar que ele seja permanente, ele deve ser adicionado ao arquivo de configuração /etc/fstab .

Se esta é a solução correta, como posso transformar esse comando mount em uma linha em /etc/fstab ?

    
por Dan 07.08.2012 / 20:20

2 respostas

71

Você está absolutamente certo. A entrada fstab de acordo seria assim:

tmpfs /tmp tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1777,size=512M 0 0

Por favor, note:

Como tmpfs é preenchido, ele se comportará como qualquer disco rígido físico, causando um erro de "espaço insuficiente". Durante a reinicialização (e, portanto, o esvaziamento do cache) isso será corrigido, você poderá ter problemas quando uma única operação consumir mais espaço para começar do que o espaço em tmpfs . Nesse caso, seu computador começará a trocar de ram para disk, o que fará com que seu sistema pare de funcionar, já que você tem uma partição de swap, é claro.

Considerando isso, um tamanho de 512MB pode ser muito menor hoje em dia, já que muito mais memória RAM existe nas máquinas modernas e ficou muito mais barato. Como você já tem 16 GB de RAM, usar o valor padrão de metade de sua memória RAM para tmpfs deve ser mais do que suficiente para quase todos os cenários. Para usar o valor padrão, simplesmente deixe de fora a entrada size=512M no seu arquivo /etc/fstab .

Outra nota:

Você pode facilmente montar outras pastas do sistema no ramdisk, como

/var/cache

/var/games

/var/log/apt (use apenas defaults,noatime sem mode= ou nosuid )

Mas cuidado: as mesmas regras se aplicam como acima, ficar sem espaço pode causar grandes problemas. Por exemplo. imagine ficar sem espaço para que o / var / log / apt torne você incapaz de instalar qualquer programa! Além disso, carregar as pastas /var/log no ramdisk irá apagar todos os seus arquivos de registro na reinicialização, assim você não poderá depurar seu sistema se algo inesperado acontecer. Portanto, use essas configurações por sua conta e risco!

Nota editorial: Eu removi a opção /run in tmpfs mount, pois essa pasta e suas subpastas já estão montadas em tmpfs por padrão.

    
por FuzzyQ 08.08.2012 / 09:24
20

Em sistemas que usam systemd , você tem a opção de usar um arquivo de unidade systemd em vez de fstab para atingir a meta de usar tmpfs para montar tmp . No meu sistema Ubuntu 16.04, eu corri:

sudo cp /usr/share/systemd/tmp.mount /etc/systemd/system/tmp.mount
sudo systemctl enable tmp.mount
sudo systemctl start tmp.mount

O arquivo /usr/share/systemd/tmp.mount se parece com:

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
[Unit]
Description=Temporary Directory
Documentation=man:hier(7)
Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
ConditionPathIsSymbolicLink=!/tmp
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target umount.target
After=swap.target

[Mount]
What=tmpfs
Where=/tmp
Type=tmpfs
Options=mode=1777,strictatime

[Install]
WantedBy=local-fs.target

Usando a abordagem fstab do FuzzyQ, o systemd converte suas entradas fstab em unidades de montagem dinamicamente. Eu não acho que a abordagem seja melhor.

    
por Rick Ramstetter 13.08.2016 / 21:02