#!/bin/bash
# ramdisk.sh

#  Un disque ram ("ramdisk") est un segment de mémoire RAM système agissant
#+ comme un système de fichiers.
#  Son avantage est son accès très rapide (temps de lecture/écriture).
#  Inconvénients : volatile, perte de données au redémarrage ou à l'arrêt,
#                  moins de RAM disponible pour le système.
#
#  En quoi un disque ram est intéressant ?
#  Conserver un ensemble de données large, comme une table ou un dictionnaire,
#+ sur un disque ram, accélère les recherches de données car l'accès mémoire est
#+ bien plus rapide que l'accès disque.


E_UTILISATEUR_NON_ROOT=70      # Doit être root.
NOM_UTILISATEUR_ROOT=root

POINT_MONTAGE=/mnt/ramdisk
TAILLE=2000                    # 2000 blocs (modifiez comme vous l'entendez)
TAILLE_BLOC=1024               # 1K (1024 octets) en taille de bloc
PERIPH=/dev/ram0               # Premier périphérique ram

nom_utilisateur=`id -nu`
if [ "$nom_utilisateur" != "$NOM_UTILISATEUR_ROOT" ]
then
  echo "Vous devez être root pour exécuter \"`basename $0`\"."
  exit $E_UTILISATEUR_NON_ROOT
fi

if [ ! -d "$POINT_MONTAGE" ]   #  Teste si le point de montage est déjà créé,
then                           #+ pour qu'il n'y ait pas d'erreur après
  mkdir $POINT_MONTAGE         #+ plusieurs exécutions de ce script
fi

##############################################################################
dd if=/dev/zero of=$PERIPH count=$TAILLE bs=$TAILLE_BLOC  # Vide le périphérique
                                                          #+ ram
mke2fs $PERIPH                 # Crée un système de fichiers ext2 dessus.
mount $PERIPH $POINT_MONTAGE   # Monte le périphérique.
chmod 777 $POINT_MONTAGE       #  Pour que les utilisateurs standards puissent y
                               #+ accéder.
                               # Néanmoins, seul root pourra le démonter.
##############################################################################
#  Nécessite de tester si les commandes ci-dessus ont réussi. Pourrait poser
#+ problème sinon.
#  Exercice : modifiez ce script pour le rendre plus sûr.

echo "\"$POINT_MONTAGE\" est maintenant disponible"
# Le disque ram est maintenant accessible pour stocker des fichiers, y compris
# par un utilisateur standard.

#  Attention, le disque ram est volatile et son contenu disparaîtra au prochain
#+ redémarrage ou au prochain arrêt.
#  Copiez tout ce que vous voulez sauvegarder dans un répertoire standard.

# Après redémarrage, lancez de nouveau ce script pour initialiser le disque ram.
# Remonter /mnt/ramdisk sans les autres étapes ne fonctionnera pas.

#  Correctement modifié, ce script peut être appelé dans /etc/rc.d/rc.local,
#+ pour initialiser le ramdisk automatiquement au lancement.
#  Cela pourrait être approprié, par exemple, pour un serveur de bases de données.

exit 0
