Tmpfs : monter un filesystem en RAM sous Solaris

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

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 :

Command 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

Command chmod
chmod 777 /media/montmpfs

2.2 Montage

Une fois les prérequis effectué, nous allons pouvoir monter la partition :

Command 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 :

Configuration File /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 :

Command 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 :

Command 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 :

Command 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 :

Command 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 :

Command echo
> echo "ffffffffbfb42068/Z 0xC0000" | mdb -kw0x3000f488d00:                  0x80000                 =       0xC0000

Vérifions maintenant que nos changements ont bien été appliqués :

Command echo
> echo "ffffffffbfb42068/J" | mdb -k0x3000f488d00:             0xC0000

ou

Command echo
> echo "ffffffffbfb42068::print vfs_t vfs_data | ::print struct tmount tm_anonmax" | mdb -ktm_anonmax = 0xC0000

Et vérifier le résultat :

Command 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