Comment utiliser le stockage RAM pour le répertoire / tmp et comment définir une quantité maximale d'utilisation de la RAM pour celui-ci?

93

Après avoir vu le commentaire de Anonymous sur la question Comment le répertoire / tmp est-il nettoyé? , J’ai trouvé que ce serait une bonne idée de l’implémenter sur mon système, car j’ai 16 Go de RAM et je n’ai jamais utilisé tout cela.

Mes fichiers temporaires ne sont jamais écrits sur le disque. Ils sont écrits sur un disque RAM. J'ai mis tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0dans / etc / fstab.

Ma question est:

Puis-je définir une valeur maximale pour l'utilisation de la RAM pour /tmp? Et dans ce cas, que se passerait-il si le montant maximum était dépassé, serait-il écrit dans le lecteur de disque dur?

J'ai lu une solution qui dit:

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

Mais à mon sens, ce ne sera pas une solution permanente. Si j'ai besoin que ce soit permanent, il doit être ajouté au /etc/fstabfichier de configuration.

Si c'est la bonne solution, comment puis-je transformer cette commande de montage en une ligne /etc/fstab?

Dan
la source
c'est aussi une bonne idée si vous possédez un disque SSD, car vous ne le "consommerez" pas avec des écrits
inutiles
Ha ha exactement la même question m'a amené ici: D
Teddy Markov

Réponses:

80

Tu as tout à fait raison. L'entrée correspondante dans fstab ressemblerait à ceci:

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

Notez s'il vous plaît:

Une fois tmpfsrempli, il se comportera comme tout disque dur physique en donnant une erreur «pas assez d’espace». Lors du redémarrage (et donc du vidage du cache), le problème peut être résolu lorsqu'une seule opération consomme plus d'espace au début que d'espace disponible tmpfs. Dans ce cas, votre ordinateur commencera à permuter de la mémoire vive (RAM) vers le disque, ce qui ralentira considérablement votre système, étant donné que vous avez une partition de swap pour commencer, bien sûr.

Compte tenu de cela, une taille de 512 Mo pourrait être beaucoup moins, de nos jours, car il existe beaucoup plus de bélier dans les machines modernes et il est devenu beaucoup moins cher. Comme vous avez déjà 16 Go de RAM, utiliser la valeur par défaut de la moitié de votre RAM tmpfsdevrait largement suffire dans presque tous les scénarios. Pour utiliser la valeur par défaut, laissez simplement de côté l' size=512Mentrée dans votre /etc/fstabfichier.

Une autre note:

Vous pouvez aussi facilement monter d’autres dossiers système sur un disque mémoire, tels que

/var/cache

/var/games

/var/log/apt(utiliser seulement defaults,noatimesans mode=ou nosuid)

Mais attention: les mêmes règles que ci-dessus s'appliquent, le manque d'espace peut causer des problèmes majeurs. Par exemple, imaginez que manquer d’espace pour / var / log / apt ne vous empêchera d’installer aucun programme! De plus, le chargement de /var/logdossiers dans le disque mémoire supprimera tous vos fichiers journaux lors du redémarrage, vous ne pourrez donc pas déboguer votre système si quelque chose d'inattendu se produit. Utilisez donc ces paramètres à vos risques et périls!

Note de la rédaction: J'ai supprimé l' option /runin tmpfsmount car ce dossier et ses sous-dossiers sont déjà montés tmpfspar défaut.

FuzzyQ
la source
11
Si je ne me trompe pas, / var / tmp / sert à conserver les fichiers après le redémarrage. C'est la principale différence entre ceci et / tmp /, vous ne devez donc pas déplacer / var / tmp vers RAM.
3
Si Ubuntu manque de fichiers tmpfs de 4 Go, utilisera-t-il ma partition SWAP de 20 Go?
Loostro
3
Oui, je devrai ajouter ceci aussi. Dès que tmpfs dépasse ses limites, il va s'étendre à la partition de swap (donnez-en une).
FuzzyQ
5
Allouer la moitié de votre RAM à cela signifie-t-il que la moitié de votre RAM est réservée au RAMDISK, ou est-ce seulement une limite à ce que le RAMDISK peut consommer, et ce qui n'est pas utilisé est de la RAM libre qui est assignée à tout programme ayant besoin de RAM?
Matt
6
@ matt C'est seulement une casquette.
FuzzyQ
35

Sur les systèmes utilisant systemd, vous avez la possibilité d’utiliser un fichier unité systemd au lieu de fstab pour atteindre l’objectif de tmpfsmontage tmp. Sur mon système Ubuntu 16.04, j'ai exécuté:

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

Le fichier /usr/share/systemd/tmp.mountressemble à:

#  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

En utilisant l'approche fstab de FuzzyQ, systemd convertit vos entrées fstab en unités de montage de manière dynamique. Je ne pense pas que l'une ou l'autre approche soit meilleure.

Afin de définir la limite maximale de mémoire vive demandée, il faudrait ajouter des éléments size=512Mà la Optionsligne, séparés par une virgule.

Rick Ramstetter
la source
2
Vous aurez besoin systemctl enable tmp.mountaprès cp sinon systemctl échouera avec le message " Failed to start tmp.mount: Unit tmp.mount not found."
vimdude
4
@ Rick, c'est encore mieux d'utiliser ce systemctl edit tmp.mountqui serait distro-neutre. Cela place vos modifications dans override.conf afin que vous ne modifiiez pas tmp.mount par défaut et que vous puissiez supprimer override.conf facilement pour revenir à la configuration par défaut.
Bulat M.
Idem ce que Bulat a dit à propos de l’utilisation de systemctl edit, et aussi utiliser ln -splutôt que cpdans la première étape.
Michael Gratton