기타 STUDYXFS 손상 파일(-??????????) 복12 ARTICLES
PUBLIC STUDY

XFS 손상 파일(-??????????) 복구 및 Pacemaker Filesystem 리소스 처리

ls -al에서 파일이 -??????????로 표시되고 rm -rf로도 삭제되지 않는 경우, 단순 권한 문제가 아니라 디렉터리 엔트리와 inode 정보 불일치 등 XFS 메타데이터 손상을 의심한다. · 문제 경로: · 조회 시:

01
1분 읽기

XFS 손상 파일(-??????????) 복구 및 Pacemaker Filesystem 리소스 처리

ls -al에서 파일이 -??????????로 표시되고 rm -rf로도 삭제되지 않는 경우, 단순 권한 문제가 아니라 디렉터리 엔트리와 inode 정보 불일치 등 XFS 메타데이터 손상을 의심한다.

이 글의 노션 원문 ↗

ls -al에서 파일이 -??????????로 표시되고 rm -rf로도 삭제되지 않는 경우, 단순 권한 문제가 아니라 디렉터리 엔트리와 inode 정보 불일치 등 XFS 메타데이터 손상을 의심한다.

COMMENTS

이 글의 댓글

0

아직 댓글이 없습니다. 이 글에서 얻은 생각이나 질문을 남겨보세요.

02
1분 읽기

1. 발생 증상

문제 경로:

이 글의 노션 원문 ↗

문제 경로:

SHELL
/data1/19c/arch/WSMAINDB_1_2_1235437312.arc

조회 시:

CODE
-?????????? ? ? ? ? ? WSMAINDB_1_2_1235437312.arc

삭제 시에도 디렉터리가 비워지지 않음:

SHELL
rm -rf *
rm: cannot remove 'arch': Directory not empty
COMMENTS

이 글의 댓글

0

아직 댓글이 없습니다. 이 글에서 얻은 생각이나 질문을 남겨보세요.

03
1분 읽기

2. 파일시스템 구조 확인

Pacemaker 리소스 구성:

이 글의 노션 원문 ↗

Pacemaker 리소스 구성:

CODE
Resource Group: oracle_grp
  fs_data   -> /data1
  fs_arch   -> /arch
  vip_oracle
  ora_lsnr

실제 문제 파일은 /data1/19c/arch 아래에 있었으므로 복구 대상은 /arch의 vg_arch-lv_arch가 아니라 /data1의 vg_data-lv_data이다.

확인 명령:

SHELL
findmnt /data1
findmnt /data1/19c/arch

대상 장치:

CODE
/data1 -> /dev/mapper/vg_data-lv_data
COMMENTS

이 글의 댓글

0

아직 댓글이 없습니다. 이 글에서 얻은 생각이나 질문을 남겨보세요.

04
1분 읽기

3. Pacemaker 때문에 unmount가 자동 복구되는 문제

fs_data, fs_arch는 Pacemaker Filesystem 리소스로 관리된다. 따라서 단순히 umount하면 Pacemaker monitor가 장애로 판단하여 다시 mount할 수 있다.

이 글의 노션 원문 ↗

fs_data, fs_arch는 Pacemaker Filesystem 리소스로 관리된다. 따라서 단순히 umount하면 Pacemaker monitor가 장애로 판단하여 다시 mount할 수 있다.

예:

CODE
fs_arch 20s-interval monitor ... returned 'not running'

따라서 파일시스템 복구 작업 전에는 Pacemaker 리소스를 먼저 disable해야 한다.

SHELL
pcs resource disable fs_data --wait=60
COMMENTS

이 글의 댓글

0

아직 댓글이 없습니다. 이 글에서 얻은 생각이나 질문을 남겨보세요.

05
1분 읽기

4. fs_data stop timeout 원인

최초 fs_data disable 시 다음과 같이 timeout 발생:

이 글의 노션 원문 ↗

최초 fs_data disable 시 다음과 같이 timeout 발생:

CODE
Error: waiting timeout
Pending actions:
    fs_data_stop_0 on oel19PA

