毎回毎回GPD WINのネタばかりでもあれなんで、たまには自作の話でも。
OpenZFS on OS Xを導入しているosx86機でHDDを交換する話を備忘録がてら記録しておこうと思います。
あらまし
元々3TB x2のミラープールを構成していたのですが、残300GB程度とヤバい感じになってきたので4TB x2に増設することに。
今回の使用HDDはWD Blue EZRZ。要するに旧WD Greenです。正直なところ、低速病でゴミになったHDDが大量に出たりとWD Greenには良い思い出がなく、最近はSeagateとHGSTしか買ってなかったんですが、色々あって自分で選べなかったためWDになりました。
準備
まずはscrubかけて破損データを(あったら)綺麗にします。
# zpool scrub r1pool # zpool status pool: r1pool state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details. scan: scrub repaired 0 in 14h0m with 0 errors on Mon Jul 11 00:45:12 2016 config: NAME STATE READ WRITE CKSUM r1pool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 media-290F1E0F-DB69-45F9-B529-07CAB716236B ONLINE 0 0 0 media-D64856C8-D347-4F5E-8177-9EA3DE626836 ONLINE 0 0 0 errors: No known data errors14時間かかりましたがノーエラーでした。zpoolが古いとか言われていますが気にしない。
次にOpenZFS on OS Xを最新版(執筆時1.5.2)にアップデートしておきます。
交換
通常だと、
- ミラープールをsplitして単騎x2に変更
- HDDを片方取り外し、新HDDに換装
- 残った単騎に新HDDをattach
- resilver完了したら残った単騎をdetach
- 残ったHDDを取り外し、2つ目の新HDDに換装
- 2つ目の新HDDをattach
今回の対象PCは通常の自作デスクトップPC(Z97M GAMING)でSSD1台とHDD2台の3ポートしか使っておらず、SATAポートに余裕があるので一時的にHDDを増設する形でresilverを行うことにしました。
つまり、
- 新HDDを2台一気に接続
- 新HDDをミラープールに2台連続でattach
- resilver完了で4方向ミラーが完成
- 旧HDDを2台連続でdetachして2方向ミラーに戻す
というわけで作業開始です。新HDDを接続した状態のdiskutilは
$ diskutil list /dev/disk0 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *512.1 GB disk0 1: EFI EFI 209.7 MB disk0s1 2: Apple_HFS Macintosh SSD 250.0 GB disk0s2 3: Microsoft Reserved 134.2 MB disk0s3 4: Microsoft Basic Data Windows 8.1 255.7 GB disk0s4 /dev/disk1 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *3.0 TB disk1 1: ZFS 3.0 TB disk1s1 /dev/disk2 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *3.0 TB disk2 1: EFI EFI 209.7 MB disk2s1 2: ZFS 3.0 TB disk2s2 /dev/disk3 #: TYPE NAME SIZE IDENTIFIER 0: *4.0 TB disk3 /dev/disk4 #: TYPE NAME SIZE IDENTIFIER 0: *4.0 TB disk4 /dev/disk5 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *536.9 GB disk5 1: EFI EFI 209.7 MB disk5s1 2: Apple_HFS TimeMachine 536.5 GB disk5s2のようになっています。旧HDDによるZFSプールがdisk1/2、新HDDがdisk3/4です。disk1/2でパーティションテーブルが異なっているのはご愛敬。diks0はSSD、disk5はTimeMachine用にZFSプールから切り出したzvolなので実ディスクではありません。
早速disk3をattach。ちなみに私はズボラなので新しく買ってきたHDDのゼロフィルとかはやりません。どうせリビルド時点で3TB近く埋めることになるし、あとはZFSがなんとかしてくれるだろの精神(盲信)。
# zpool attach r1pool media-D64856C8-D347-4F5E-8177-9EA3DE626836 /dev/disk3 # zpool status pool: r1pool state: ONLINE 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 Sun Jul 17 13:20:40 2016 17.8M scanned out of 2.36T at 1.62M/s, 424h41m to go 17.8M resilvered, 0.00% done config: NAME STATE READ WRITE CKSUM r1pool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 media-290F1E0F-DB69-45F9-B529-07CAB716236B ONLINE 0 0 0 media-D64856C8-D347-4F5E-8177-9EA3DE626836 ONLINE 0 0 0 disk3 ONLINE 0 0 0 (resilvering) errors: No known data errorsresilverが始まりました。
このままdisk3のresilver完了を待たずdisk4を投入します。
# zpool attach r1pool /dev/disk3 /dev/disk4 # zpool status pool: r1pool state: ONLINE 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 Sun Jul 17 13:21:34 2016 18.3M scanned out of 2.36T at 1.53M/s, 450h33m to go 36.3M resilvered, 0.00% done config: NAME STATE READ WRITE CKSUM r1pool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 media-290F1E0F-DB69-45F9-B529-07CAB716236B ONLINE 0 0 0 media-D64856C8-D347-4F5E-8177-9EA3DE626836 ONLINE 0 0 0 disk3 ONLINE 0 0 0 (resilvering) disk4 ONLINE 0 0 0 (resilvering) errors: No known data errors特に問題なくresilverが始まりました。
数分待ってから状況を確認してみると、
# zpool status pool: r1pool state: ONLINE 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 Sun Jul 17 13:21:34 2016 45.7M scanned out of 2.36T at 699K/s, (scan is slow, no estimated time) 91.0M resilvered, 0.00% done config: NAME STATE READ WRITE CKSUM r1pool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 media-290F1E0F-DB69-45F9-B529-07CAB716236B ONLINE 0 0 0 media-D64856C8-D347-4F5E-8177-9EA3DE626836 ONLINE 0 0 0 disk3 ONLINE 0 0 0 (resilvering) disk4 ONLINE 0 0 0 (resilvering) errors: No known data errors699K/s!?1ヶ月経っても終わらんぞ!?と焦りましたが、昼ご飯を食べて戻ってきたら
# zpool status pool: r1pool state: ONLINE 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 Sun Jul 17 13:21:34 2016 224G scanned out of 2.36T at 63.2M/s, 9h51m to go 449G resilvered, 9.29% done config: NAME STATE READ WRITE CKSUM r1pool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 media-290F1E0F-DB69-45F9-B529-07CAB716236B ONLINE 0 0 0 media-D64856C8-D347-4F5E-8177-9EA3DE626836 ONLINE 0 0 0 disk3 ONLINE 0 0 0 (resilvering) disk4 ONLINE 0 0 0 (resilvering) errors: No known data errorsまともな速度になっていました。
この時点でのdiskutilはこんな感じです。
$ diskutil list /dev/disk0 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *512.1 GB disk0 1: EFI EFI 209.7 MB disk0s1 2: Apple_HFS Macintosh SSD 250.0 GB disk0s2 3: Microsoft Reserved 134.2 MB disk0s3 4: Microsoft Basic Data Windows 8.1 255.7 GB disk0s4 /dev/disk1 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *3.0 TB disk1 1: ZFS 3.0 TB disk1s1 /dev/disk2 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *3.0 TB disk2 1: EFI EFI 209.7 MB disk2s1 2: ZFS 3.0 TB disk2s2 /dev/disk3 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *4.0 TB disk3 1: ZFS 4.0 TB disk3s1 2: 6A945A3B-1DD2-11B2-99A6-080020736631 8.4 MB disk3s9 /dev/disk4 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *4.0 TB disk4 1: ZFS 4.0 TB disk4s1 2: 6A945A3B-1DD2-11B2-99A6-080020736631 8.4 MB disk4s9 /dev/disk5 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *536.9 GB disk5 1: EFI EFI 209.7 MB disk5s1 2: Apple_HFS TimeMachine 536.5 GB disk5s2ざっと13時間ほど待つと、resilverが完了します。
# zpool status pool: r1pool state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details. scan: resilvered 4.72T in 12h51m with 0 errors on Mon Jul 18 02:12:44 2016 config: NAME STATE READ WRITE CKSUM r1pool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 media-290F1E0F-DB69-45F9-B529-07CAB716236B ONLINE 0 0 0 media-D64856C8-D347-4F5E-8177-9EA3DE626836 ONLINE 0 0 0 disk3 ONLINE 0 0 0 disk4 ONLINE 0 0 0 errors: No known data errorsそして旧HDDをdetach。
# zpool detach r1pool media-290F1E0F-DB69-45F9-B529-07CAB716236B # zpool detach r1pool media-D64856C8-D347-4F5E-8177-9EA3DE626836 # zpool status pool: r1pool state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details. scan: resilvered 4.72T in 12h51m with 0 errors on Mon Jul 18 02:12:44 2016 config: NAME STATE READ WRITE CKSUM r1pool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 disk3 ONLINE 0 0 0 disk4 ONLINE 0 0 0 errors: No known data errorsここで一旦シャットダウンし、旧HDDを取り外します。
再起動すると、UUIDで自動importしてくれます。
# zpool status pool: r1pool state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details. scan: resilvered 4.72T in 12h51m with 0 errors on Mon Jul 18 02:12:44 2016 config: NAME STATE READ WRITE CKSUM r1pool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 media-B624951E-2A6F-D140-A14B-9872B000E17F ONLINE 0 0 0 media-6AFBF18C-319A-E04A-BB37-FEBF9BB7C85B ONLINE 0 0 0 errors: No known data errors交換作業はこれで無事完了です。
拡張
さて、このプールはautoexpandをonにしていないのでこのままでは容量が拡張されません。
# zpool get autoexpand r1pool NAME PROPERTY VALUE SOURCE r1pool autoexpand off default # zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT r1pool 2.73T 2.36T 378G 932G - 86% 1.00x ONLINE -EXPANDSZで932G拡張可能なのがわかります。って以前交換したときはこんなの出てたっけ・・・
online -eで手動expandします。
# zpool online -e r1pool media-B624951E-2A6F-D140-A14B-9872B000E17F cannot expand media-B624951E-2A6F-D140-A14B-9872B000E17F: cannot relabel '/private/var/run/disk/by-id/media-B624951E-2A6F-D140-A14B-9872B000E17F': unable to read disk capacityできない!マジか。
# ls -l /private/var/run/disk/by-id/media-B624951E-2A6F-D140-A14B-9872B000E17F lrwxr-xr-x 1 root daemon 12 7 18 02:39 /private/var/run/disk/by-id/media-B624951E-2A6F-D140-A14B-9872B000E17F -> /dev/disk1s1ちゃんと?実パーティションを指してるんだけど何がマズいんですかね?
実ディスクを指定して再importしてみます。ちなみにexportは2回叩かないと失敗する。
# zpool export r1pool # zpool export r1pool # zpool status no pools available # zpool import -d /dev r1pool # zpool status pool: r1pool state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details. scan: resilvered 4.72T in 12h51m with 0 errors on Mon Jul 18 02:12:44 2016 config: NAME STATE READ WRITE CKSUM r1pool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 disk1 ONLINE 0 0 0 disk2 ONLINE 0 0 0 errors: No known data errorsこの状態でonline -eをかけると(一台だけで大丈夫)、
# zpool online -e r1pool /dev/disk1 # zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT r1pool 3.64T 2.36T 1.28T - - 64% 1.00x ONLINE -見事拡張に成功した。ディスク(disk1)じゃなくパーティション(disk1s1)を指してたのが良くなかったのかな・・・?
もう1回importしなおし。
# zpool export r1pool # zpool export r1pool # zpool import r1pool # zpool status pool: r1pool state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details. scan: resilvered 4.72T in 12h51m with 0 errors on Mon Jul 18 02:12:44 2016 config: NAME STATE READ WRITE CKSUM r1pool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 media-B624951E-2A6F-D140-A14B-9872B000E17F ONLINE 0 0 0 media-6AFBF18C-319A-E04A-BB37-FEBF9BB7C85B ONLINE 0 0 0 errors: No known data errorsめでたしめでたし。
まとめ
以上、ZFSミラープールの容量アップ作業ログでした。
RAID-Zなどと違って、ミラー構成は2台一気に換装できるので早く終わっていいですね。終わってみればscrubより1時間速かったというのは笑えます。
また、今回初めてLinuxなどを利用せずOpenZFS on OS Xのみで換装作業を行いましたが、expand時に一手間あったものの無事作業完了させることができました。
正直なところHDDを複数台積めるosx86機以外で使い道に乏しいO3Xですが、osx86機では(少なくともApple純正ソフトRAIDより)ド安定・lz4圧縮によりTimeMachineとの相性も抜群なのでかなりオススメできる状態になっているんじゃないかなと思います。APFS?知らん。
0 件のコメント:
コメントを投稿