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?

93

Depois de ver o comentário do Anonymous na pergunta Como o diretório / tmp é limpo? , Achei que seria uma ótima ideia implementar no meu sistema, pois tenho 16 GB de RAM e nunca usei tudo.

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 0no / etc / fstab.

Minha pergunta é:

Posso definir um valor máximo para o uso da RAM /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 afirma:

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 deverá ser adicionado ao /etc/fstabarquivo de configuração.

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

Dan
fonte
esta é também uma boa idéia se você tem e SSD como você não vai 'consumir' com escritos não úteis ...
Postadelmaga
Ha ha exatamente a mesma pergunta me trouxe aqui: D
Teddy Markov

Respostas:

80

Você está absolutamente certo. A entrada fstab correspondente ficaria assim:

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

Observe:

Conforme tmpfsfor preenchido, ele se comportará como qualquer disco rígido físico, fornecendo um erro "espaço insuficiente". Enquanto a reinicialização (e, portanto, o esvaziamento do cache) corrigem isso, você pode ter problemas quando uma única operação consome mais espaço para começar do que há espaço tmpfs. Nesse caso, seu computador começará a trocar de ram para disco, o que fará com que o sistema pare, desde que você tenha uma partição de swap, é claro.

Considerando isso, um tamanho de 512 MB pode ser muito menor hoje em dia, uma vez que existe muito mais memória RAM em máquinas modernas e ficou muito mais barato. Como você já possui 16 GB de RAM, o uso do valor padrão de metade da RAM tmpfsdeve ser suficiente para quase todos os cenários. Para usar o valor padrão, simplesmente deixe de fora a size=512Mentrada no seu /etc/fstabarquivo.

Outra nota:

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

/var/cache

/var/games

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

Mas cuidado: as mesmas regras se aplicam como acima, ficar sem espaço pode causar grandes problemas. Por exemplo, imagine que ficar sem espaço para / var / log / apt tornará você incapaz de instalar qualquer programa! Além disso, o carregamento de /var/logpastas no ramdisk excluirá todos os seus arquivos de log após a 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 o /runna tmpfsopção de montagem uma vez que esta pasta e suas subpastas já estão montados no tmpfspor padrão.

FuzzyQ
fonte
11
Se não estiver errado, / var / tmp / é para manter os arquivos após a reinicialização. Essa é a principal diferença entre isso e / tmp /, portanto, você não deve mover / var / tmp para ram.
3
Se o Ubuntu ficar sem 4GB tmpfs, ele usará minha partição SWAP de 20GB?
loostro 24/06
3
Sim, vou precisar adicionar isso também. Assim que o tmpfs ultrapassar seus limites, ele se estenderá para trocar a partição (se houver).
FuzzyQ
5
Alocar metade da sua RAM para isso significa que metade da sua RAM é reservada para o RAMDISK, ou é apenas um limite para o que o RAMDISK pode consumir, e o que não estiver em uso é RAM livre que é atribuída a qualquer programa que precise de RAM ??
Matt
6
@matt É apenas um limite.
FuzzyQ
35

Em sistemas usando systemd, você tem a opção de usar um arquivo de unidade systemd em vez de fstab para atingir o objetivo de usar tmpfspara montar tmp. No meu sistema Ubuntu 16.04, executei:

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

O arquivo se /usr/share/systemd/tmp.mountparece 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 do fstab em unidades de montagem dinamicamente. Não acho que nenhuma das abordagens seja melhor.

Para definir o limite máximo para a RAM, conforme solicitado, seria necessário adicionar size=512Mà Optionslinha, separada por vírgula.

Rick Ramstetter
fonte
2
Você precisará systemctl enable tmp.mountdepois que o cp else systemctl falhará com a mensagem " Failed to start tmp.mount: Unit tmp.mount not found."
vimdude
4
@ Rick, é ainda melhor usar systemctl edit tmp.mountque seria neutro em termos de distribuição. Isso coloca suas alterações no override.conf para que você não altere o padrão tmp.mount e exclua o override.conf facilmente para voltar à configuração padrão.
Bulat M.
Idem o que Bulat disse sobre o uso do systemctl edit e também use, ln -se não cpna primeira etapa.
Michael Gratton 20/06