web-dev-qa-db-fra.com

Comment utiliser RAM storage pour le répertoire / tmp et comment définir une quantité maximale de RAM usage?

Après avoir vu le commentaire par Anonyme sur la question Comment le répertoire/tmp a-t-il été nettoyé? , j'ai trouvé que ce serait une bonne idée de mettre en œuvre sur mon système, car je dispose de 16 Go de RAM et je ne l’ai jamais utilisée en totalité.

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

Ma question est:

Puis-je définir une valeur maximale pour RAM Usage 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 fichier de configuration /etc/fstab.

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

90
Dan

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

S'il vous plaît noter:

Lorsque tmpfs sera rempli, il se comportera comme tout disque dur physique en générant 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 opération unique consomme plus d'espace au début qu'il n'y a d'espace sur 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 pour tmpfs devrait suffire à suffire dans presque tous les scénarios. Pour utiliser la valeur par défaut, laissez simplement l'entrée size=512M dans votre fichier /etc/fstab.

ne 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 (utilisez uniquement defaults,noatime sans mode= ou nosuid)

mais attention: Les mêmes règles s'appliquent que ci-dessus, le manque d'espace peut causer des problèmes majeurs. Par exemple. imaginer manquer d’espace pour/var/log/apt ne vous empêchera d’installer aucun programme! De plus, le chargement de dossiers /var/log dans le disque mémoire supprimera tous vos fichiers journaux au 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 éditoriale: J'ai supprimé l'option /run dans tmpfs mount, car ce dossier et ses sous-dossiers sont déjà montés dans tmpfs par défaut.

79
FuzzyQ

Sur les systèmes utilisant systemd, vous avez la possibilité d'utiliser un fichier unité systemd au lieu de fstab pour atteindre l'objectif d'utiliser tmpfs pour monter 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.mount se présente comme suit:

#  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.

32
Rick Ramstetter