はじめに
- 本ナレッジでは TrueNAS を使って構築されている NAS の HDD を交換する手順を解説する。
- 交換手順は、すべての基本となる CLI コマンドを使うことを前提とする。
- 管理コンソールの UI を使ってお手軽に交換する手順もきっとあると思うが、ここは基本で。
- 本文内に時々“FreeNAS”や“freenas”という記述が現れるが、これは、TrueNAS の前身の FreeNAS からシステムをアップグレードした際の名残が残っているものである。
- 今回は ada2 (ATA Direct Access デバイス 2) を交換する例を示す。
TrueNAS のシステムを運用していく上での重要なポイント
① HDD の故障の検知
- ストレージ、特に HDD はいつかは壊れるものである。TrueNAS はソフトウェア RAID を構成しているので HDD が1台故障したくらいではビクともしないが、それでも複数台が同時に故障すると復旧できない可能性があるので、HDD の故障を検知したらすぐに交換した方がいい。
メールによるレポート
- TrueNAS からのレポートを E メールで受け取るように設定してある場合は、HDD が故障する予兆がメールで送られてくる。
- 例えば以下のようなメールが送られてきたら、ここでレポートされている /dev/ada2 は危険な状態だと思った方がいい。
不良セクタ (読めないセクタ) の発見
TrueNAS @ truenas.koba.jp
New alerts:
* Device: /dev/ada2, 12 Currently unreadable (pending) sectors.
Current alerts:
* Device: /dev/ada2, 12 Currently unreadable (pending) sectors.
セルフテストの失敗
TrueNAS @ truenas.koba.jp
New alerts:
* Device: /dev/ada2, new Self-Test Log error at hour timestamp 28499.
Current alerts:
* Device: /dev/ada2, new Self-Test Log error at hour timestamp 28499.
S.M.A.R.T. 情報の確認
kernel ログの確認
- /var/log/messages や
dmesg
コマンドの実行結果に「ada数字」を含むログが大量に出力されている場合は、本体のマザーボードと HDD との接続不良、もしくは電源の容量不足が考えられる。 - キーワード:“Periph destroyed”、“WRITE_FPDMA_QUEUED”、“CAM status: Uncorrectable parity/CRC error”、“Retrying command”など。
zpool status の確認
zpool status
を実行した結果に DEGRADED という単語が表示される場合は HDD の故障が検知されている。- S.M.A.R.T. 情報にエラーが出ているレベルでは
zpool status
に異常が報告されることはなく、何も問題なく普通に使えてしまう。ただ、特に何もしていないのにここで DEGRADED が報告される場合は、ハードウェアに致命的なエラーが発生している。
OFFLINE の例
pool: tank
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scan: scrub repaired 1012K in 0 days 07:41:57 with 0 errors on Sun Nov 1 07:42:00 2020
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz1-0 ONLINE 0 0 0
gptid/fb4719b4-7b72-11e8-b5ba-6045cba529aa ONLINE 0 0 0
gptid/9d5dcf29-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
gptid/9e35641b-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
gptid/9f1248e1-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
raidz1-1 DEGRADED 0 0 0
gptid/41101340-7b89-11e8-9aa5-6045cba529aa ONLINE 0 0 0
gptid/a142856a-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
10902394484659602262 OFFLINE 0 0 0 was /dev/gptid/a21d029e-23a0-11e8-8570-6045cba529aa
gptid/a3056122-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
errors: No known data errors
- 上記の例では、“raidz1-1”の“/dev/gptid/a21d029e-23a0-11e8-8570-6045cba529aa”が自動的に OFFLINE になり、“ 10902394484659602262”という NAME がついている。
REMOVED の例
# zpool status
:
pool: tank
state: DEGRADED
status: One or more devices has been removed by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using zpool online' or replace the device with
'zpool replace'.
scan: resilvered 8.24M in 00:00:03 with 0 errors on Mon Nov 9 02:10:28 2020
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz1-0 ONLINE 0 0 0
gptid/fb4719b4-7b72-11e8-b5ba-6045cba529aa ONLINE 0 0 0
gptid/9d5dcf29-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
gptid/9e35641b-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
gptid/9f1248e1-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
raidz1-1 DEGRADED 0 0 0
gptid/41101340-7b89-11e8-9aa5-6045cba529aa ONLINE 0 0 0
gptid/a142856a-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
gptid/e6523a43-2151-11eb-b673-6045cba529aa ONLINE 0 0 0
gptid/a3056122-23a0-11e8-8570-6045cba529aa REMOVED 0 0 0
errors: No known data errors
- 上記の例では、ハードウェアレベルの kernel ログが大量に報告されていた“raidz1-1”の“gptid/a3056122-23a0-11e8-8570-6045cba529aa”が、ついに REMOVED にされている。
② 現状を確認する
- HDD の故障を検知して ada2 が何かおかしいと判明したら、すぐに現状を確認する。
zpool status の結果を見る
# zpool status
:
pool: tank
state: ONLINE
scan: resilvered 1.54T in 05:25:18 with 0 errors on Tue Nov 24 09:06:10 2020
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
gptid/fb4719b4-7b72-11e8-b5ba-6045cba529aa ONLINE 0 0 0
gptid/9d5dcf29-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
gptid/9e35641b-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
gptid/9f1248e1-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
raidz1-1 ONLINE 0 0 0
gptid/41101340-7b89-11e8-9aa5-6045cba529aa ONLINE 0 0 0
gptid/a142856a-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
gptid/e6523a43-2151-11eb-b673-6045cba529aa ONLINE 0 0 0
gptid/9d8b4877-2d3c-11eb-9995-6045cba529aa ONLINE 0 0 0
errors: No known data errors
- 今回は、
zpool status
的には特に何も問題は報告されていない。
GPT ディスクラベルを確認する
- HDD を交換する場合、最終的には
zpool
コマンドを使って HDD のリプレースを指示するのだが、TrueNAS の zpool
コマンドは GPT (GUID パーティションテーブル) を使ってストレージを判別しているので、問題の ada2 の GPT ディスクラベルを確認する必要がある。
# gpart list
:
Geom name: ada2
modified: false
state: OK
fwheads: 16
fwsectors: 63
last: 5860533127
first: 40
entries: 128
scheme: GPT
Providers:
1. Name: ada2p1
Mediasize: 2147483648 (2.0G)
Sectorsize: 512
Stripesize: 4096
Stripeoffset: 0
Mode: r1w1e1
efimedia: HD(1,GPT,9e1ebf5f-23a0-11e8-8570-6045cba529aa,0x80,0x400000)
rawuuid: 9e1ebf5f-23a0-11e8-8570-6045cba529aa
rawtype: 516e7cb5-6ecf-11d6-8ff8-00022d09712b
label: (null)
length: 2147483648
offset: 65536
type: freebsd-swap
index: 1
end: 4194431
start: 128
2. Name: ada2p2
Mediasize: 2998445408256 (2.7T)
Sectorsize: 512
Stripesize: 4096
Stripeoffset: 0
Mode: r1w1e2
efimedia: HD(2,GPT,9e35641b-23a0-11e8-8570-6045cba529aa,0x400080,0x15d10a300)
rawuuid: 9e35641b-23a0-11e8-8570-6045cba529aa
rawtype: 516e7cba-6ecf-11d6-8ff8-00022d09712b
label: (null)
length: 2998445408256
offset: 2147549184
type: freebsd-zfs
index: 2
end: 5860533119
start: 4194432
Consumers:
1. Name: ada2
Mediasize: 3000592982016 (2.7T)
Sectorsize: 512
Stripesize: 4096
Stripeoffset: 0
Mode: r2w2e5
- ada2 の“type: freebsd-zfs”の“ rawuuid”が今回知りたい GPT ディスクラベルになる。ここでは“2. Name: ada2p2”の“rawuuid: 9e35641b-23a0-11e8-8570-6045cba529aa”、すなわち
zpool status
の出力結果の“raidz1-0”の“gptid/9e35641b-23a0-11e8-8570-6045cba529aa”が ada2 の GPT ディスクラベルだということになる。
S.M.A.R.T. のエラーを確認する
# smartctl -a /dev/ada2
:
=== START OF INFORMATION SECTION ===
Model Family: Western Digital Blue
Device Model: WDC WD30EZRZ-22Z5HB0
Serial Number: WD-WCC4N7AZUD05
:
197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 13
198 Offline_Uncorrectable 0x0030 200 200 000 Old_age Offline - 0
:
- この例では、0 でなければならない 197 の値が 13 になっている。
GPT パーティションを確認する
③ 故障している HDD をオフラインにする
④ TrueNAS をシャットダウンする
# shutdown -p now
⑤ 故障した HDD を新しい HDD に換装する
- 新しい HDD を別の OS で使用したことがある場合はパーティション情報が書き込まれてしまっていたりするので、TrueNAS でうまく扱えない可能性がある。新品ではない HDD と交換する場合は、全セクタのデータの消去を実行しておくことを推奨する。
- HDD を換装したら TrueNAS を起動する。
⑥ 新しいディスクに GPT パーティションを作成する
GPT パーティション情報の確認
GPT パーティションの作成
- 交換後の ada2 の GPT バーティションを確認する。GPT パーティションを作成していないので、まだ何もないはず。
# gpart show ada2
gpart: No such geom: ada2.
- 交換した新しい HDD に GPT パーティションを作成する。
# gpart create -s gpt ada2
ada2 created
# gpart add -i 1 -t freebsd-swap -b 128 -s 4194304 ada2
ada2p1 added
# gpart add -i 2 -t freebsd-zfs -b 4194432 -s 5856338688 ada2
ada2p2 added
# gpart show ada2
=> 40 5860533088 ada6 GPT (2.7T)
40 88 - free - (44K)
128 4194304 1 freebsd-swap (2.0G)
4194432 5856338688 2 freebsd-zfs (2.7T)
5860533120 8 - free - (4.0K)
-i
オプションに指定する値はパーティション番号、 -t
オプションに指定する値はパーティションのタイプ、 -b
オプションに指定する値はパーティションの開始セクタ、-s
オプションに指定する値は確保したいセクタ数になる。これらの値は事前に調査した GPT パーティション情報をそのまま使う。
HDD の容量を増やしたい場合
- 今回は同一の容量である 3TB HDD に交換したが、このタイミングで 3TB から 4TB HDD に切り替えたい場合は、“freebsd-zfs”のタイプの GPT パーティションを作る時に
gpart add -i 2 -t freebsd-zfs ada2
と指定する。そうすると、残りの空き容量の全てが“freebsd-zfs”になる。 - 今回は 8台の HDD で RAID を構成しているので、8台全ての HDD が 3TB から 4TB に交換されないと NAS の容量は拡張されない。
⑦ 新しい HDD へのリプレース
交換した HDD の GPT ディスクラベルの確認
- まずは交換した ada2 の“freebsd-zfs”の“rawuuid”を確認する。
# gpart list
:
2. Name: ada2p2
Mediasize: 2998445408256 (2.7T)
Sectorsize: 512
Stripesize: 4096
Stripeoffset: 0
Mode: r0w0e0
efimedia: HD(2,GPT,bd29763e-3181-11eb-9359-6045cba529aa,0x400080,0x15d10a300)
rawuuid: bd29763e-3181-11eb-9359-6045cba529aa
rawtype: 516e7cba-6ecf-11d6-8ff8-00022d09712b
label: (null)
length: 2998445408256
offset: 2147549184
type: freebsd-zfs
index: 2
end: 5860533119
start: 4194432
:
- 以上の出力から、新しい ada2 の GPT ディスクラベルは“bd29763e-3181-11eb-9359-6045cba529aa”であることがわかる。
zpool status の確認
zpool status
を確認する。ステータスが DEGRADED となっていることがわかる。- ちなみに、本システムは HDD 8台の raidz1 の2系統 mirror 構成なので、個々の mirror のストレージがそれぞれ1台ずつ、すなわち1×2=2台が同時に死んでもファイルシステムは DEGRADED 状態のまま普通に利用できる。
- 試したことはないが、mirror の片側の HDD 4台が全滅し、もう片方の mirror の HDD が更に1台故障しても、この NAS は問題なく動き続けるかもしれない。
# zpool status
pool: freenas-boot
state: ONLINE
scan: scrub repaired 0B in 00:17:34 with 0 errors on Tue Nov 24 04:02:34 2020
config:
NAME STATE READ WRITE CKSUM
freenas-boot ONLINE 0 0 0
da0p2 ONLINE 0 0 0
errors: No known data errors
pool: tank
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scan: resilvered 1.54T in 05:25:18 with 0 errors on Tue Nov 24 09:06:10 2020
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
gptid/fb4719b4-7b72-11e8-b5ba-6045cba529aa ONLINE 0 0 0
gptid/9d5dcf29-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
gptid/9e35641b-23a0-11e8-8570-6045cba529aa OFFLINE 0 0 0
gptid/9f1248e1-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
raidz1-1 ONLINE 0 0 0
gptid/41101340-7b89-11e8-9aa5-6045cba529aa ONLINE 0 0 0
gptid/a142856a-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
gptid/e6523a43-2151-11eb-b673-6045cba529aa ONLINE 0 0 0
gptid/9d8b4877-2d3c-11eb-9995-6045cba529aa ONLINE 0 0 0
errors: No known data errors
“was /dev/gptid/GPTディスクラベル”と表示されている場合は…
# zpool status
pool: freenas-boot
state: ONLINE
scan: scrub repaired 0 in 0 days 00:22:04 with 0 errors on Tue Nov 3 04:07:04 2020
config:
NAME STATE READ WRITE CKSUM
freenas-boot ONLINE 0 0 0
da0p2 ONLINE 0 0 0
errors: No known data errors
pool: tank
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scan: scrub repaired 1012K in 0 days 07:41:57 with 0 errors on Sun Nov 1 07:42:00 2020
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz1-0 ONLINE 0 0 0
gptid/fb4719b4-7b72-11e8-b5ba-6045cba529aa ONLINE 0 0 0
gptid/9d5dcf29-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
gptid/9e35641b-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
gptid/9f1248e1-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
raidz1-1 DEGRADED 0 0 0
gptid/41101340-7b89-11e8-9aa5-6045cba529aa ONLINE 0 0 0
gptid/a142856a-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
10902394484659602262 OFFLINE 0 0 0 was /dev/gptid/a21d029e-23a0-11e8-8570-6045cba529aa
gptid/a3056122-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
errors: No known data errors
⑧ リプレースの進行状況の確認
# zpool status
pool: freenas-boot
state: ONLINE
scan: scrub repaired 0B in 00:17:34 with 0 errors on Tue Nov 24 04:02:34 2020
config:
NAME STATE READ WRITE CKSUM
freenas-boot ONLINE 0 0 0
da0p2 ONLINE 0 0 0
errors: No known data errors
pool: tank
state: DEGRADED
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Sat Nov 28 23:08:37 2020
3.97T scanned at 22.7G/s, 1.92T issued at 11.0G/s, 13.7T total
394M resilvered, 13.96% done, 00:18:23 to go
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
gptid/fb4719b4-7b72-11e8-b5ba-6045cba529aa ONLINE 0 0 0
gptid/9d5dcf29-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
replacing-2 DEGRADED 0 0 0
gptid/9e35641b-23a0-11e8-8570-6045cba529aa OFFLINE 0 0 0
gptid/bd29763e-3181-11eb-9359-6045cba529aa ONLINE 0 0 0 (resilvering)
gptid/9f1248e1-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
raidz1-1 ONLINE 0 0 0
gptid/41101340-7b89-11e8-9aa5-6045cba529aa ONLINE 0 0 0
gptid/a142856a-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
gptid/e6523a43-2151-11eb-b673-6045cba529aa ONLINE 0 0 0
gptid/9d8b4877-2d3c-11eb-9995-6045cba529aa ONLINE 0 0 0
errors: No known data errors
- 現在 13.96% done で、完了までに 00:18:23 to go と表示されている。
⇒ 実際は、5時間21分27秒かかった。 - ちなみに、リプレース中もファイルシステムは普通に利用できる。
⑨ リプレース完了の確認
zpool status
を実行する。DEGRADED の表示がなければ、リプレースは完了している。
# zpool status
pool: freenas-boot
state: ONLINE
scan: scrub repaired 0B in 00:17:34 with 0 errors on Tue Nov 24 04:02:34 2020
config:
NAME STATE READ WRITE CKSUM
freenas-boot ONLINE 0 0 0
da0p2 ONLINE 0 0 0
errors: No known data errors
pool: tank
state: ONLINE
scan: resilvered 1.83T in 06:12:50 with 0 errors on Sun Nov 29 05:21:27 2020
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
gptid/fb4719b4-7b72-11e8-b5ba-6045cba529aa ONLINE 0 0 0
gptid/9d5dcf29-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
gptid/bd29763e-3181-11eb-9359-6045cba529aa ONLINE 0 0 0
gptid/9f1248e1-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
raidz1-1 ONLINE 0 0 0
gptid/41101340-7b89-11e8-9aa5-6045cba529aa ONLINE 0 0 0
gptid/a142856a-23a0-11e8-8570-6045cba529aa ONLINE 0 0 0
gptid/e6523a43-2151-11eb-b673-6045cba529aa ONLINE 0 0 0
gptid/9d8b4877-2d3c-11eb-9995-6045cba529aa ONLINE 0 0 0
errors: No known data errors
# zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
freenas-boot 28.8G 18.8G 9.94G - - 24% 65% 1.00x ONLINE -
tank 21.8T 13.7T 8.02T - - 2% 63% 1.00x ONLINE /mnt