본문 바로가기

Cloud/Server

[LINUX] kernel: XFS (dm-9): metadata I/O error: block 0x2 ("xfs_trans_read_buf_map") error 74 numblks 1

요새 너무 바빠서.. 메모만 해두고 포스팅 못한게 수두룩빽빽ㅠ

시간 없다 바로 본론 고.

 

 

최근에 Redhat 서버에

모니터링 관제를 새로 적용했다가 아래 로그가 이틀에 한 번 주기로 반복 발생하는걸 확인했다.

 

[hostname] kernel: XFS (dm-9): metadata I/O error: block 0x2 ("xfs_trans_read_buf_map") error 74 numblks 1

 

접속해서 보니 1년도 더 전부터 발생한 로그였고ㅠㅋㅋ 해당 로그는 파일시스템의 특정 영역이 손상되어 발생하는 로그라고 한다.

서비스엔 이상이 없었고 이중화도 되어 있었지만, 잠재적 이슈이니 특정 파일의 재설치를 염두해두고 파일시스템 복구를 수행하기로 했다.

 

내 경우엔 datavg로 사용하는 /sw 경로였고, 해당 경로엔 메인 서비스가 올라가 있었다! (백업되는 경로면 그나마 베스트)

 

아쉽게도, 정확하게 어떤 파일에 문제가 생기는지는 저 로그를 통해서도, 파일시스템을 복구한 후에도 정확히 알 수가 없다.

복구 후 파일을 직접 확인해보거나 해당 서비스의 이상유무로 판단해야 함ㅠ

 

 

 

1. 대상 파일시스템 umount

복구할 대상 파일시스템은 미리 umount 시켜야 한다.

당연히 umount 시켜야할 파일시스템 안의 파일은 미리 중지시켜서, 잡고있는 프로세스가 없도록 해야한다!

 

># umount file-system

 

 

 

 

2. 대상 파일시스템 복구

xfs_repair 명렁어로 xfs 파일시스템을 검사하고 복구 시도할 수 있다.

파일시스템의 xfs 여부는 lsblk로 확인해보면 되고, xfs가 아닌 파일시스템을 이 명령어로 복구 수행하다간 손상으로 이어질 수 있다!

그렇다고 xfs 파일시스템도 반드시 복구된다는 보장은 없음 ㅎㅎ;

 

-n 옵션은 'no modify mode'로, 실제 복구 수행하는게 아니라 Read-only 상태로 스캔해주는 명령어다.

-n 옵션을 수행했을 때, 문제 여부가 나올 것이니 먼저 해보는게 안전하겠쥬?

 

># xfs_repair -n file-system

># xfs_repair file-system

 

복구를 수행하면 자동으로, Phase 여러 단계에 거쳐 결과값이 프롬프트에 떨어진다.

복구가 잘 되면 참 다행~

 

 

 

 

3. 복구가 안될 경우?

 

나는 ㅋㅋㅋㅋ 'device or resource busy' 명령어가 떨어졌다. 작업을 30분 만에 하기로 했는데!!!!

 

 1) -L 옵션

xfs_repair의 -L (Force Log Zeroing) 옵션은 지저분한 로그를 비우며 강제 명령을 수행해주는 옵션이다.

 

일반 명령어의 F 옵션 같은 느낌인 듯

강제로 수행하는 것이니 결과가 잘못될 수 있는 것을 염두해두고 해야 한다.ㅠ

 

># xfs_repair -L file-system

 

근데 난 이걸 해도 똑같이 'device or resource busy' 발생

 

 

 

 2) 사용중인 프로세스가 있는지 찾아보기

분명 파일을 모두 중지하고, 연관 프로세스가 없는 걸 몇 차례 확인했지만.. 그래도 한번 체크해보자.

lsof (List Open Files) 명령어로 해당 파일시스템이 사용되고 있는지 여부를 확인해볼 수 있다.

 

># lsof file-system

 

나는 결과값이 나오지 않았고.. fuser로 파일을 사용중인 유저 여부를 한번 확인해보기로 했다.

 

 

># fuser -u file-system

 

결과값은 딱 하나.. 내 파일시스템을 사용하는게 지금 내 계정이었고..... 음?

혹시 모르니 내 계정을 kill 시켰다.

 

 

># fuser -k file-system

 

곧바로 내 계정은 로그아웃 되었고,

다시 서버 접근 후에 xfs_repair을 수행해보니 정상적으로 동작했다!!!! 범인은 나였어ㅋ

 

복구 후에는 여러 결과값이 떨어지지만, success 같은 문구는 뜨지 않는다.

그 안의 파일을 실행해봐야 알 수 있단거ㅠ

 

 

나중에 꼭 알아두면 좋을 것 같아서 꼭 포스팅~