Comment puis-je utiliser le stockage RAM pour le répertoire / tmp et comment définir une quantité maximale de mémoire RAM?

80

Après avoir vu le commentaire par Anonyme sur la question Comment le répertoire / tmp est-il nettoyé? , j'ai trouvé que ce serait une bonne idée d'implémenter sur mon système, puisque j'ai 16 Go de RAM et que je ne l'ai jamais utilisé.

  

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 l'utilisation de la mémoire vive pour /tmp ? Et dans ce cas, que se passerait-il si le montant maximum était dépassé, serait-il écrit sur le disque dur?

J'ai lu une solution qui dit:

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

Mais à ma connaissance, ce ne sera pas une solution permanente. Si j'en ai besoin pour qu'il 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 ?

    
posée Dan 07.08.2012 - 20:20
la source

2 réponses

73

Vous avez absolument raison. L'entrée correspondant à fstab devrait ressembler à ceci:

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

Remarque:

Comme tmpfs est rempli, il se comportera comme n'importe quel disque dur physique en donnant une erreur "espace insuffisant". Bien que le redémarrage (et donc le vidage du cache) résoudra ce problème, vous pouvez rencontrer des problèmes lorsqu'une seule opération consomme plus d'espace qu'il n'y a de place sur tmpfs . Dans ce cas, votre ordinateur commencera à basculer de RAM en disque, ce qui entraînera l'arrêt de 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 importante de nos jours, car il y a beaucoup plus de RAM 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 pour presque tous les scénarios. Pour utiliser la valeur par défaut, omettez simplement l’entrée size=512M dans votre fichier /etc/fstab .

Autre remarque:

Vous pouvez aussi bien monter d'autres dossiers système dans le disque virtuel, tels que

/var/cache

/var/games

/var/log/apt (utilisez uniquement defaults,noatime sans mode= ou nosuid )

Méfiez-vous: les mêmes règles que ci-dessus s'appliquent, manquer d'espace peut causer des problèmes majeurs. Par exemple. Imaginez que manquer d'espace pour / var / log / apt vous rendrait impossible d'installer des programmes! De plus, le chargement de dossiers /var/log dans ramdisk 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 in tmpfs mount car ce dossier et ses sous-dossiers sont déjà montés dans tmpfs par défaut.

    
réponse donnée FuzzyQ 08.08.2012 - 09:24
la source
23

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

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 ressemble à:

#  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 traduit dynamiquement vos entrées fstab en unités de montage. Je ne pense pas que les deux approches soient meilleures.

    
réponse donnée Rick Ramstetter 13.08.2016 - 21:02
la source

Lire d'autres questions sur les étiquettes