Come posso usare l'archiviazione RAM per la directory / tmp e come impostare una quantità massima di utilizzo della RAM per essa?


92

Dopo aver visto il commento di Anonimo sulla domanda Come si pulisce la directory / tmp? , Ho scoperto che sarebbe un'ottima idea implementare sul mio sistema, poiché ho 16 GB di RAM e non l'ho mai usato tutto.

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

La mia domanda è:

Posso impostare un valore massimo per l'utilizzo della RAM per /tmp? E in tal caso, cosa accadrebbe se si superasse la quantità massima, scriverebbe sul 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 /etc/fstabfile di configurazione.

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


questa è anche una buona idea se hai e SSD perché non lo "consumerai" con scritti non utili ...
Postadelmaga

Ah ah esattamente la stessa domanda mi ha portato qui: D
Teddy Markov

Risposte:


80

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

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

Notare che:

Man mano che tmpfsviene riempito, si comporterà come qualsiasi disco rigido fisico dando un errore "spazio insufficiente". Mentre il riavvio (e quindi lo svuotamento della cache) risolverà questo problema, potresti incorrere in problemi quando una singola operazione consuma più spazio per iniziare rispetto a quando c'è spazio tmpfs. In questo caso il tuo computer inizierà a passare da ram a disco, il che farà arrestare il tuo sistema, dato che ovviamente hai una partizione di swap.

Considerando questo, una dimensione di 512 MB potrebbe essere molto meno al giorno d'oggi, poiché esiste molta più ram 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 tmpfsdovrebbe essere più che sufficiente per quasi tutti gli scenari. Per utilizzare il valore predefinito, è sufficiente escludere la size=512Mvoce nel /etc/fstabfile.

Un'altra nota:

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

/var/cache

/var/games

/var/log/apt(usare solo defaults,noatimesenza mode=o nosuid)

Ma attenzione: si applicano le stesse regole di cui sopra, rimanere senza spazio potrebbe causare gravi problemi. Ad esempio, immaginare di rimanere senza spazio per / var / log / apt non renderà possibile installare alcun programma! Inoltre, il caricamento di /var/logcartelle in ramdisk eliminerà tutti i file di registro al riavvio, quindi non sarà possibile eseguire il debug del sistema in caso di eventi imprevisti. Quindi usa queste impostazioni a tuo rischio e pericolo!

Nota editoriale: ho rimosso il /runin tmpfsopzione di montaggio in quanto questa cartella e le relative sottocartelle sono già montate in tmpfsdi default.


11
Se non sbaglio, / var / tmp / serve per conservare i file dopo il riavvio. Questa è la differenza principale tra questo e / tmp /, quindi non dovresti spostare / var / tmp su ram.

3
Se Ubuntu esaurisce i tmpfs da 4 GB, utilizzerà la mia partizione SWAP da 20 GB?
loostro,

3
Sì, dovrò aggiungere anche questo. Non appena tmpfs supera i suoi limiti, si estenderà per scambiare la partizione (dato che ce n'è uno).
FuzzyQ,

5
Allocare metà della RAM per questo significa che metà della RAM è riservata al RAMDISK o è solo un limite a ciò che può consumare il RAMDISK e tutto ciò che non è in uso è la RAM libera che viene assegnata a qualunque programma abbia bisogno di RAM ??
matt

6
@matt È solo un berretto.
FuzzyQ,

35

Sui sistemi che usano systemd, hai la possibilità di usare un file unit systemd invece di fstab per raggiungere l'obiettivo di usare tmpfsmount 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.mountappare come:

#  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 dinamicamente le voci fstab in unità di mount. Non penso che nessuno dei due approcci sia migliore.

Per impostare il limite massimo per la RAM come richiesto, è necessario aggiungere size=512Malla Optionsriga, separati da una virgola.


2
Avrai bisogno systemctl enable tmp.mountdopo che cp altrimenti systemctl fallirà con il messaggio " Failed to start tmp.mount: Unit tmp.mount not found."
vimdude

4
@Rick, è ancora meglio usare systemctl edit tmp.mountche sarebbe distro-neutro. Ciò inserisce le modifiche in override.conf in modo da non modificare tmp.mount predefinito e poter cancellare facilmente override.conf per tornare alla configurazione predefinita.
Bulat M.

Idem che cosa ha detto Bulat sull'uso di systemctl edit, e anche usare ln -spiuttosto che cpnel primo passo.
Michael Gratton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.