Créer un disque virtuel sous FreeBSD

Créer un disque en RAM sous FreeBSD

FreeBSD possède en standard tout ce qu'il faut pour créer un disque virtuel. Un disque virtuel, en RAM, est beaucoup plus rapide qu'un disque physique et dans certains cas, pour disposer d'une amélioration des performances, il peut être utile de créer un disque virtuel.

Le montage

Pour monter un disque virtuel, il suffit d'utiliser la commande :

mdmfs -s 256M md10 /mnt/ramdisk

Dans cet exemple, on créé un disque virtuel de 256M sur le périphérique md10, monté sur le répertoire /mnt/ramdisk (s'il n'existe pas, il faut le créer).

Cependant, il faut ajouter quelques contrôles, surtout si le disque est destiné à un montage automatique. Il faut par exemple vérifier que la quantité de RAM disponible soit suffisante. Pour cela, il suffit de s'inspirer de cette astuce, en ne récupérerant que la partie mémoire disponible :

FileTemp="/tmp/sysctl.txt"

sysctl -a > ${FileTemp}
page_size=`cat ${FileTemp} | grep hw.pagesize | awk -F":" '{ print $2 }'`
mem_inactive=`cat ${FileTemp} | grep vm.stats.vm.v_inactive_count | awk -F":" '{ print $2 }'`
mem_cache=`cat ${FileTemp} | grep vm.stats.vm.v_cache_count | awk -F":" '{ print $2 }'`
mem_free=`cat ${FileTemp} | grep vm.stats.vm.v_cache_count | awk -F":" '{ print $2 }'`

mem_avail=$(($mem_inactive*$page_size+$mem_cache*$page_size+$mem_free*$page_size))

La variable mem_avail contient la quantité de mémoire vive non utilisée. Il faut donc que la quantité demandée pour le disque virtuelle soit inférieure à cette valeur.

if [ ${mem_dem} -lt ${mem_avail} ]
then
[...]
else
echo "La quantité de mémoire est insuffisante pour créer un disque virtuel de ${2}M" >&2
exit 1
fi

Il faut aussi vérifier que le disque n'existe pas déjà (ici md10).

if [ -e /dev/md10 ]
then
echo "Le disque virtuel existe déjà." >&2
exit 1
fi


if [ ${mem_dem} -lt ${mem_avail} ]
then
#Monte le disque virtuel en RAM
mdmfs -s ${2}M md10 /mnt/ramdisk
echo "Le disque virtuel de ${2}MB est créé sur/dev/md10 et monté sur /mnt/ramdisk"
exit 0
else
echo "La quantité de mémoire est insuffisante pour créer un disque virtuel de ${2}M" >&2
exit 1
fi
;;

stop)
if [ -e /dev/md10 ]
then
umount /mnt/ramdisk
mdconfig -d -u 10
echo "Le disque virtuel est démonté de /mnt/ramdisk et supprimé"
fi

;;

*)
echo "Usage: `basename $0` {start|stop} {AmountOfRAM} " >&2
exit 64
;;

esac

Pour utiliser ce script, il suffit de :

  • Monter le disque avec la quantité désirée (si cette quantité est disponible) :

    ramdisk.sh start 250

    Pour demander le montage d'un disque virtuel de (par exemple) 250 MB

  • Et pour démonter le disque :

    ramdisk.sh stop

Remarque

Ce script est limité à un seul disque virtuel, utilisant /dev/md10. Nous pourrions modifier le script de façon à ce qu'il gère automatiquement les périphériques virtuels et pouvoir créer plusieurs disques...

Bien entendu, ce script peut être employé pour monter automatiquement un disque au démarrage du système, en plaçant un script dans le répertoire rc.d