3.13. Points de montage associés et Ordre de montage du système de fichiers

Quand vous utilisez l'option bind de la commande mount, vous devrez vous assurer que les systèmes de fichiers sont montés dans l'ordre qui convient. Dans l'exemple suivant, le répertoire /var/log doit être installé avant d'exécuter le point de montage associé sur le répertoire /tmp :
# mount --bind /var/log /tmp
L'ordre des points de montage des systèmes de fichiers est déterminé comme suit :
  • En général, l'ordre de montage des systèmes de fichiers est déterminé par l'ordre dans lequel les systèmes de fichiers apparaissent dans le fichier fstab. Les seules exception sont les systèmes de fichiers qui sont montés avec un marqueur _netdev ou bien les systèmes de fichiers qui ont leur propre script init.
  • Un système de fichiers avec son propre script init est monté plus tard au cours du processus d'initialisation, après les systèmes de fichiers dansfstab.
  • Les systèmes de fichiers montés avec le marqueur _netdev sont montés quand le réseau a été activé dans le système.
Si vous avez besoin de créer un point de montage associé sur lequel monter un système de fichiers GFS2 pour votre configuration, vous pourrez ordonner le fichier fstab comme suit :
  1. Montez des systèmes de fichiers locaux requis pour le point de montage associé.
  2. Faire un montage associé du répertoire où le système de fichiers GFS2 sera monté.
  3. Création d'un système de fichiers GFS2.
Si votre configuration requiert que vous fassiez un montage associé de répertoire local ou de système de fichierssur un système de fichiers GFS2, énumérer les systèmes de fichiers dans le bonordre dans le fichier fstab ne montera pas les systèmes de fichierscorrectement, puisque le système de fichiers GFS2 ne sera pas monté avant que le scriptinit de GSF soit exécuté. Dans ce cas, vous devrez écrire unscript init pour exécuter le montage associé, pour que le montage associé ne prenne pas effet avant que le système de fichiers GFS2 ne soit monté.
Le script suivant est un exemple de script init personnalisé. Le script crée un montage associé de deux répertoires dans deux répertoires du système de fichiers GFS2. Dans cet exemple, il y a un point de montage GFS2 existant à /mnt/gfs2a, qui est monté quand le script init de GFS2 exécute, suite au démarrage du cluster.
Dans cet exemple de script, les valeurs de l'énoncé chkconfig indiquent ce qui suit :
  • 345 indique les niveaux d'exécution auxquels le script va démarrer
  • 29 est la priorité de départ, qui, dans ce cas, indique que le script va exécuter au départ à la suite du script init de GFS2, qui a une priorité de démarrage de 26
  • 73 correspond à la priorité 'stop', qui dans ce cas, indique que le script cessera en cours de fermeture juste avant le script GFS2, qui lui, a une priorité de 74.
Les valeurs de démarrage et d'arrêt indiquent que vous pouvez effectuer manuellement l'action indiquée manuellement en exécutant les commandes service start et service stop. Ainsi, si le script s'intitule fredwilma, alors vous pourrez exécuter la commande service fredwilma start.
Ce script doit être mis dans le répertoire /etc/init.d avec les mêmes permissions que les autres scripts de ce répertoire. Vous pourrez alors exécuter une commande chkconfig on pour relier le script aux niveaux d'exécution demandés. Ainsi, si le script s'intitule fredwilma, vous pourrez exécuter la commande chkconfig fredwilma on.

#!/bin/bash
#
# chkconfig: 345 29 73
# description: mount/unmount my custom bind mounts onto a gfs2 subdirectory
#
#
### BEGIN INIT INFO
# Provides: 
### END INIT INFO

. /etc/init.d/functions
case "$1" in
  start)
	# In this example, fred and wilma want their home directories
	# bind-mounted over the gfs2 directory /mnt/gfs2a, which has
	# been mounted as /mnt/gfs2a
	mkdir -p /mnt/gfs2a/home/fred &> /dev/null
	mkdir -p /mnt/gfs2a/home/wilma &> /dev/null
	/bin/mount --bind /mnt/gfs2a/home/fred /home/fred
	/bin/mount --bind /mnt/gfs2a/home/wilma /home/wilma
        ;;

  stop)
	/bin/umount /mnt/gfs2a/home/fred
	/bin/umount /mnt/gfs2a/home/wilma
        ;;

  status)
        ;;

  restart)
        $0 stop
        $0 start
        ;;

  reload)
        $0 start
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|reload|status}"
        exit 1
esac

exit 0