読者です 読者をやめる 読者になる 読者になる

unsuitanの日記

パソコンの神様 公式ブログ!

zfs on Linux HDD交換

コンピュータ

zfs on LinuxでのHDD交換のメモです。

滅多にやる作業じゃ無いので忘れてしまうし、交換する度にググるのもイヤになってきたので、自分のところに書いておくだけ。

OSはCentOS6.6で、zfs on Linux使ってます。昔はこれ使ってると変態と罵られたんだけどなあ。

とりあえず今回はHDDが飛んだわけでもなく、2TB玉と3TB玉が混在してるので、3TB玉に揃えて容量アップを狙う作戦、の途中です。

というわけで交換前に状況確認。

(便宜上、HDDのシリアルはSERIAL00?に変更しています。そしてホスト名には突っ込まないこと)

[root@koromo ~]# zpool status
  pool: datapool01
 state: ONLINE
  scan: resilvered 1.35T in 15h35m with 0 errors on Fri May  8 02:16:26 2015
config:

    NAME                                     STATE     READ WRITE CKSUM
    datapool01                               ONLINE       0     0     0
      raidz1-0                               ONLINE       0     0     0
        ata-ST3000DM001-1CH166_SERIAL001      ONLINE       0     0     0
        ata-ST2000DM001-1CH164_SERIAL002      ONLINE       0     0     0
        ata-TOSHIBA_MD04ACA300_SERIAL003      ONLINE       0     0     0
        ata-ST2000DM001-1CH164_SERIAL004      ONLINE       0     0     0

errors: No known data errors

よく飛ぶことで有名らしいST3000DM001が含まれてますね。我が家では他にも何本かありますがまだ1本も飛んでおらず、ST2000DM001が先に1本先日飛びました。

どのメーカーのどの機種が良く飛ぶってのは人とか環境とかによりけりで、うちは何故かみんなが飛ばさないWDが割とよく飛んだり、みんなが火の玉を生成してたQuantumでも一回も燃やしてないんですよねw。

さて我が家ではpoolを作成するとき、デバイス番号(/dev/sd?)ではなく、id指定(/dev/disk/by-id)で指定しています。

なぜかというと、見ての通りHDDの機種名とシリアルで登録できるので、交換のときにとても便利だからです。ここはLinuxのいいところ。

さて今回は一番下の2TB玉(ata-ST2000DM001-1CH164_SERIAL004)を交換します。

特にエラーも何も吐いていないのですが、使用時間が1.6年手前なので、このままアニメ保存HDDに回したいと思います。


ちなみに余談ですが経験上、ファイルサーバで運用しててリプレースで引退させた、回転時間3年オーバーのものをアニメ保存HDDに回すと飛びやすいようです。そりゃ今まで四六時中ぶん回してたHDDを、気が向いたときにたまに回す運用に変えるとそうなるだろうなあ…

そういえば大昔に某H○STの中の人と話をする機会があって

「普通のデスクトップ向け7200rpmのHDD(御社の○eskstar)とニアライン向けSATA、どう違うんですか?」

って聞いたことがあるんですけど、まあそりゃパーツとか色々違うという普通の回答に混じってしれっと

「普通のデスクトップ向けって四六時中回し続けると、プラッタの表面に薄く塗ってあるグリスが遠心力で偏るんですよね

というオモシロ話を教えてくれたのを思い出しました。


話がそれたので、軌道修正してzfs on LinuxでのHDD入れ替え手順です。

1. 該当HDDをofflineにする。

書式は zpool offline [pool名] [HDDのデバイス名] です。

[root@koromo ~]# zpool offline datapool01 ata-ST2000DM001-1CH164_SERIAL004

確認します。

[root@koromo ~]# zpool status
  pool: datapool01
 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.35T in 15h35m with 0 errors on Fri May  8 02:16:26 2015