원인은 /data1/disk4k.img를 backing file로 사용한 4K loop device가 /data1을 점유하고 있었기 때문이었다.

확인:

SHELL
losetup -j /data1/disk4k.img

결과:

CODE
/dev/loop0: (...) (/data1/disk4k.img)

4K 테스트 환경을 먼저 해제:

SHELL
umount /oradata4k
vgchange -an vg_data4k
losetup -d /dev/loop0

사용 프로세스 확인:

SHELL
fuser -vm /data1

아래처럼 kernel mount만 남아 있으면 일반 사용자 프로세스가 파일시스템을 점유하고 있지는 않은 상태다.

CODE
/data1: root kernel mount /data1
COMMENTS

이 글의 댓글

0

아직 댓글이 없습니다. 이 글에서 얻은 생각이나 질문을 남겨보세요.

06
1분 읽기

5. Pacemaker 리소스 상태 및 수동 unmount

기존 stop timeout 때문에 다음 상태가 발생할 수 있다.

이 글의 노션 원문 ↗

기존 stop timeout 때문에 다음 상태가 발생할 수 있다.

CODE
fs_data FAILED oel19PA (disabled, blocked)

이 상태에서 /data1이 여전히 mount되어 있다면 실제 파일시스템을 수동으로 내린다.

SHELL
cd /
umount /data1

확인:

SHELL
findmnt /data1
df -Th

findmnt /data1 결과가 없어야 한다.

COMMENTS

이 글의 댓글

0

아직 댓글이 없습니다. 이 글에서 얻은 생각이나 질문을 남겨보세요.

07
1분 읽기

6. XFS 무수정 점검

실제 대상 LV에 먼저 -n 옵션으로 점검한다.

이 글의 노션 원문 ↗

실제 대상 LV에 먼저 -n 옵션으로 점검한다.

SHELL
xfs_repair -n /dev/mapper/vg_data-lv_data

실제 확인된 오류:

CODE
imap claims a free inode 169 is in use, would correct imap and clear inode

entry "WSMAINDB_1_2_1235437312.arc" in shortform directory 166 references free inode 169
would have junked entry "WSMAINDB_1_2_1235437312.arc" in directory inode 166

해석

디렉터리 inode 166에는 WSMAINDB_1_2_1235437312.arc 엔트리가 남아 있음

해당 엔트리가 inode 169를 가리키고 있음

하지만 inode 169는 이미 free 상태임

즉 디렉터리 엔트리와 inode allocation 정보가 불일치

이 때문에 ls가 파일의 stat 정보를 읽지 못해 -??????????로 표시됨

COMMENTS

이 글의 댓글

0

아직 댓글이 없습니다. 이 글에서 얻은 생각이나 질문을 남겨보세요.

08
1분 읽기

7. 실제 XFS 복구

파일시스템이 unmount된 상태에서 실행:

이 글의 노션 원문 ↗

파일시스템이 unmount된 상태에서 실행:

SHELL
xfs_repair /dev/mapper/vg_data-lv_data

실제 복구 메시지:

CODE
imap claims a free inode 169 is in use, correcting imap and clearing inode
cleared inode 169

entry "WSMAINDB_1_2_1235437312.arc" in shortform directory 166 references free inode 169
junking entry "WSMAINDB_1_2_1235437312.arc" in directory inode 166

마지막:

CODE
Phase 7 - verify and correct link counts...
done

복구 결과

xfs_repair가 다음을 수행했다.

잘못된 inode allocation map 수정

free 상태인 inode 169 정리

inode 169를 가리키던 깨진 directory entry 제거

AG header/tree 및 link count 재검증

따라서 기존 -?????????? 파일 엔트리는 제거된다.

COMMENTS

이 글의 댓글

0

아직 댓글이 없습니다. 이 글에서 얻은 생각이나 질문을 남겨보세요.

09
1분 읽기

8. Pacemaker 리소스 정상화

복구 후 실패 상태 정리:

이 글의 노션 원문 ↗

복구 후 실패 상태 정리:

