Come posso utilizzare la memoria RAM per la directory / tmp e come impostare una quantità massima di utilizzo della RAM per esso?

80

Dopo aver visto il commento di Anonimo sulla domanda Come è stata ripulita la directory / tmp? , ho scoperto che sarebbe stata una buona idea implementarla sul mio sistema, dato che ho 16 GB di RAM e non l'ho mai usata interamente.

  

I miei file temporanei non vengono mai scritti sul disco. Vengono scritti su un disco RAM. Ho inserito tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 in / etc / fstab.

La mia domanda è:

Posso impostare un valore massimo per l'utilizzo della RAM per /tmp ? E in tal caso, cosa succederebbe se l'importo massimo fosse superato, sarebbe scritto nel disco rigido?

Ho letto una soluzione che afferma:

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

Ma a mio avviso, questa non sarà una soluzione permanente. Se ho bisogno che sia permanente, deve essere aggiunto al file di configurazione /etc/fstab .

Se questa è la soluzione corretta, come posso trasformare il comando mount in una riga in /etc/fstab ?

    
posta Dan 07.08.2012 - 20:20

2 risposte

73

Hai assolutamente ragione. La voce relativa a fstab sarebbe simile a questa:

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

Nota:

Quando tmpfs viene riempito, si comporterà come qualsiasi disco rigido fisico dando un errore di "spazio insufficiente". Anche se il riavvio (e quindi lo svuotamento della cache) lo risolve, è possibile che si verifichino dei problemi quando una singola operazione consuma più spazio di quanto non ci sia spazio su tmpfs . In questo caso, il tuo computer inizierà a passare da ram a disco, il che renderà il tuo sistema rallentato, dato che hai già una partizione di swap, naturalmente.

Considerando questo, una dimensione di 512 MB potrebbe essere di gran lunga meno oggi, dal momento che molta più RAM è presente nelle macchine moderne ed è diventata molto più economica. Dato che hai già 16 GB di RAM, l'utilizzo del valore predefinito di metà della RAM per tmpfs dovrebbe essere più che sufficiente per quasi tutti gli scenari. Per utilizzare il valore predefinito, lascia semplicemente la voce size=512M nel tuo file /etc/fstab .

Un'altra nota:

Puoi anche montare facilmente altre cartelle di sistema in ramdisk, come

/var/cache

/var/games

/var/log/apt (usa solo defaults,noatime senza mode= o nosuid )

Ma attenzione: si applicano le stesse regole di cui sopra, l'esaurimento dello spazio potrebbe causare problemi maggiori. Per esempio. immagina che l'esaurimento dello spazio per / var / log / apt ti renderà incapace di installare qualsiasi programma! Inoltre, il caricamento delle cartelle /var/log in ramdisk cancellerà tutti i file di log al riavvio, quindi non sarà possibile eseguire il debug del sistema se accade qualcosa di inaspettato. Quindi usa queste impostazioni a tuo rischio!

Nota editoriale: Ho rimosso l'opzione /run in tmpfs mount poiché questa cartella e le relative sottocartelle sono già montate in tmpfs per impostazione predefinita.

    
risposta data FuzzyQ 08.08.2012 - 09:24
23

Sui sistemi che usano systemd , hai la possibilità di usare un file di unità systemd invece di fstab per raggiungere l'obiettivo di usare tmpfs per montare tmp . Sul mio sistema Ubuntu 16.04, ho eseguito:

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

Il file /usr/share/systemd/tmp.mount assomiglia a:

#  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 l'approccio fstab di FuzzyQ, systemd traduce le voci fstab in unità di montaggio dinamicamente. Non credo che entrambi gli approcci siano migliori.

    
risposta data Rick Ramstetter 13.08.2016 - 21:02

Leggi altre domande sui tag