Tmpfs : monter un filesystem en RAM sous Solaris
Contents
1 Introduction
TmpFS (Temporary File System) est le nom générique données à tout système de fichiers Unix temporaire. Tout fichier créé dans un un tel système de fichier disparaît lors de l'arrêt du système.
L'implémentation par défaut du tmpfs des noyaux Linux 2.6.x se base sur ramfs qui utilise le mécanisme de cache pour optimiser la gestion de la mémoire.
Il est également disponible sur Solaris 10.
Cependant, tmpfs propose en plus par sécurité une limite de taille mémoire allouable fixée au moment du montage et modifiable à la volée avec l'option "remount". Tmpfs permet par ailleurs au système d'utiliser le swap lorsque cela devient nécessaire, ce qui est une garantie supplémentaire.
Par opposition à un RAM Disque, il alloue dynamiquement la mémoire de manière à ne pas l'utiliser en excès, et offre de meilleurs performances grâce à son extrême simplicité.
2 Utilisation
2.1 Prérequis
Nous allons créer un point de montage sur /media/montmpfs.
Il faut d'abord créer le dossier :
mkdir |
mkdir -p /media/montmpfs |
Puis si il le faut changer les droits sur ce dossier, pour que tout le monde puisse lire/ecrire/executer
chmod |
chmod 777 /media/montmpfs |
2.2 Montage
Une fois les prérequis effectué, nous allons pouvoir monter la partition :
mount |
mount -F tmpfs -o size=2048m swap /media/montmpfs |
- -o size=2048m : spécifier la taille que l'on souhaite. Si aucune n'est définit, ce sera la taille de la ram + swap.
- /media/montmpfs : point de montage pour le tmpfs
Pour avoir ce montage de façon persistante, il va falloir le mettre dans le vfstab :
/etc/vfstab |
... swap - /media/montmpfs tmpfs - yes size=2048m ... |
2.3 Agrandissement de la partition
Vous n'avez pas prévu assez d'espace pour votre partition ? On peut l'agrandir, pas simplement, mais c'est faisable.
ATTENTION : Faire cette opération en production peut être très risquée
2.3.1 Récupération des informations
On va déjà vérifier l'espace disponible :
df |
> df -h /media/montmpfs Filesystem size used avail capacity Mounted on swap 2,0G 272K 2,0G 1% /media/montmpfs |
Récupérons l'adresse mémoire utilisée pour notre tmpfs :
echo |
> echo "::fsinfo" | mdb -k | egrep "VFSP|/media/montmpfs" VFSP FS MOUNT ffffffffbd1e10c0 tmpfs /media/montmpfs |
Voici l'adresse d'allocation "ffffffffbd1e10c0".
Maintenant, récupérons l'adresse de la variable tm_anonmax afin d'en changer sa valeur ensuite :
echo |
> echo "ffffffffbd1e10c0::print vfs_t vfs_data | ::print -ta struct tmount tm_anonmax" | mdb -kffffffffbfb42068 ulong_t tm_anonmax = 0x80000 |
Ici tm_anonmax (nombre de pages) est égale à 0x80000 (512kb) à l'adresse mémoire ffffffffbfb42068.
2.3.2 Appliquer la nouvelle valeur
Nous allons maintenant lui changer sa valeur. Passons par exemple à 3G, nous allons avoir besoin de récupérer d'abord la taille des blocks allouées par défaut pour la swap :
pagesize |
> pagesize
4096 |
J'ai donc des blocks de 4kb.
Si je veux passer à 3Go, il va falloir calculer la valeur en hexadécimal :
Taille désirée => taille désirée en kb / taille des blocs en kb = taille en Kb = taille en hexadécimal 3G => 3145728Kb / 4kb = 786432Kb = 0xC0000
On va donc utiliser ces valeurs et les appliquer sur l'adresse mémoire actuelle afin de l'agrandir :
echo |
> echo "ffffffffbfb42068/Z 0xC0000" | mdb -kw0x3000f488d00: 0x80000 = 0xC0000 |
Vérifions maintenant que nos changements ont bien été appliqués :
echo |
> echo "ffffffffbfb42068/J" | mdb -k0x3000f488d00: 0xC0000 |
ou
echo |
> echo "ffffffffbfb42068::print vfs_t vfs_data | ::print struct tmount tm_anonmax" | mdb -ktm_anonmax = 0xC0000 |
Et vérifier le résultat :
df |
> df -h /media/montmpfs
Filesystem size used avail capacity Mounted on
swap 3,0G 272K 3,0G 1% /media/montmpfs |
3 Ressources
http://docs.oracle.com/cd/E19963-01/html/821-1459/fscreate-99040.html
http://ilapstech.blogspot.com/2009/11/grow-tmp-filesystem-tmpfs-on-line-under.html
Solaris Tmpfs documentation