Red Hat Training

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

4.13. Mount bind e ordine di montaggio di un file system

Se usate l'opzione bind del comando mount assicuratevi che i file system siano montati nell'ordine corretto. Nel seguente esempio la directory /var/log deve essere montata prima di eseguire il mount bind sulla directory /tmp:
# mount --bind /var/log /tmp
L'ordine di montaggio dei file system è determinato nel modo seguente:
  • In generale il montaggio dei file system è determinato dall'ordine nel quale il file system appare all'interno del file fstab. Eccezioni a questa regola sono i file system montati con il flag _netdev o i file system che possiedono i propri script init.
  • Un file system con il proprio script init è montato nelle fasi successive del processo di inizializzazione, dopo il file system presente nel file fstab.
  • File system montati con il flag _netdev sono montati dopo aver abilitato una rete sul sistema.
Se la configurazione necessita di una creazione di un mount bind sul quale montare un file system GFS2 sarà possibile ordinare il file fstab nel modo seguente:
  1. Montate i file system locali necessari per il mount bind.
  2. Eseguire il mount bind della directory sulla quale montare il file system GFS2.
  3. Montare il file system GFS2.
Se la configurazione richiede l'esecuzione di un mount bind di una directory locale o file system su di un file system GFS2, anche se elencherete i file system nell'ordine corretto nel file fstab non sarà possibile montare i file system correttamente poichè il file system GFS2 non verrà montato fino a quando non sarà eseguito lo script init di GFS2. In questo caso è consigliato scrivere uno script init per eseguire il mount bind in modo tale che questa operazione non sia eseguita prima del montaggio del file system GFS2.
Il seguente script è un esempio di script init personalizzato. Esso esegue un mount bind di due directory su due directory di un file system GFS2. In questo esempio è presente un mount point GFS2 esistente su /mnt/gfs2a, montato al momento dell'esecuzione dello script init di GFS2, dopo l'avvio del cluster.
In questo script d'esempio i valori dell'istruzione chkconfig indicano quanto di seguito riportato:
  • 345 indica i run level nei quali verrà iniziato lo script
  • 29 è la priorità d'avvio la quale in questo caso indica che lo script verrà eseguito al momento dell'avvio dopo lo script init di GFS2, il quale avrà una priorità di 26
  • 73 è la priorità d'arresto, in questo caso indica che lo script verrà arrestato durante il processo di shutdown prima dello script GFS2, il quale ha una priorità d'arresto pari a 74.
I valori d'avvio e d'arresto indicano la possibilità di eseguire manualmente l'azione indicata tramite l'esecuzione di un comando service start ed un service stop. Per esempio, se lo script è fredwilma allora sarà possibile eseguire service fredwilma start.
Questo script dovrà essere archiviato nella directory /etc/init.d con gli stessi permessi di altri script presenti in quella directory. Successivamente sarà possibile eseguire un comando chkconfig on per collegare lo script ai run level indicati. Per esempio se lo script è fredwilma allora sarà possibile eseguire 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