Red Hat Training

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

4.13. 複数マウントの結合とファイルシステムのマウント順序

mount コマンドの bind オプションを使用する場合、ファイルシステムが必ず正しい順序でマウントされるよう確認してください。次の例の場合、まず /var/log ディレクトリーを先にマウントしてから /tmp ディレクトリーで bind を使ってマウントを実行する必要があります。
# mount --bind /var/log /tmp
ファイルシステムのマウント順序は次のように決定されます。
  • 一般的には、ファイルシステムのマウント順序は fstab ファイルに出現する順序で決定されます。_netdev フラグを付けてマウントされるファイルシステム、独自の init スクリプトを持っているファイルシステムについては例外となります。
  • 独自の init スクリプトを持つファイルシステムは初期化プロセスの後半、fstab ファイルに記載されているファイルシステムがマウントされた後にマウントが行われます。
  • _netdev フラグを付けてマウントされるファイルシステムはシステムでネットワークが有効化された際にマウントされます。
bind を使って GFS2 ファイルシステムをマウントする必要があるような構成の場合には、以下のように fstab ファイルで順序付けすることができます。
  1. bind を使ったマウントに必要なローカルのファイルシステムをマウントします。
  2. GFS2 ファイルシステムをマウントするディレクトリーを bind を使ってマウントします。
  3. GFS2 ファイルシステムをマウントします。
ローカルのディレクトリーやファイルシステムを GFS2 ファイルシステムに bind を使ってマウントしなければならない構成の場合、fstab ファイルに正しいマウント順でファイルシステムを記載しても、GFS2 init スクリプトが実行されるまで GFS2 ファイルシステムがマウントされないため、記載したファイルシステムは正しくマウントされません。この場合、GFS2 ファイルシステムがマウントされるまで待機してから bind を使ったマウントを実行するような init スクリプトを記述する必要があります。
以下にカスタムの init スクリプトの例を示します。このスクリプトにより 2 つの ディレクトリーが GFS2 ファイルシステムの 2 つのディレクトリーに bind を使ってマウントされます。/mnt/gfs2a に既存の GFS2 マウントポイントがあり、クラスターの起動後、GFS2 init スクリプトが実行されるとマウントされます。
スクリプト内の chkconfig の値の意味は次の通りです。
  • 345 - スクリプトが起動するランレベル
  • 29 - 起動の優先度、起動時に起動優先度が 26 の GFS2 init スクリプトが実行された後、起動優先度 29 のこのスクリプトが実行されます
  • 73 - 停止の優先度、シャットダウン時に停止優先度が 73 のこのスクリプトが先に停止されてから、停止優先度が 74 の GFS2 スクリプトが停止されます
起動と停止の値は service start および service stop のコマンドを実行すると、指定した操作を手動で実行可能であることを示しています。たとえば、スクリプト名が fredwilma の場合には、service fredwilma start を実行することができます。
このスクリプトは /etc/init.d ディレクトリー内に他のスクリプトと同じパーミッションを与えて配置してください。次に chkconfig on コマンドを実行してスクリプトを指定のランレベルにリンクします。たとえば、スクリプト名が fredwilma なら 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