Voici une nouvelle documentation qui va vous permettre de comprendre et d'utiliser les ramdisks sous solaris.
Pourquoi une telle documentation me direz vous?
J'ai souvent besoin d'utiliser un grand nombre de devices pour des tests de gestion de volumes raid ou d'autres tests basés sur les disques durs. Il n'est pas très simple d'effectuer ces tests sans posséder une matrice de disques pouvant accueillir un grand nombre de disques . Ces ramdisks me permettent de simuler la présence de ces disques...
Bien entendu, cette simulation n'est pas le seul intérêt à l'utilisation des ramdisks. Ils permettent également d'avoir des systèmes de fichiers extrêmement rapides... Bien entendu ces ramdisks fonctionnant directement en ram, ils ne persistent pas à un reboot.
Création:
La commande ramdiskadm va nous permettre d'administrer les ramdisks.
L'option -a est utilisé pour créer les ramdisks. Pour ce faire, il faut spécifier le nom du ramdisk ainsi que sa taille. Pour son nom, il est possible d'utiliser les caractères alphanumériques (A-Z, a-z, 0-9), les sous-lignés et les tirets. Le nom du ramdisk ne doit pas commencer pas un tiret, ne doit pas être composé de plus de 32 caractères et doit être unique. La taille du ramdisk est spécifié en secteur de 512octets (b pour block), en kilo (k), en méga (m) ou en giga (g).
/dev/ramdisk/monramdisk
#cd /dev/ramdisk
# \ls -lL
total 0 brw------- 1 root sys 70, 1 Nov 21 12:06 monramdisk
Les ramdisks sont crées dans le répertoire /dev/ramdisk. Par défaut ce répertoire n'existe pas. Il est généré lors de la création du premier ramdisk.
Les ramdisks fonctionnant directement en ram, il y a une limitation de la taille d'espace disponible .Le driver ramdisk utilise la variable rd_prercent_physmem pour limiter l'utilisation de la ram par les ramdisks. La valeur par défaut est de 25% de la mémoire disponible. Il est possible de régler ce pourcentage en ajoutant la variable rd_percent_physmem dans le fichier /etc/system suivi du pourcentage souhaité.
Visualisation:
La commande ramdiskadm permet également de visualiser l'état des ramdisks. Cette commande s'utilise sans argument.
# ramdiskadm
Block Device Size Removable
/dev/ramdisk/monramdisk6291456 Yes
Suppression:
Pour supprimer un ramdisk on utilise l'option -d de la commande ramdiskadm suivi du nom du ramdisk.
# ramdiskadm
Block Device Size Removable
/dev/ramdisk/monramdisk6291456 Yes
# ramdiskadm -d monramdisk
# ramdiskadm
# ls dev/ram*
/dev/ramdiskctl
La première commande a effacé le ramdisk présent (monramdisk). Le lancement de la commande ramdiskadm sans argument nous informe que le ramdisk a bien été effacé et qu'il n'y a plus de ramdisk présent dans le système. De plus, un ls sous le répertoire /dev nous permet d'observer que la destruction du dernier ramdisk à provoquer la suppression du répertoire /dev/ramdisk.
Maintenant que nous savons gérés les ramdisks nous allons pouvoir les utiliser dans des cas concrets. Pour commencer on va crée un système de fichiers UFS à partir d'un ramdisk et monté celui-ci pour vérifier si tout fonctionne normalement.
# ramdiskadm -a disk1 6m
/dev/ramdisk/disk1
# newfs /dev/ramdisk/disk1
newfs: construct a new file system /dev/rramdisk/disk1: (y/n)? y
/dev/rramdisk/disk1: 12280 sectors in 20 cylinders of 1 tracks, 614 sectors
6.0MB in 2 cyl groups (16 c/g, 4.80MB/g, 2304 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
# mount /dev/ramdisk/disk1 /mnt
# cd /mnt
# df -h .
Filesystem size used avail capacity Mounted on
/dev/ramdisk/disk1 5.4M 1.0M 3.8M 21% /mnt
Bon tout fonctionne normalement, on a bien un FS (ramdisk) monté sur /mnt. On va effectuer quelques opération sur ce FS.
# touch essai
# ls -ail
total 20
2 drwxr-xr-x 3 root root 512 Nov 21 15:07 .
2 drwxr-xr-x 41 root root 1.0K Nov 20 09:55 ..
-rw-r--r-- 1 root root 0 Nov 21 15:07 essai
3 drwx------ 2 root root 8.0K Nov 21 15:06 lost+found
On crée un fichier essai dans notre FS et on vérifie son numéro d'inode: 4
# umount /mnt
# clri /dev/rramdisk/disk1 4
clearing 4
On démonte le FS /mnt et on supprime le fichier essai par son numéro d'inode grâce à la commande clri (clear inode)
# fsck -m /dev/rramdisk/disk1
** /dev/rramdisk/disk1
ufs fsck: sanity check: /dev/rramdisk/disk1 needs checking
# fsck /dev/rramdisk/disk1
** /dev/rramdisk/disk1
** Last Mounted on /mnt
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
UNALLOCATED I=4 OWNER=root MODE=0
SIZE=0 MTIME=Jan 1 01:00 1970
NAME=/essai
REMOVE? y
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
FREE BLK COUNT(S) WRONG IN SUPERBLK
SALVAGE? y
2 files, 9 used,5506 free (18 frags, 686 blocks, 0.3% fragmentation)
***** FILE SYSTEM AS MODIFIED *****
# fsck -m /dev/rramdisk/disk1
** /dev/rramdisk/disk1
ufs fsck: sanity check: /dev/rramdisk/disk1 okay
# mount /dev/ramdisk/disk1 /mnt
On vérifie le FS avec la commande fsck suivi de l'option -m. Apparemment il y a un problème sur ce FS (suite à la suppression de l'inode). On effectue un fsck complet et on corrige l'erreur. (On peut observer que fsck nous indique que le fichier essai est manquant) Une fois le problème corrigé, le fsck -m ne nous retourne plus d'erreur.
# cd /mnt
# ls
lost+found
En montant le FS, on voit que le fichier essai a disparu... Bon notre premier test est apparemment concluant. Le ramdisk fonctionne correctement.
Maintenant nous allons essayer avec un metadevice (volume)...
Remarque: Il existe un problème avec la base de données SVM (metadb) qui ne gére pas les ramdisks. Ce problème empêche la visualisation de l'etat des volumes avec la commande metastat.
# ramdiskadm
/dev/ramdisk/disk1 6291456 Yes
/dev/ramdisk/disk2 6291456 Yes
Nous avons deux ramdisks présents sur notre système.
Nous allons utiliser ces deux ramdisks disk1 et disk2 pour crée un stripe.
# metainit d0 1 2 /dev/ramdisk/disk1 /dev/ramdisk/disk2
d0: Concat/Stripe is setup
# newfs /dev/md/rdsk/d0
newfs: /dev/md/rdsk/d0 last mounted as /mnt
newfs: construct a new file system /dev/md/rdsk/d0: (y/n)? y
/dev/md/rdsk/d0: 22718 sectors in 37 cylinders of 1 tracks, 614 sectors
1.1MB in 3 cyl groups (16 c/g, 4.80MB/g, 2304 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 9856, 19680,
# mount /dev/md/dsk/d0 /mnt
# cd /mnt
# df -h .
Filesystem size used avail capacity Mounted on
/dev/md/dsk/d0 10M 1.0M 8.2M 12% /mnt
La première commande a crée un volume d0 à partir des deux ramdisks. On crée un FS sur ce volume puis on le monte...
Tout est ok....
Voilà. Je reste bien sûr à votre disposition pour vos commentaires...