Red Hat Training

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

3.13. 바인드 마운트 및 파일 시스템 마운트 순서

mount 명령의 bind 옵션을 사용할 때, 파일 시스템이 올바른 순서로 마운트되어 있는지를 반드시 확인해야 합니다. 다음의 예에서 /var/log 디렉토리는 /tmp 디렉토리에 바인드(bind) 마운트를 실행하기 전 /var/log 디렉토리가 마운트되어야 합니다:
# mount --bind /var/log /tmp
파일 시스템 마운트 순서는 다음과 같이 결정됩니다:
  • 일반적으로 파일시스템 마운트 순서는 fstab 파일에 나타난 파일 시스템 순서대로 지정됩니다. _netdev 플래그로 마운트된 파일 시스템 또는 자체 init 스크립트를 갖는 파일 시스템은 이러한 순서에서 제외됩니다.
  • 자체 init 스크립트가 있는 파일 시스템은 fstab 파일에 있는 파일 시스템 이후에, 초기화 과정 후반에 마운트됩니다.
  • _netdev 플래그로 마운트된 파일 시스템은 시스템의 네트워크가 활성화되었을 때 마운트됩니다.
GFS2 파일 시스템을 마운트하기 위해 bind 마운트 생성을 필요로하는 설정의 경우 다음과 같이 fstab 파일 순서를 지정할 수 있습니다:
  1. 바인딩 마운트에 필요한 로컬 파일 시스템을 마운트합니다.
  2. GFS2 파일 시스템이 마운트된 디렉토리를 바인드 마운트합니다.
  3. GFS2 파일 시스템을 마운트합니다.
로컬 디렉토리 또는 파일 시스템을 GFS2 파일 시스템에 bind 마운트하는 설정이 필요한 경우, fstab 파일에 파일 시스템을 올바른 순서로 나열하면 GFS2 init 스크립트가 실행될 때 까지 GFS2 파일 시스템은 마운트되지 않기 때문에 파일 시스템을 마운트하지 않게 됩니다. 이러한 경우, bind 마운트를 실행하기 위해 init 스크립트를 작성하여 GFS2 파일 시스템이 마운트되기 전 까지 bind 마운트되지 않게 합니다.
다음의 스크립트는 사용자 설정 init 스크립트의 예입니다. 이 스크립트는 GFS2 파일 시스템의 두 개의 디렉토리에 두 디렉토리의 바인딩 마운트를 실행합니다. 예에서 /mnt/gfs2a에 기존 GFS2 마운트 지점이 있어 이는 클러스터가 시작된 후 GFS2 init 스크립트가 실행될 때 마운트됩니다.
예시 스크립트에서 chkconfig 문의 값은 다음을 나타냅니다:
  • 345는 스크립트가 시작하는 런레벨입니다
  • 29는 시작 우선 순위입니다. 이 경우 26 시작 우선 순위를 갖는 GFS2 init 스크립트 후 시작 시 스크립트가 실행됨을 나타냅니다.
  • 73은 종료 우선 순위입니다. 이 경우 74 종료 우선 순위를 갖는 GFS2 스크립트 전 종료 시 스크립트가 중지됨을 나타냅니다.
시작 및 종료 값은 service startservice 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