delete from hateblo.jp where 1=1;

タイトルに意味はありません。

弾をすべて敵に叩き込む

はじめに

対象
  • やってしまった人
  • zfs storage で増設を考えている方
やっちまった

zfsもlvm2と同じで物理追加して、退避すればいけるだろうと思っていました。
しかし、zfsは構造上raid0になるので、追加した領域はそのまま保持しなくてはいけないようです。

つまり、zfsはpoolを追加したら破棄するまで減らすことができない。

※誤りがあったら教えてください

現状説明

初期状態として、sdc1,sdd1が破損して、縮退モードとなっていた。

$ sudo zpool status
NAME                                    STATE     READ WRITE CKSUM
storage                                 DEGRADED     0     0     0
  raidz2-0                              DEGRADED     0     0     0
    sdb1                                ONLINE       0     0     0
    sdc1                                UNAVAIL      0     0     0  corrupted data
    sdd1                                UNAVAIL      0     0     0
間違った操作したこと

HDDだ、うぇーい、となって、壊れたHDDを外して、喜んでやりました。追加まで。

$ ls -l /dev/disk/by-id
lrwxrwxrwx 1 root root  9 Mar 16 00:17 scsi-SATA_ST3000DM001-1CH_S1F****V -> ../../sdb
lrwxrwxrwx 1 root root  9 Mar 16 00:17 scsi-SATA_ST3000DM001-1CH_Z1F****Z -> ../../sde
lrwxrwxrwx 1 root root  9 Mar 16 00:17 scsi-SATA_ST3000DM001-1CH_Z1F****8 -> ../../sdf
lrwxrwxrwx 1 root root  9 Mar 16 00:17 scsi-SATA_ST3000DM001-1CH_Z1F****3 -> ../../sdd
lrwxrwxrwx 1 root root  9 Mar 16 00:17 scsi-SATA_ST3000DM001-1CH_Z1F****C -> ../../sdc

$ sudo parted
# ここで、gptパーティションを作成する

$ sudo zpool add -o ashift=12 storage raidz2 \
scsi-SATA_ST3000DM001-1CH_S1F****V \
scsi-SATA_ST3000DM001-1CH_Z1F****Z \
scsi-SATA_ST3000DM001-1CH_Z1F****8 \
scsi-SATA_ST3000DM001-1CH_Z1F****3 \
scsi-SATA_ST3000DM001-1CH_Z1F****C

$ sudo zpool status
NAME                                    STATE     READ WRITE CKSUM
storage                                 DEGRADED     0     0     0
  raidz2-0                              DEGRADED     0     0     0
    sdb1                                ONLINE       0     0     0
    sdc1                                UNAVAIL      0     0     0  corrupted data
    sdd1                                UNAVAIL      0     0     0
  raidz2-1                              ONLINE       0     0     0
    scsi-SATA_ST3000DM001-1CH_S1F****V  ONLINE       0     0     0
    scsi-SATA_ST3000DM001-1CH_Z1F****Z  ONLINE       0     0     0
    scsi-SATA_ST3000DM001-1CH_Z1F****8  ONLINE       0     0     0
    scsi-SATA_ST3000DM001-1CH_Z1F****3  ONLINE       0     0     0


さて、lvm2の要領でpvremoveに相当するコマンドを...ない!
※zpool removeは「only inactive hot spares, cache, top-level, or log devices can be removed」らしい

復旧!

手順
  1. raidzで構成したHDDを1台抜く
  2. 抜いたHDDのパーティションを作成し、zfsを作成する
  3. 作成した領域にsend/recvでバックアップを転送する
  4. scrubを実施して、整合性に問題がないことを確認する
  5. 元領域のzfs poolを開放(destroy)し、あるべき姿にする
  6. 作成したzfsに転送したバックアップを転送する

このとき、あまりのHDDが1台必要になる。また、危険な操作が多いので、消えると困るものはあらかじめ別媒体にバックアップを取得しておく