Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.13. Orden de montaje de enlace y montaje de sistema de archivos

Cuando utilice la opción bind del comando mount, usted debe asegurarse de que los sistemas de archivos se monten en el orden correcto. En el siguiente ejemplo, el directorio /var/log debe estar montado antes de ejecutar el montaje enlazado en el directorio /tmp:
# mount --bind /var/log /tmp
El orden del montaje del sistema de archivos se determina así:
  • En general, el orden del montaje del sistema de archivos está determinado por el orden en el que aparecen en el archivo fstab. Las excepciones a este orden son sistemas de archivos montados con el indicador _netdev o sistemas de archivos que tienen sus propios scripts init.
  • Un sistema de archivos con su propio script init se monta más adelante en el proceso de inicialización, después del sistema de archivos en el archivo fstab.
  • Los sistemas de archivos montados con el indiciador _netdev se montan cuando la red ha sido activada en el sistema.
Si su configuración requiere que usted cree un montaje enlazado para montar el sistema de archivos GFS2, puede ordenar su archivo fstab así:
  1. Monte los sistemas de archivos locales que se requieran para el montaje de enlace.
  2. Vincule el montaje del directorio en el cual monta el sistema de archivos GFS2.
  3. Monte el sistema de archivos GFS2.
Cuando su configuración requiere que usted monte en enlace un directorio local o sistema de archivos en un sistema de archivos GFS2, si lista los sistemas de archivos en el orden correcto en el archivo fstab no montará el sistema de archivos correctamente, puesto que GFS2 solamente se montará hasta que se ejecute el script init de GFS2. En este caso, debe escribir un script init para ejecutar el montaje de enlace para que el montaje de enlace se realice después de que se monte el sistema de archivos GFS2.
El siguiente es un ejemplo de un script personalizado de init. El script realiza un montaje de enlace de dos directorios encima de dos directorios de sistemas de archivos GFS2. En este ejemplo, hay un punto de montaje de GFS2 en /mnt/gfs2a, el cual se monta cuando el script init de GFS2 se ejecuta, después del inicio de clúster.
En este script de ejemplo, los valores de la declaración chkconfig indican lo siguiente:
  • 345 indica los niveles de ejecución en los que el script se iniciará
  • 29 es la prioridad de inicio, la cual indica que el script se ejecutará en el inicio después del script init GFS2, el cual tiene una prioridad de inicio de 26.
  • 73 es la prioridad de parada, lo cual indica que en este caso el script se detendrá durante el apagado antes del script GFS2, el cual tiene una prioridad de parada de 74
Los valores de inicio y de parada indican que puede realizar manualmente la acción indicada al ejecutar el comando service start y un comando service stop. Por ejemplo, si el script se llama fredwilma, ejecute service fredwilma start.
Este script debe ponerse en el directorio /etc/init.d con los mismos permisos como los otros scripts en ese directorio. Puede entonces ejecutar un comando chkconfig on para enlazar el script a los niveles de ejecución indicados. Por ejemplo, si el script se llama fredwilma, entonces puede ejecutar 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