4.13. 複数マウントの結合とファイルシステムのマウント順序
mount
コマンドの bind
オプションを使用する場合、ファイルシステムが必ず正しい順序でマウントされるよう確認してください。次の例の場合、まず /var/log
ディレクトリーを先にマウントしてから /tmp
ディレクトリーで bind を使ってマウントを実行する必要があります。
# mount --bind /var/log /tmp
ファイルシステムのマウント順序は次のように決定されます。
- 一般的には、ファイルシステムのマウント順序は
fstab
ファイルに出現する順序で決定されます。_netdev
フラグを付けてマウントされるファイルシステム、独自のinit
スクリプトを持っているファイルシステムについては例外となります。 - 独自の
init
スクリプトを持つファイルシステムは初期化プロセスの後半、fstab
ファイルに記載されているファイルシステムがマウントされた後にマウントが行われます。 _netdev
フラグを付けてマウントされるファイルシステムはシステムでネットワークが有効化された際にマウントされます。
bind を使って GFS2 ファイルシステムをマウントする必要があるような構成の場合には、以下のように
fstab
ファイルで順序付けすることができます。
- bind を使ったマウントに必要なローカルのファイルシステムをマウントします。
- GFS2 ファイルシステムをマウントするディレクトリーを bind を使ってマウントします。
- 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