config:

    NAME                                     STATE     READ WRITE CKSUM
    datapool01                               DEGRADED     0     0     0
      raidz1-0                               DEGRADED     0     0     0
        ata-ST3000DM001-1CH166_SERIAL001      ONLINE       0     0     0
        ata-ST2000DM001-1CH164_SERIAL002      ONLINE       0     0     0
        ata-TOSHIBA_MD04ACA300_SERIAL003       ONLINE       0     0     0
        ata-ST2000DM001-1CH164_SERIAL004      OFFLINE      0     0     0

errors: No known data errors

ここできちんと、OFFLINEになっているHDDの型番やシリアルをメモしましょう。これを見て、実際に交換するHDDを見分けます。


2. poolをexportしてサーバをshutdown

念のためpoolをexportしてからshutdownしましょう。

[root@koromo ~]# zpool export datapool01
[root@koromo ~]# 
[root@koromo ~]# zpool status
no pools available
[root@koromo ~]# 
[root@koromo ~]# shutdown -h now

3. HDDを交換して電源を入れる

サーバの電源が落ちているのを確認し、HDDを交換します。

このとき、新しいHDDの機種名とシリアルをメモしておきましょう。これは後ほど登録で必要だから。

我が家のはサーバと言いつつ以下の画像みたいな単なる自作PCですが、HDDが複数あるとシリアルで判別できるのはとてもありがたいです。ラックマウントサーバみたいにマウンタが装着されてて、壊れたHDDのLEDを点灯させてくれる機能なんてないわけですから。

f:id:unsuitan:20150719143755j:plain

交換したら、電源を入れます。


4. OSが起動したら、poolをimportする

状況によりけりですが、うちのzfsは何故かautomountしてくれないので。

[root@koromo ~]# zpool import datapool01
[root@koromo ~]# 
[root@koromo ~]# zpool status
  pool: datapool01
 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.35T in 15h35m with 0 errors on Fri May  8 02:16:26 2015
config:

    NAME                                     STATE     READ WRITE CKSUM
    datapool01                               DEGRADED     0     0     0
      raidz1-0                               DEGRADED     0     0     0
        ata-ST3000DM001-1CH166_SERIAL001      ONLINE       0     0     0
        ata-ST2000DM001-1CH164_SERIAL002      ONLINE       0     0     0
        ata-TOSHIBA_MD04ACA300_SERIAL003       ONLINE       0     0     0
        ata-ST2000DM001-1CH164_SERIAL004      OFFLINE      0     0     0

errors: No known data errors

まだ前のHDDの情報が残ったままでOFFLINEです。


5. OFFLINE状態のHDDをONLINEにする。

replaceするためにONLINEに戻してさしあげます。

[root@koromo ~]# zpool online datapool01 ata-ST2000DM001-1CH164_SERIAL004
warning: device 'ata-ST2000DM001-1CH164_SERIAL004' onlined, but remains in faulted state
use 'zpool replace' to replace devices that are no longer present
[root@koromo ~]# 
[root@koromo ~]# zpool status
  pool: datapool01
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
    invalid.  Sufficient replicas exist for the pool to continue
    functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: resilvered 1.35T in 15h35m with 0 errors on Fri May  8 02:16:26 2015
config:

    NAME                                     STATE     READ WRITE CKSUM
    datapool01                               DEGRADED     0     0     0
      raidz1-0                               DEGRADED     0     0     0
        ata-ST3000DM001-1CH166_SERIAL001      ONLINE       0     0     0
        ata-ST2000DM001-1CH164_SERIAL002      ONLINE       0     0     0
        ata-TOSHIBA_MD04ACA300_SERIAL003       ONLINE       0     0     0
        ata-ST2000DM001-1CH164_SERIAL004      UNAVAIL      0     0     0

errors: No known data errors

該当HDDがUNAVAILになってますが、すでにサーバ上に存在してませんのでOKです。


6. 新しいHDDのIDを確認する。

/dev/disk/by-id の下をlsで確認します。今回の新HDDは東芝のMD04ACA300です。また交換時にシリアルもメモしてると思いますので、それと合わせて確認しましょう。

