tmpfs (Français)
tmpfs est un système de fichiers temporaire qui réside en mémoire et/ou sur une ou plusieurs partitions d'échange. Monter des répertoires en tant que tmpfs peut être un moyen efficace d'accélérer les accès à leurs fichiers ou de s'assurer que leur contenu est automatiquement effacé au redémarrage.
Utilisation
Les répertoires où tmpfs(5) est couramment utilisé sont /tmp, /var/lock et /var/run. Ne l'utilisez pas sur /var/tmp, car ce répertoire est destiné aux fichiers temporaires qui sont préservés lors des redémarrages.
Arch utilise un répertoire tmpfs /run
, avec /var/run
et /var/lock
existant simplement comme liens symboliques pour la compatibilité. Il est également utilisé pour /tmp
par la configuration par défaut de systemd et ne nécessite pas d'entrée dans fstab sauf si une configuration spécifique est nécessaire.
glibc 2.2 et supérieur s'attend à ce que tmpfs soit monté sur /dev/shm
pour
POSIX shared memory. Le montage de tmpfs sur /dev/shm
est géré automatiquement par systemd et une configuration manuelle dans fstab n'est pas nécessaire.
En général, les tâches et les programmes qui exécutent des opérations de lecture/écriture fréquentes peuvent bénéficier de l'utilisation d'un répertoire tmpfs. Certaines applications peuvent même bénéficier d'un gain substantiel en déchargeant une partie (ou la totalité) de leurs données sur la mémoire partagée. Par exemple, la relocalisation du profil de Firefox en RAM montre une amélioration significative des performances.
Exemples
Par défaut, la taille maximale d'une partition tmpfs est fixée à la moitié de la RAM disponible, mais il est possible de modifier cette valeur.
Pour définir explicitement une taille maximale, dans cet exemple pour remplacer le montage /tmp
par défaut, utilisez l'option de montage size
:
/etc/fstab
tmpfs /tmp tmpfs rw,nodev,nosuid,size=2G 0 0
Pour spécifier un montage plus sécurisé, spécifiez l'option de montage suivante :
/etc/fstab
tmpfs /www/cache tmpfs rw,size=1G,nr_inodes=5k,noexec,nodev,nosuid,uid=user,gid=group,mode=1700 0 0
Consultez la page de manuel tmpfs(5) et Security#File systems pour plus d'informations.
Redémarrez pour que les changements prennent effet. Notez que même s'il peut être tentant d'exécuter simplement mount -a
pour que les changements prennent effet immédiatement, cela rendra inaccessibles tous les fichiers résidant actuellement dans ces répertoires (ceci est particulièrement problématique pour l'exécution de programmes avec des fichiers de verrouillage, par exemple). Cependant, si tous ces répertoires sont vides, il devrait être sûr d'exécuter mount -a
au lieu de redémarrer (ou de les monter individuellement).
Après avoir appliqué les changements, vérifiez qu'ils ont pris effet en regardant dans /proc/mounts
et en utilisant findmnt
:
$ findmnt /tmp
SOURCE CIBLE OPTIONS FSTYPE /tmp tmpfs tmpfs rw,nosuid,nodev,relatime
Les tmpfs peuvent également être temporairement redimensionnés sans avoir besoin de redémarrer, par exemple lorsqu'un gros travail de compilation doit être exécuté prochainement. Dans ce cas, exécutez :
# mount -o remount,size=4G /tmp
Désactiver le montage automatique
Sous systemd, /tmp
est automatiquement monté en tant que tmpfs, si ce n'est pas déjà un point de montage dédié (soit tmpfs, soit sur le disque) dans /etc/fstab
. Pour désactiver le montage automatique, masquez l'unité tmp.mount
.
Les fichiers ne seront plus stockés dans un tmpfs, mais sur le périphérique de type bloc à la place. Le contenu de /tmp
sera maintenant préservé entre les redémarrages, ce qui peut ne pas être le comportement souhaité. Pour retrouver le comportement précédent et nettoyer le répertoire /tmp
automatiquement au redémarrage, pensez à utiliser tmpfiles.d(5) :
/etc/tmpfiles.d/tmp.conf
# consultez tmpfiles.d(5) # toujours activer le nettoyage du répertoire /tmp D ! /tmp 1777 root root 0 # supprimer les fichiers de /var/tmp vieux de plus de 10 jours D /var/tmp 1777 root root 10d # les points de montage des espaces de noms (PrivateTmp=yes) sont exclus de la suppression x /tmp/systemd-private-* x /var/tmp/systemd-private-* X /tmp/systemd-private-*/tmp X /var/tmp/systemd-private-*/tmp
Dépannage
L'ouverture de liens symboliques dans tmpfs en tant que root échoue
Si /tmp
utilise tmpfs, changez le répertoire actuel en /tmp
, puis créez un fichier et un lien symbolique vers ce fichier dans le même répertoire /tmp
. Il faut s'attendre à des erreurs de permission refusée lors de la tentative de lecture du lien symbolique car /tmp
a le bit collant activé.
Ce comportement peut être contrôlé via /proc/sys/fs/protected_symlinks
ou simplement via sysctl : sysctl -w fs.protected_symlinks=0
. Consultez Sysctl#Configuration pour rendre cela permanent.