3.14. GFS2 철회 (Withdraw) 기능
GFS2 철회 (withdraw) 기능은 클러스터에 있는 GFS2 파일 시스템의 데이터 무결성 기능입니다. GFS2 커널 모듈이 I/O 작업에 이어 GFS2 파일 시스템에서 불일치를 감지하면, 파일 시스템은 클러스터에 사용할 수 없게 됩니다. I/O 작업을 중지하고 시스템 오류 출력을 위해 I/O 작업을 대기 상태로 두어 더 이상의 피해를 방지합니다. 이러한 문제가 발생하면, 저널을 재생하기 위해 GFS2 파일 시스템을 재부팅하여 다시 마운트한 후 다른 서비스 또는 어플리케이션을 수동으로 중지할 수 있습니다. 문제가 해결되지 않으면, 클러스터의 모든 노드에서 파일 시스템을 다시 마운트하고
fsck.gfs2
명령으로 파일 시스템 복구를 수행합니다. GFS 철회 기능은 커널 패닉에 비해 덜 심각하지만 다른 노드에서 노드를 차단하는 원인이 될 수 있습니다.
gfs2
시작 스크립트가 활성화되어 있고 GFS2 파일 시스템이 /etc/fstab
파일에 포함되어 있도록 시스템이 구성되어 있을 경우, GFS2 파일 시스템은 재부팅시 다시 마운트됩니다. 손상된 파일 시스템이 인식되어 GFS2 파일 시스템으로 withdrew가 발생하는 경우 파일 시스템을 다시 마운트하기 전 fsck.gfs2
명령을 실행하는 것이 좋습니다. 이러한 경우, 부팅시 파일 시스템을 다시 마운트하지 않도록 다음과 같은 절차를 실행할 수 있습니다:
- 다음 명령을 사용하여 영향을 받는 노드에서 시작 스크립트를 일시적으로 해제합니다:
#
chkconfig gfs2 off
- 영향을 받은 노드를 다시 시작하여 클러스터 소프트웨어를 시작합니다. GFS2 파일 시스템은 마운트되지 않습니다.
- 클러스터에 있는 모든 노드에서 파일 시스템을 마운트 해제합니다.
- 손상된 파일 시스템이 없는 지를 확인하기 위해 하나의 노드에서의 파일 시스템에서만
fsck.gfs2
를 실행합니다. - 다음 명령을 실행하여 영향을 받는 노드에서 시작 스크립트를 다시 활성화합니다:
#
chkconfig gfs2 on
- 클러스터에 있는 모든 노드에서 GFS2 파일 시스템을 다시 마운트합니다.
GFS2 철회를 초래하는 불일치의 예에는 잘못된 블록 수가 있습니다. GFS 커널이 파일 시스템에서 파일을 삭제할 때, 파일에 관련된 데이터 및 메타데이터 블록을 모두 제거하게 됩니다. 이러한 작업을 완료하면 이는 블록 수를 확인하게 됩니다. 블록 수가 하나가 아닌 경우 (남아있는것이 디스크 inode 자체에 한함을 의미) 블록 수가 감지된 블록 목록과 일치하지 않기 때문에 파일 시스템이 일치하지 않음을 나타내게 됩니다.
지정된
-o errors=panic
옵션으로 파일 시스템을 마운트하면 GFS2 철회 기능을 덮어쓰기할 수 있습니다. 이 옵션이 지정되어 있을 경우, 일반적으로 시스템 철회의 원인이 되었던 모든 오류가 시스템 패닉의 원인으로 됩니다. 이는 노드의 클러스터 통신을 중지하여 노드가 고립되게 합니다.
내부적으로 커널이
gfs_controld
데몬에 메세지를 전송하고 철회를 요청하면 GFS2 철회 기능이 작동합니다. gfs_controld
데몬은 dmsetup
프로그램을 실행하여 장치 맵퍼 오류 대상을 파일 시스템 아래에 배치하여 블록 장치에 더 많이 액세스하지 못하게 합니다. 다음으로 데몬은 커널이 동작 완료되었음을 알립니다. 이는 GFS2 지원 필요 요건으로 CLVM 장치를 항상 GFS2에서 사용해야 하는 이유입니다. 그렇지 않으면 장치 맵퍼 대상을 삽입할 수 없습니다.
장치 매퍼 오류 대상의 목적은 이후의 모든 I/O 작업에 I/O 오류가 발생하여 파일 시스템이 순서대로 마운트 해제되는 지를 확인하는 것입니다. 이 때문에 철회가 발생했을 때 장치 매퍼 장치에서 다수의 I/O 오류가 시스템 로그에 보고되는 것은 일반적인 것입니다.
일부 경우
dmsetup
프로그램이 요청대로 오류 대상을 삽입할 수 없는 경우에는 철회가 실패할 수 있습니다. 이는 철회 지점에서 메모리 부족이 발생하는 경우와 먼저 철회를 트리거한 문제로 인해 메모리를 다시 사용할 수 없는 경우에 발생할 수 있습니다.
모든 철회가 항상 GFS2에 오류가 있다는 것을 의미하는 것은 아닙니다. 경우에 따라 철회 기능은 기본 블록 장치와 관련된 장치 I/O 오류로 인해 트리거될 수 도 있습니다. 철회가 발생한 경우 이에 해당하는지에 대한 여부를 로그에서 확인하는것이 좋습니다.