[root@koromo ~]# ls -l /dev/disk/by-id/ata-TOSHIBA_MD04ACA300_*
lrwxrwxrwx 1 root root  9  7月 19 13:44 2015 /dev/disk/by-id/ata-TOSHIBA_MD04ACA300_SERIAL003 -> ../../sde
lrwxrwxrwx 1 root root 10  7月 19 13:44 2015 /dev/disk/by-id/ata-TOSHIBA_MD04ACA300_SERIAL003-part1 -> ../../sde1
lrwxrwxrwx 1 root root 10  7月 19 13:44 2015 /dev/disk/by-id/ata-TOSHIBA_MD04ACA300_SERIAL003-part9 -> ../../sde9
lrwxrwxrwx 1 root root  9  7月 19 13:49 2015 /dev/disk/by-id/ata-TOSHIBA_MD04ACA300_SERIAL005 -> ../../sdd

今回の新しいHDDは「ata-TOSHIBA_MD04ACA300_SERIAL005」です。


7. HDDをreplaceする

俗に言うリビルド的なヤツ。

書式は zpool replace [pool名] [古いHDDのデバイス名] [新しいHDDのデバイス名] です。フルパスで入力する必要はありません。

[root@koromo ~]# zpool replace datapool01 ata-ST2000DM001-1CH164_SERIAL004 ata-TOSHIBA_MD04ACA300_SERIAL005

特に何も言われなければreplaceが走ってますので確認します。

[root@koromo ~]# zpool status
  pool: datapool01
 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 Sun Jul 19 13:49:55 2015
    353M scanned out of 5.09T at 35.3M/s, 42h1m to go
    61.5M resilvered, 0.01% done
config:

    NAME                                       STATE     READ WRITE CKSUM
    datapool01                                 DEGRADED     0     0     0
      raidz1-0                                 DEGRADED     0     0     0
        ata-ST3000DM001-1CH166_SERIAL001        ONLINE       0     0     0
        ata-ST2000DM001-1CH164_SERIAL002        ONLINE       0     0     0
        ata-TOSHIBA_MD04ACA300_SERIAL003         ONLINE       0     0     0
        replacing-3                            UNAVAIL      0     0     0
          ata-ST2000DM001-1CH164_SERIAL004      UNAVAIL      0     0     0
          ata-TOSHIBA_MD04ACA300_SERIAL005      ONLINE       0     0     0  (resilvering)

errors: No known data errors

42時間、がんばれ♡がんばれ♡

と思ったら21時間で終わったようでした。 終わるとこんな感じで表示されます。

[root@koromo ~]# zpool status
  pool: datapool01
 state: ONLINE
  scan: resilvered 1.21T in 21h0m with 0 errors on Mon Jul 20 10:50:41 2015
config:

    NAME                                     STATE     READ WRITE CKSUM
    datapool01                               ONLINE       0     0     0
      raidz1-0                               ONLINE       0     0     0
        ata-ST3000DM001-1CH166_SERIAL001      ONLINE       0     0     0
        ata-ST2000DM001-1CH164_SERIAL001      ONLINE       0     0     0
        ata-TOSHIBA_MD04ACA300_SERIAL003      ONLINE       0     0     0
        ata-TOSHIBA_MD04ACA300_SERIAL005  ONLINE       0     0     0

errors: No known data errors

念のため整合性チェックしておきます。

[root@koromo ~]# zpool scrub datapool01
[root@koromo ~]# 
[root@koromo ~]# zpool status
  pool: datapool01
 state: ONLINE
  scan: scrub repaired 0 in 7h40m with 0 errors on Tue Jul 21 04:48:10 2015
config:

    NAME                                     STATE     READ WRITE CKSUM
    datapool01                               ONLINE       0     0     0
      raidz1-0                               ONLINE       0     0     0
        ata-ST3000DM001-1CH166_SERIAL001      ONLINE       0     0     0
        ata-ST2000DM001-1CH164_SERIAL002      ONLINE       0     0     0
        ata-TOSHIBA_MD04ACA300_SERIAL003       ONLINE       0     0     0
        ata-TOSHIBA_MD04ACA300_SERIAL005       ONLINE       0     0     0

errors: No known data errors

特に問題無いようです。

という感じでHDD交換やってください。