SHELL
pcs resource cleanup fs_data

필요 시 unmanaged 상태 해제:

SHELL
pcs resource manage fs_data

리소스 활성화:

SHELL
pcs resource enable fs_data --wait=60

최종 확인:

SHELL
pcs status
findmnt /data1
ls -la /data1/19c/arch

최종 정상 상태 예:

CODE
fs_data      Started oel19PA
fs_arch      Started oel19PA
vip_oracle   Started oel19PA
ora_lsnr     Started oel19PA
CODE
/data1 /dev/mapper/vg_data-lv_data xfs rw,...
COMMENTS

이 글의 댓글

0

아직 댓글이 없습니다. 이 글에서 얻은 생각이나 질문을 남겨보세요.

10
1분 읽기

9. 4K Loop 테스트 환경 재구성

XFS repair를 위해 /data1/disk4k.img의 loop 연결을 해제했으므로 4K 테스트를 계속할 경우 다시 연결한다.

이 글의 노션 원문 ↗

XFS repair를 위해 /data1/disk4k.img의 loop 연결을 해제했으므로 4K 테스트를 계속할 경우 다시 연결한다.

SHELL
losetup -f --show --sector-size 4096 /data1/disk4k.img
vgchange -ay vg_data4k
mount /dev/vg_data4k/lv_data4k /oradata4k

확인:

SHELL
lsblk -o NAME,TYPE,SIZE,PHY-SEC,LOG-SEC
df -hT /oradata4k

목표 상태:

CODE
loop0                  loop  10G  4096  4096
└─vg_data4k-lv_data4k  lvm    9G  4096  4096
COMMENTS

이 글의 댓글

0

아직 댓글이 없습니다. 이 글에서 얻은 생각이나 질문을 남겨보세요.

11
1분 읽기

10. 전체 처리 흐름

이 글의 노션 원문 ↗
CODE
ls에서 -?????????? 파일 확인
        ↓
문제 파일이 위치한 실제 mount/LV 확인
        ↓
Pacemaker Filesystem 리소스 disable
        ↓
stop timeout 발생 시 파일시스템 점유 요소 확인
        ↓
4K loop backing file 및 관련 LVM 해제
        ↓
/data1 수동 unmount
        ↓
xfs_repair -n 으로 오류 확인
        ↓
xfs_repair 실제 수행
        ↓
깨진 inode / directory entry 정리
        ↓
Pacemaker cleanup / enable
        ↓
mount 및 파일 상태 최종 확인
COMMENTS

이 글의 댓글

0

아직 댓글이 없습니다. 이 글에서 얻은 생각이나 질문을 남겨보세요.

12
1분 읽기

핵심 정리

이번 장애의 직접 원인은 WSMAINDB_1_2_1235437312.arc 디렉터리 엔트리가 이미 free 상태인 inode 169를 참조하고 있던 XFS 메타데이터 불일치였다. rm -rf 옵션 문제가 아니며, 올바른 해결 방법은 해당 파일시스템을 unmount한 뒤 xfs_repair로 inode 및 directory

이 글의 노션 원문 ↗

이번 장애의 직접 원인은 WSMAINDB_1_2_1235437312.arc 디렉터리 엔트리가 이미 free 상태인 inode 169를 참조하고 있던 XFS 메타데이터 불일치였다. rm -rf 옵션 문제가 아니며, 올바른 해결 방법은 해당 파일시스템을 unmount한 뒤 xfs_repair로 inode 및 directory entry를 복구하는 것이다.

Pacemaker에서 Filesystem 리소스로 관리하는 mount point는 수동 umount만으로 처리하면 클러스터가 다시 mount할 수 있다. 반드시 해당 fs_* 리소스를 먼저 disable하고 작업해야 한다.

COMMENTS

이 글의 댓글

0

아직 댓글이 없습니다. 이 글에서 얻은 생각이나 질문을 남겨보세요.

3S
나도 공부 기록을 꺼내볼까요?

공개 노션 링크 하나면 목차가 있는 스터디가 됩니다.

내 글 공유하기 →