use `/ run / shm` (anteriormente` / dev / shm`) como um diretório temporário

9

É uma boa prática criar um diretório /run/shm(anteriormente /dev/shm) e usá-lo como um diretório temporário para um aplicativo?

Antecedentes: estou escrevendo testes de caixa preta para um programa que faz muitas coisas com arquivos e diretórios. Para cada teste, crio muitos arquivos e diretórios e, em seguida, executo o programa, crio o conjunto esperado de arquivos e diretórios e, em seguida, executo o diff para comparar. Agora tenho cerca de 40 testes e eles já estão demorando mais de 2 segundos para serem executados. Na esperança de acelerar as coisas, eu quero executar os testes em um diretório em algum tipo de ramdisk.

Pesquisando sobre o disco ram, me deparei com uma pergunta com uma resposta afirmando que não há problema em criar um diretório /dev/shme usá-lo como um diretório temporário. Pesquisando um pouco mais, no entanto, me deparei com uma página wiki do debian, afirmando que é um erro usar /dev/shmdiretamente. Eu deveria usar as shm_*funções. Infelizmente, as shm_*funções parecem não estar disponíveis para uso em um script de shell.

Agora eu estou confuso. Está tudo bem ou não usar /run/shm(anteriormente /dev/shm) como um diretório temporário?

lesmana
fonte
Sim, muitos usuários também montam /tmpna memória compartilhada.
Eddy_Em 22/04
Eu imagino que /tmpé mais semântico. Se seus usuários tiverem RAM suficiente para usar /dev/shmarquivos temporários para acelerar as coisas, eles o montarão lá. Mas se eles não tiverem RAM suficiente, e montá-lo lá diminui a velocidade do computador, forçando todos os processos a usarem arquivos de troca, eles salvarão seu RAM para coisas mais importantes e usarão espaço em disco comum para o /tmpsistema de arquivos. Em outras palavras, /tmpé mais sintonizável.
Jack

Respostas:

10

Não há problema em usar algum diretório /rundesde que você tenha os direitos apropriados. Em algumas distribuições modernas, /tmpjá existe um sistema de arquivos virtual na memória ou um link simbólico para um diretório interno /run. Se esse for o seu caso (você pode verificar /etc/fstabou digitar mtab), você pode usar /tmpcomo seu diretório temporário.

Além disso, não se confunda com o artigo do Debian. shm_*As funções são usadas para criar segmentos de memória compartilhada para a comunicação entre processos. Com essas funções, você pode compartilhar um fragmento de memória entre dois ou mais processos para que eles se comuniquem ou colaborem usando os mesmos dados. Os processos têm o segmento de memória anexado em seu próprio espaço de endereço e podem ler e gravar nele como de costume. O kernel lida com a complexidade. Essas funções não estão disponíveis como funções de shell (e não seriam muito úteis em um contexto de shell). Para mais informações, dê uma olhada man 7 shm_overview. O objetivo do artigo é que nenhum programa deve gerenciar diretamente os pseudo-arquivos que representam segmentos compartilhados, mas usar as funções apropriadas para criar, anexar e excluir segmentos de memória compartilhada.

lgeorget
fonte
2
O local mais apropriado abaixo /runpode ser /run/user/${UID}/.
Paul Fenney
1
De fato, no meu sistema, o pulseaudio e o systemd instalam alguns arquivos como o arquivo pid. No entanto, / tmp ainda seria meu local preferido para arquivos temporários.
precisa saber é o seguinte
2
@PaulFenney: / run / user / $ UID também é conhecido como $ XDG_RUNTIME_DIR
user2394284