인프라/스토리지·백업

OpenZFS scrub·resilver 운영 점검: zpool status 오류와 복구 진행률 읽기

filefind

ZFS pool이 ONLINE이라고 표시되어도 오류 카운터와 마지막 scrub 결과를 확인해야 합니다. scrub과 resilver는 목적이 다르며, 둘 다 백업을 대신하지 않습니다. 이 글에서는 오류를 지운 화면보다 실제 데이터 읽기와 복구 상태를 확인하는 운영 순서를 정리합니다.

1. pool 상태와 영구 오류를 함께 조회하기

tank는 예시 pool 이름입니다. 실제 pool 이름과 장치 식별 정보를 확인합니다. -P 옵션은 장치 경로를 자세히 보는 데 도움이 되며, 디스크 교체 시에는 일련번호·WWN도 별도로 대조합니다.

zpool list
zpool status -v tank
zpool status -P tank
zpool iostat -v tank 1 5

READ·WRITE·CKSUM 카운터, scan 항목, errors 항목을 함께 봅니다. 카운터가 남았다고 무조건 현재 장애가 지속된다고 단정하지 않고 이전 점검 결과와 증가분을 비교합니다. 반대로 ONLINE만으로 파일 단위 무결성까지 보장되었다고 결론 내리지 않습니다.

2. scrub과 resilver의 차이

작업 목적 운영 확인
scrub 할당된 데이터를 읽어 체크섬을 검사하고 가능한 오류를 복구 마지막 완료 시각·검사 결과·지연 변화
resilver 새 장치 또는 복귀 장치에 필요한 데이터를 재구성 장치 상태·진행률·복구 중 중복성
백업 복원 정상 복사본으로 손상·삭제 데이터를 되돌림 별도 장애 영역·복구 시점·애플리케이션 검증

중복성이 있는 pool은 정상 복사본으로 손상을 복구할 수 있지만, 중복성 범위를 넘은 손상은 scrub만으로 해결되지 않습니다. 디스크 교체 후의 resilver는 보통 필요한 블록을 재구성하는 작업이며 정기 무결성 검사와 동일한 목적이 아닙니다.

3. scrub은 부하 계획을 세워 시작하기

scrub은 I/O를 사용합니다. 먼저 현재 resilver 진행 여부와 서비스 지연을 확인하고, 정기 작업 시간에 실행합니다. 아래 시작·중단 명령은 운영 변경 예시입니다. 상태 조회 결과에 맞게 적용해야 합니다.

# 유지보수 일정에 맞춰 시작
zpool scrub tank
# 진행 상태 조회
zpool status tank
# 업무 영향으로 중단이 필요한 경우
zpool scrub -s tank

OpenZFS 2.2 문서 기준으로 scrub과 resilver는 동시에 실행되지 않습니다. 버전마다 진행률 표시나 지원 옵션이 달라질 수 있으므로 설치 버전의 매뉴얼을 확인합니다. 즉시 종료되는 명령 호출 자체가 검사 완료를 의미하지 않으므로 scan 결과가 완료 상태인지 다시 봅니다.

4. 체크섬 오류가 늘면 경로와 메모리도 조사하기

CKSUM 오류는 저장 매체만의 문제로 한정하지 않습니다. 커널 I/O 오류, HBA, 케이블·백플레인, 메모리 이벤트를 같은 시각으로 대조합니다. 여러 장치의 오류가 동시에 보인다면 공유 경로와 복구 불가능한 블록 여부도 조사합니다.

journalctl -k --since "2 hours ago" --no-pager
zpool events -v
zpool status -v tank

zpool status -v에서 영구 오류 파일이 확인되면 사용 가능한 정상 백업을 확보하고 파일·애플리케이션 단위 복원을 계획합니다. 손상 데이터를 참조하는 스냅샷이 정상 복사본을 보장한다고 가정하지 않습니다. zpool clear로 카운터를 초기화한 것만으로 원인이 해결되었다고 보고하지 않습니다.

점검 완료 기준

  • pool·장치 상태와 오류 증가 여부를 확인했다.
  • scrub 또는 resilver가 실제 완료되었는지 확인했다.
  • 영구 오류 파일과 백업 복원 필요 여부를 기록했다.
  • 서비스 지연과 정상 데이터 읽기를 다시 검증했다.

참고자료