FreeNAS zfs 환경에서 HDD 교체 노트
이는 CUI 기반 단계입니다.
컨디션
이 노트는 다음과 같은 환경을 전제로 한다.
GPT 활용
일의 시작
HDD 하나가 잘못되기 시작했어요.
↓
어느 일요일, 지난번 조폴 스크랩을 시작한 지 35일 이상이 지났습니다. 조폴 스크랩이 자동으로 시작됩니다.
↓
OS 측면에서 디스크 자동 분리
↓
이 HDD는 zfs에서 UNAVAIL로 변경되었습니다.
문제 부분을 발췌하다.# zpool status
pool: tank
state: DEGRADED
(略)
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
(略)
10284868363385756633 UNAVAIL 0 0 0 was /dev/gptid/46b7e268-9176-11e2-83a7-7054d244c94e
errors: No known data errors
#
교환 준비
dmesg 명령을 실행하여 교체할 HDD 및 파티션 정보를 확인합니다.
명령의 결과를 보면 아다1이라는 HDD가 OS에서 끊겼는데 이것이 바로 고장난 HDD다.
dmesg의 결과### あらかじめFreeNASサーバにSSHでログインしておく
% dmesg
(ada1:ahcich2:0:0:0): lost device
ahcich2: AHCI reset: device not ready after 31000ms (tfd = 00000080)
ahcich2: Poll timeout on slot 7 port 0
ahcich2: is 00000000 cs 00000080 ss 00000000 rs 00000080 tfd 80 serr 00000000 cmd 0004c717
ahcich2: Poll timeout on slot 7 port 0
ahcich2: is 00000000 cs 00000080 ss 00000000 rs 00000080 tfd 80 serr 00000000 cmd 0004c717
(ada1:ahcich2:0:0:0): removing device entry
Closed disk ada1 -> 6
액세스 표시등이 깜박이는 HDD 확인
이번 작업에서 아래의 빨간 테두리처럼 HDD 접근등이 꺼지지 않았다.이것은 이번에 교환한 아다1의 HDD인 것 같다.
일련 번호 확인
위와 같은 확인뿐만 아니라 신중하게 HDD의 일련 번호도 확인하기 위해 뽑은 HDD가 실제로 고장이 났는지 미리 조사한다.그리고 HDD가 안 보이는데 어떤 HDD로 바꿀 수 없나요?확인
사용할 명령# camcontrol identify {HDD名}
일반 HDD의 경우(예)% su -
### 以下からrootで作業
# camcontrol identify ada0
(略)
firmware revision CN01
serial number ???????? # ←正常なディスクすべてでこの値をメモしておく
(以下略)
교체할 HDD(다음 오류 출력)### rootで作業
# camcontrol identify ada1
camcontrol: cam_lookup_pass: CAMGETPASSTHRU ioctl failed
cam_lookup_pass: No such file or directory
cam_lookup_pass: either the pass driver isn't in your kernel
cam_lookup_pass: or ada1 doesn't exist
(以下略)
파티션 정보 얻기
만일의 경우를 대비하여 전원이 꺼지기 전에 구역 정보를 미리 얻을 수 있습니다.
사용할 명령# gpart show {HDD名}
파티 정보 얻기(예)# gpart show ada0
=> 34 3907029101 ada0 GPT (1.8T)
34 94 - free - (47k)
128 4194304 1 freebsd-swap (2.0G)
4194432 3902834696 2 freebsd-zfs (1.8T)
3907029128 7 - free - (3.5k)
#
디스크 스왑
본체 끄기
### rootで作業
# shutdown -p now
장애가 발생한 HDD 제거, 일련 번호 확인
손상된 HDD를 제거합니다.
그리고 다음 서열 번호가 모두 다르다는 것을 확인하세요.
# zpool status
pool: tank
state: DEGRADED
(略)
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
(略)
10284868363385756633 UNAVAIL 0 0 0 was /dev/gptid/46b7e268-9176-11e2-83a7-7054d244c94e
errors: No known data errors
#
dmesg 명령을 실행하여 교체할 HDD 및 파티션 정보를 확인합니다.
명령의 결과를 보면 아다1이라는 HDD가 OS에서 끊겼는데 이것이 바로 고장난 HDD다.
dmesg의 결과
### あらかじめFreeNASサーバにSSHでログインしておく
% dmesg
(ada1:ahcich2:0:0:0): lost device
ahcich2: AHCI reset: device not ready after 31000ms (tfd = 00000080)
ahcich2: Poll timeout on slot 7 port 0
ahcich2: is 00000000 cs 00000080 ss 00000000 rs 00000080 tfd 80 serr 00000000 cmd 0004c717
ahcich2: Poll timeout on slot 7 port 0
ahcich2: is 00000000 cs 00000080 ss 00000000 rs 00000080 tfd 80 serr 00000000 cmd 0004c717
(ada1:ahcich2:0:0:0): removing device entry
Closed disk ada1 -> 6
액세스 표시등이 깜박이는 HDD 확인
이번 작업에서 아래의 빨간 테두리처럼 HDD 접근등이 꺼지지 않았다.이것은 이번에 교환한 아다1의 HDD인 것 같다.
일련 번호 확인
위와 같은 확인뿐만 아니라 신중하게 HDD의 일련 번호도 확인하기 위해 뽑은 HDD가 실제로 고장이 났는지 미리 조사한다.그리고 HDD가 안 보이는데 어떤 HDD로 바꿀 수 없나요?확인
사용할 명령
# camcontrol identify {HDD名}
일반 HDD의 경우(예)% su -
### 以下からrootで作業
# camcontrol identify ada0
(略)
firmware revision CN01
serial number ???????? # ←正常なディスクすべてでこの値をメモしておく
(以下略)
교체할 HDD(다음 오류 출력)### rootで作業
# camcontrol identify ada1
camcontrol: cam_lookup_pass: CAMGETPASSTHRU ioctl failed
cam_lookup_pass: No such file or directory
cam_lookup_pass: either the pass driver isn't in your kernel
cam_lookup_pass: or ada1 doesn't exist
(以下略)
파티션 정보 얻기
만일의 경우를 대비하여 전원이 꺼지기 전에 구역 정보를 미리 얻을 수 있습니다.
사용할 명령
# gpart show {HDD名}
파티 정보 얻기(예)# gpart show ada0
=> 34 3907029101 ada0 GPT (1.8T)
34 94 - free - (47k)
128 4194304 1 freebsd-swap (2.0G)
4194432 3902834696 2 freebsd-zfs (1.8T)
3907029128 7 - free - (3.5k)
#
디스크 스왑
본체 끄기
### rootで作業
# shutdown -p now
장애가 발생한 HDD 제거, 일련 번호 확인
손상된 HDD를 제거합니다.
그리고 다음 서열 번호가 모두 다르다는 것을 확인하세요.
### rootで作業
# shutdown -p now
호스트 부팅
HDD를 교체한 후 호스트 전원을 켜고 전원을 켭니다.제대로 작동하길 기도하자(웃음)
또한 zfs에서는 HDD만 교체해도 자동으로 RAID를 재구성할 수 없기 때문에 다음과 같은 작업을 계속할 예정이다.
교체된 HDD에 GPT 모드 및 파티션 생성
부팅 후 FreeNAS 서버에 로그인하여 파티션을 생성합니다.
또 원래 GPT를 사용하기 때문에 GPT 모드를 만든 후 파티션을 만든다.### 以下からはrootで作業します
### GPTスキーマを作成する
# gpart create -s gpt ada1
ada1 created
### 確認
# gpart show ada1 # GPT化していることを確認
=> 34 3907029101 ada1 GPT (1.8T)
34 3907029101 - free - (1.8T)
전원이 꺼지기 전에 얻은 구역 정보를 사용하여 구역을 만듭니다.
gpart에 구역을 만드는 방법# gpart add -i {index番号} -t {ファイルシステムタイプ} -b {スタート位置} -s {サイズ} ada1
### -bオプションはfreebsd-swapのみで利用
파티션 생성 방법### 以下のようにパーティションを作る
# gpart show ada0
=> 34 3907029101 ada0 GPT (1.8T)
34 94 - free - (47k)
128 4194304 1 freebsd-swap (2.0G)
4194432 3902834696 2 freebsd-zfs (1.8T)
3907029128 7 - free - (3.5k)
### swap領域作成
# gpart add -i 1 -t freebsd-swap -b 128 -s 4194304 ada1
ada1p1 added
### zfs領域作成
# gpart add -i 2 -t freebsd-zfs -s 3902834696 ada1
ada1p2 added
### 作成したパーティション確認
# gpart show ada1
=> 34 3907029101 ada1 GPT (1.8T)
34 94 - free - (47k)
128 4194304 1 freebsd-swap (2.0G)
4194432 3902834696 2 freebsd-zfs (1.8T)
3907029128 7 - free - (3.5k)
### 他のディスクの情報
# gpart show ada0
=> 34 3907029101 ada0 GPT (1.8T)
34 94 - free - (47k)
128 4194304 1 freebsd-swap (2.0G)
4194432 3902834696 2 freebsd-zfs (1.8T)
3907029128 7 - free - (3.5k)
#
### ada1とada0で値が一致している!(問題なし)
rawuuid 값 확인 및 디스크 교환 명령 실행 # gpart list ada1
Geom name: ada1
modified: false
state: OK
fwheads: 16
fwsectors: 63
last: 3907029134
first: 34
entries: 128
scheme: GPT
Providers:
1. Name: ada1p1
(略)
rawuuid: 58e6ad2b-5e8e-11e5-a197-7054d244c94e # ←こっちはswapのなので無視
(略)
2. Name: ada1p2
(略)
rawuuid: f5e5af6c-5e8e-11e5-a197-7054d244c94e # ←こっちをメモ
(略)
#
방금 기록된rawuid 값을 이용하여 새 HDD의 zfs 영역의 문자 장치가 완성되었는지 확인하십시오.# ls -la /dev/gptid/f5e5af6c-5e8e-11e5-a197-7054d244c94e
crw-r----- 1 root operator 0, 140 Sep 19 14:26 /dev/gptid/f5e5af6c-5e8e-11e5-a197-7054d244c94e
###デバイスができているので問題なし
디스크 스왑 명령을 실행합니다.
사용법zpool replaece {プール名} {zfs上の壊れたHDD} {zfs上の新しいHDD}
실행 예# zpool replaece tank 10284868363385756633 gptid/f5e5af6c-5e8e-11e5-a197-7054d244c94e
#
RAID 재구성 여부를 확인합니다.# zpool status
pool: tank
state: DEGRADED
(略)
config:
NAME STATE READ WRITE CKSUM
raidz2-0 DEGRADED 0 0 0
replacing-2 UNAVAIL 0 0 0
10284868363385756633 UNAVAIL 0 0 0 was /dev/gptid/46b7e268-9176-11e2-83a7-7054d244c94e
gptid/f5e5af6c-5e8e-11e5-a197-7054d244c94e ONLINE 0 0 0 (resilvering) # ←"resilvering"と出ていればOK
errors: No known data errors
#
이렇게 기다리면 재건은 끝나고, 작업은 끝이야.
덤
이번 작업을 통해 FreeNAS를 USB 메모리에 설치하면 HDD에 2GB의 swap 구역을 설치할 수 있다는 것을 처음 알게 되었다.swap이기 때문에 자유롭게 읽고 쓸 수 있는 넓은 영역이 필요하기 때문에 HDD를 선택하는 것이 당연하다는 점도 이번 학습이다.
WebGUI에 액세스하면/var/log/messages에서 다음 로그를 출력합니다.swap_pager: I/O error - pagein failed; blkno 75,size 45056, error 6
vm_fault: pager read error, pid 2054 (python)
이 내용에 근거하다
부팅 후 FreeNAS 서버에 로그인하여 파티션을 생성합니다.
또 원래 GPT를 사용하기 때문에 GPT 모드를 만든 후 파티션을 만든다.
### 以下からはrootで作業します
### GPTスキーマを作成する
# gpart create -s gpt ada1
ada1 created
### 確認
# gpart show ada1 # GPT化していることを確認
=> 34 3907029101 ada1 GPT (1.8T)
34 3907029101 - free - (1.8T)
전원이 꺼지기 전에 얻은 구역 정보를 사용하여 구역을 만듭니다.gpart에 구역을 만드는 방법
# gpart add -i {index番号} -t {ファイルシステムタイプ} -b {スタート位置} -s {サイズ} ada1
### -bオプションはfreebsd-swapのみで利用
파티션 생성 방법### 以下のようにパーティションを作る
# gpart show ada0
=> 34 3907029101 ada0 GPT (1.8T)
34 94 - free - (47k)
128 4194304 1 freebsd-swap (2.0G)
4194432 3902834696 2 freebsd-zfs (1.8T)
3907029128 7 - free - (3.5k)
### swap領域作成
# gpart add -i 1 -t freebsd-swap -b 128 -s 4194304 ada1
ada1p1 added
### zfs領域作成
# gpart add -i 2 -t freebsd-zfs -s 3902834696 ada1
ada1p2 added
### 作成したパーティション確認
# gpart show ada1
=> 34 3907029101 ada1 GPT (1.8T)
34 94 - free - (47k)
128 4194304 1 freebsd-swap (2.0G)
4194432 3902834696 2 freebsd-zfs (1.8T)
3907029128 7 - free - (3.5k)
### 他のディスクの情報
# gpart show ada0
=> 34 3907029101 ada0 GPT (1.8T)
34 94 - free - (47k)
128 4194304 1 freebsd-swap (2.0G)
4194432 3902834696 2 freebsd-zfs (1.8T)
3907029128 7 - free - (3.5k)
#
### ada1とada0で値が一致している!(問題なし)
rawuuid 값 확인 및 디스크 교환 명령 실행 # gpart list ada1
Geom name: ada1
modified: false
state: OK
fwheads: 16
fwsectors: 63
last: 3907029134
first: 34
entries: 128
scheme: GPT
Providers:
1. Name: ada1p1
(略)
rawuuid: 58e6ad2b-5e8e-11e5-a197-7054d244c94e # ←こっちはswapのなので無視
(略)
2. Name: ada1p2
(略)
rawuuid: f5e5af6c-5e8e-11e5-a197-7054d244c94e # ←こっちをメモ
(略)
#
방금 기록된rawuid 값을 이용하여 새 HDD의 zfs 영역의 문자 장치가 완성되었는지 확인하십시오.# ls -la /dev/gptid/f5e5af6c-5e8e-11e5-a197-7054d244c94e
crw-r----- 1 root operator 0, 140 Sep 19 14:26 /dev/gptid/f5e5af6c-5e8e-11e5-a197-7054d244c94e
###デバイスができているので問題なし
디스크 스왑 명령을 실행합니다.
사용법zpool replaece {プール名} {zfs上の壊れたHDD} {zfs上の新しいHDD}
실행 예# zpool replaece tank 10284868363385756633 gptid/f5e5af6c-5e8e-11e5-a197-7054d244c94e
#
RAID 재구성 여부를 확인합니다.# zpool status
pool: tank
state: DEGRADED
(略)
config:
NAME STATE READ WRITE CKSUM
raidz2-0 DEGRADED 0 0 0
replacing-2 UNAVAIL 0 0 0
10284868363385756633 UNAVAIL 0 0 0 was /dev/gptid/46b7e268-9176-11e2-83a7-7054d244c94e
gptid/f5e5af6c-5e8e-11e5-a197-7054d244c94e ONLINE 0 0 0 (resilvering) # ←"resilvering"と出ていればOK
errors: No known data errors
#
이렇게 기다리면 재건은 끝나고, 작업은 끝이야.
덤
이번 작업을 통해 FreeNAS를 USB 메모리에 설치하면 HDD에 2GB의 swap 구역을 설치할 수 있다는 것을 처음 알게 되었다.swap이기 때문에 자유롭게 읽고 쓸 수 있는 넓은 영역이 필요하기 때문에 HDD를 선택하는 것이 당연하다는 점도 이번 학습이다.
WebGUI에 액세스하면/var/log/messages에서 다음 로그를 출력합니다.swap_pager: I/O error - pagein failed; blkno 75,size 45056, error 6
vm_fault: pager read error, pid 2054 (python)
이 내용에 근거하다
# gpart list ada1
Geom name: ada1
modified: false
state: OK
fwheads: 16
fwsectors: 63
last: 3907029134
first: 34
entries: 128
scheme: GPT
Providers:
1. Name: ada1p1
(略)
rawuuid: 58e6ad2b-5e8e-11e5-a197-7054d244c94e # ←こっちはswapのなので無視
(略)
2. Name: ada1p2
(略)
rawuuid: f5e5af6c-5e8e-11e5-a197-7054d244c94e # ←こっちをメモ
(略)
#
# ls -la /dev/gptid/f5e5af6c-5e8e-11e5-a197-7054d244c94e
crw-r----- 1 root operator 0, 140 Sep 19 14:26 /dev/gptid/f5e5af6c-5e8e-11e5-a197-7054d244c94e
###デバイスができているので問題なし
zpool replaece {プール名} {zfs上の壊れたHDD} {zfs上の新しいHDD}
# zpool replaece tank 10284868363385756633 gptid/f5e5af6c-5e8e-11e5-a197-7054d244c94e
#
# zpool status
pool: tank
state: DEGRADED
(略)
config:
NAME STATE READ WRITE CKSUM
raidz2-0 DEGRADED 0 0 0
replacing-2 UNAVAIL 0 0 0
10284868363385756633 UNAVAIL 0 0 0 was /dev/gptid/46b7e268-9176-11e2-83a7-7054d244c94e
gptid/f5e5af6c-5e8e-11e5-a197-7054d244c94e ONLINE 0 0 0 (resilvering) # ←"resilvering"と出ていればOK
errors: No known data errors
#
이번 작업을 통해 FreeNAS를 USB 메모리에 설치하면 HDD에 2GB의 swap 구역을 설치할 수 있다는 것을 처음 알게 되었다.swap이기 때문에 자유롭게 읽고 쓸 수 있는 넓은 영역이 필요하기 때문에 HDD를 선택하는 것이 당연하다는 점도 이번 학습이다.
WebGUI에 액세스하면/var/log/messages에서 다음 로그를 출력합니다.
swap_pager: I/O error - pagein failed; blkno 75,size 45056, error 6
vm_fault: pager read error, pid 2054 (python)
이 내용에 근거하다USB 메모리에 FreeNAS의 OS를 추가하더라도 swap 분야는 HDD에 존재하고 이중화된 대상이 없는 것을 주의해야 한다.
횡설수설
이 페이지에는 전문 정비원에게 의뢰할 수 있다면 전문직에게 맡겨 해결해야 한다. 이런 사람은 본래 이 자료를 읽을 필요가 없다.
또 AWS나 SalesForce처럼 공공 클라우드만 아는 사람들이 앞으로 많아질 것이고, 그러면 머지않아 과거의 일이 되겠죠.
그 결과 HDD가 고장났을 때 이런 작업의 존재를 알게 된 IT 엔지니어는 앞으로 점점 줄어들겠지만, 파일 서버의 HDD 교체가 실패하면 최악의 데이터가 모두 사라지는 영향이 크다.그래서 수요가 적더라도 남을 돕기 위해 나는 잊지 않을 때 업무 기록을 필기로 정리했다.
잠꼬대
이번 작업의 NAS, HDD 케이스와 호스트에 붙인 번호는 왼쪽부터 0, 1, 2, 3이지만ada의 번호는 왼쪽부터 3, 2, 1, 0이 반대입니다(웃음)
액세스 램프가 꺼졌기 때문에 HDD의 오류를 배제할 가능성은 낮다고 생각하지만, HDD의 일련 번호를 제대로 확인하지 않으면 위험할 것 같다.
Reference
이 문제에 관하여(FreeNAS zfs 환경에서 HDD 교체 노트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/s5601026/items/3be091711a95d333d05c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번 작업의 NAS, HDD 케이스와 호스트에 붙인 번호는 왼쪽부터 0, 1, 2, 3이지만ada의 번호는 왼쪽부터 3, 2, 1, 0이 반대입니다(웃음)
액세스 램프가 꺼졌기 때문에 HDD의 오류를 배제할 가능성은 낮다고 생각하지만, HDD의 일련 번호를 제대로 확인하지 않으면 위험할 것 같다.
Reference
이 문제에 관하여(FreeNAS zfs 환경에서 HDD 교체 노트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/s5601026/items/3be091711a95d333d05c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)