[NetApp] "모든 디스크 초기화"는 모든 디스크를 지우지 않는다 — 듀얼 컨트롤러 디스크 인수기
지난 글([NetApp] 폐기 예정 스토리지, 밀기 전에 시리얼 콘솔로 열어봤더니)에서 폐기 직전에 살아있는 데이터를 발견해 초기화를 보류했던 NetApp FAS2240-4 — 그 후속편이다. 데이터 처분이 정리되어 보류가 해제됐고, 이번엔 정말로 밀고 재구축할 차례가 됐다. 계획은 단순했다: 듀얼 컨트롤러 중 살아있는 B 컨트롤러 하나만 쓰고, 부트 메뉴에서 "Clean configuration and initialize all disks"를 돌리고, 새 시스템으로 셋업한다. 그런데 "initialize all disks"는 모든 디스크를 지우지 않았다. 이 글은 그 함정의 원리(software disk ownership)와, 다른 컨트롤러 소유였던 디스크를 인수하는 정석 절차(maintenance mode disk reassign)의 기록이다.
배경 — 컨트롤러 2개, 디스크 24개, 그리고 소유권
FAS2240-4는 한 섀시에 컨트롤러 2개(A·B)가 들어가고 디스크 24개를 물리적으로 공유한다. 구 시스템은 A·B가 HA 페어로 돌던 구성이었고, 새 시스템은 B 컨트롤러 단독 구성이다.
여기서 NetApp의 중요한 설계가 등장한다. software disk ownership — 모든 디스크는 정확히 한 컨트롤러의 소유이며, 그 소유권 기록은 컨트롤러가 아니라 디스크 자체에 저장된다. 물리적으로 두 컨트롤러가 같은 백플레인으로 디스크에 닿아 있어도, 소유권 라벨이 붙은 쪽만 그 디스크를 쓸 수 있다.
물리 연결: 컨트롤러 A ─┐ ┌─ 컨트롤러 B
├─ 디스크 24개 ─┤ (둘 다 물리적으로는 닿는다)
논리 소유: │
bay 0~13 (14개) → "A 소유"라고 디스크에 기록됨
bay 14~23 (10개) → "B 소유"라고 디스크에 기록됨
함정 — 부트 메뉴 4번은 "자기 소유 디스크만" 초기화한다
B 컨트롤러에서 부트 메뉴 4번(Clean configuration and initialize all disks)을 돌렸다. 초기화는 정상 완료됐고 셋업 위저드까지 마쳤다. 그런데 disk show -v를 열어 보니:
- B 소유 디스크 10개 — 초기화됨, 새 시스템 소속 ✓
- A 소유 디스크 14개 — 옛 소유자 이름 그대로, 옛 aggregate와 데이터가 그대로 ✗
메뉴 이름의 "all disks"는 **"이 컨트롤러가 소유한 모든 디스크"**라는 뜻이었다. 상대 컨트롤러 소유 디스크는 건드리지 않는다. 생각해 보면 HA 페어에서 한쪽을 재설치할 때 상대 노드의 데이터를 지우면 안 되니 당연한 설계인데, "단독 구성으로 전환하며 전부 밀기"라는 시나리오에서는 함정이 된다.
실패의 기록 — 일반 모드에서는 전부 거부된다
소유권만 넘기면 되겠지 싶어 일반 모드에서 이것저것 시도했다. 전부 실패했고, 에러 메시지를 그대로 남긴다 (같은 벽에 부딪힌 사람이 검색으로 닿도록):
> disk assign 0a.00.0 -f
Disk assign request failed
> priv set advanced
*> disk assign 0a.00.0 -o <새-시스템-이름> -f
(역시 실패)
*> disk remove_ownership 0a.00.0
disk remove_ownership: Disk 0a.00.0 is not owned by this node
disk assign -f는 unowned 디스크를 가져올 때 쓰는 명령이지 타 시스템 소유 디스크를 뺏는 명령이 아니고, disk remove_ownership은 자기 소유 디스크의 소유권을 놓을 때만 동작한다. 일반 모드에는 "남의 디스크를 인수하는" 경로 자체가 없다.
정석 — maintenance mode의 disk reassign
답은 헤드 스왑(컨트롤러 교체) 공식 절차에서 쓰는 **maintenance mode의 disk reassign**이다. 옛 시스템의 sysid에서 새 시스템의 sysid로 소유권을 일괄 이관한다. sysid는 셋업 시 화면과 sysconfig에서 확인할 수 있다.
1. 상대 컨트롤러(A)가 켜져 있다면 먼저 정지 (halt 또는 모듈 분리)
2. reboot → ONTAP 부팅 로그 중 "Press Ctrl-C for Boot Menu"
문구가 보일 때 Ctrl+C
※ LOADER의 AUTOBOOT 카운트다운에서 누르면 너무 이르다.
LOADER로 떨어졌으면 boot_ontap 후 다시 대기
(boot_ontap maint로 직행도 가능)
3. 부트 메뉴에서 5 (Maintenance mode boot) → *> 프롬프트
4. *> disk reassign -s <옛-sysid> -d <새-sysid>
→ y 확인 → 옛 sysid 소유 디스크 전부 일괄 이관
5. *> disk show -v 로 확인 → halt → LOADER에서 boot_ontap
포인트 세 가지. 첫째, Ctrl+C 타이밍 — LOADER 카운트다운이 아니라 ONTAP 부팅 로그에 안내 문구가 뜰 때다. 둘째, -s/-d 인자는 호스트명이 아니라 **sysid(숫자)**다. 셋째, 이 절차에 옛 시스템 로그인은 필요 없다 — 구 시스템의 root 비밀번호는 끝내 알아내지 못했지만(연속 실패 시 too many login attempts... sleeping 잠금까지 봤다) 소유권 인수에는 아무 지장이 없었다. 물리 접근과 콘솔이 곧 권한이라는 뜻이기도 하다.
뒷정리 — foreign aggregate 파기와 zeroing
정상 부팅 후 aggr status를 보면 인수한 디스크들 위에 옛 시스템의 루트 aggregate가 따라 들어와 있다. 이름이 충돌해 (1) 접미사가 붙은 채 offline, foreign 상태로 보인다.
*> aggr status
aggr0 online ... (새 시스템 루트)
aggr0(1) offline ... foreign ← 옛 시스템의 루트 aggregate
> aggr destroy aggr0(1)
Are you sure you want to destroy this aggregate? y
파기하면 디스크들이 스페어로 풀리는데, zeroing이 안 된 상태라 새 aggregate에 넣으려면 disk zero spares가 필요하다. 1TB 디스크 기준 한두 시간 단위로 걸리고 sysconfig -r에서 진행률을 볼 수 있다. 주의 하나: zeroing은 전원을 끄면 진행분이 날아간다. 퇴근 전에 걸어두고 장비를 끄면 다음 날 처음부터다.
덤으로, 이 과정에서 고장 디스크 하나를 정리하며 배운 것들:
storage show disk에서Current owner: 4294967295(0xFFFFFFFF)는 unowned라는 뜻이다- Failed 마킹된 디스크는
disk assign도 거부된다 (Reason: Failed disk) — 소유권을 줄 수도 없다 - 물리 위치를 찾을 땐
priv set advanced후led_on <disk>로 해당 베이 LED를 켠다 - 디스크 타입(예: BSAS와 FSAS)이 다르면 같은 RAID 그룹에 섞을 수 없다 — 데이터 aggregate는 타입별로 나눠야 한다
시리얼 콘솔에서의 잡학 (이번에 추가로 얻은 것)
- 셋업 위저드는 첫 인터페이스 IP를 빈 Enter로 스킵 못 하는 버전이 있다 — 임시 IP를 넣고 나중에
ifconfig으로 바꾸는 게 빠르다. 나머지(media type, flow control, jumbo frame 등)는 전부 기본값 Enter로 넘겨도 된다. - 위저드 프롬프트 사이에 syslog가 마구 끼어들지만 입력 버퍼는 깨지지 않는다 — 화면이 지저분해도 침착하게 계속 입력하면 된다. 비밀번호 입력 중에 로그가 끼어도 마찬가지.
- screen에서
Ctrl+A]는 붙여넣기다.sysconfig -a같은 대량 출력을 드래그해 복사하다 잘못 누르면 출력 전체가 명령으로 재입력되며not found폭탄이 터진다 (실행되는 건 없어서 무해하지만 심장에 나쁘다). - 컨트롤러 모듈을 뽑으면 섀시 팬이 최대 속도로 돈다 — 고장이 아니라 냉각 보호 동작이고, 모듈을 도로 꽂으면 조용해진다. 컨트롤러 모듈은 핫스왑이라 한쪽을 빼도 다른 쪽은 계속 돈다.
- 전원을 내릴 땐 반드시
halt(NVRAM flush 후 LOADER로 내려감) → LOADER 프롬프트 확인 → 물리 스위치 순서로.
교훈
- "all"이라는 단어를 벤더의 문맥으로 읽어라. NetApp의 "initialize all disks"는 소유권 모델 위에서의 "all"이다. 초기화·포맷·삭제류 작업 후에는 반드시 실측(
disk show -v)으로 결과를 확인할 것 — 특히 "다 지웠다"고 믿는 순간이 제일 위험하다. - 거부당하면 더 센 플래그가 아니라 다른 모드를 찾아라. 일반 모드에서
-f를 붙여가며 반복할 일이 아니라, 애초에 그 작업이 설계된 자리(maintenance mode, 헤드 스왑 절차)를 찾는 게 정답이었다. - 물리 접근은 곧 데이터 접근이다. root 비밀번호 없이도 콘솔과 부트 메뉴만으로 디스크 소유권 인수까지 전부 가능했다. 반대로 말하면, 폐기·이관 대기 중인 스토리지 장비의 물리 보안과 데이터 완전삭제 절차가 왜 중요한지의 실증이기도 하다.
댓글
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.