2012年7月21日土曜日

ZFS mirror(2台)からraidz(4台)に移行

HDD4台でZFSを使うときに使用しそうなパターンで、4KセクタHDD向けの設定比較をして来ました。
結果を見ると設定した方が良いのかなという感じです。

さて、一通り試したいことは出来たので、2台のmirrorから4台のraidzに移行しようと思います。
環境は、こんな感じです。
  • HP ProLiant MicroServer
  • Seagete ST3000DM001 x4台
  • CentOS 6.2
  • ZFS on Linux (0.6.0 RC8)
HDD2台でmirrorで運用していたものを、HDD4台のraidzの運用に変更します。
まず、mirrorで使用していたHDD1台と、性能比較で使用したHDD3台(poolはdestroy済み)を接続します。
$ cd /dev/disk/by-id
$ ls scsi*ST3000*part1
scsi-SATA_ST3000DM001-9YN_Z1F0AAAA-part1
scsi-SATA_ST3000DM001-9YN_Z1F0BBBB-part1
scsi-SATA_ST3000DM001-9YN_Z1F0CCCC-part1
scsi-SATA_ST3000DM001-9YN_Z1F0DDDD-part1
次のようにしてmirrorプールをimportします。
dtpoolとして使用していたものをopoolでインポートしています。
# zpool import -d /dev/disk/by-id/ dtpool opool
  pool: opool
    id: 3916950419245301417
 state: DEGRADED
status: One or more devices contains corrupted data.
action: The pool can be imported despite missing or damaged devices.  The
        fault tolerance of the pool may be compromised if imported.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
config:

        opool                                      DEGRADED
          mirror-0                                 DEGRADED
            ata-ST3000DM001-9YN166_Z1F0AAAA-part1  ONLINE
            sdb1                                   FAULTED  corrupted data

なんか、sta-*でimportされました。
次に、移行先のraidzを作るためのダミーデバイスを作ります。
$ dd if=/dev/zefo of=/var/tmp/dummy bs=1024K count=1 seek=3000000
raidzのデバイスの1つに穴開きファイルを使って、データ移行後に入れ換える作戦です。
次のようにraidzのプールを作ります。
# zpool create -o ashift=12 -f dtpool raidz \
    /var/tmp/dummy \
    scsi-SATA_ST3000DM001-9YN_Z1F0BBBB-part1 \
    scsi-SATA_ST3000DM001-9YN_Z1F0CCCC-part1 \
    scsi-SATA_ST3000DM001-9YN_Z1F0DDDD-part1
# zpool list
NAME     SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
dtpool  10.9T   912K  10.9T     0%  1.00x  ONLINE  -
opool   2.72T  2.32T   412G    85%  1.00x  DEGRADED  -
#
ashift=12で、4Kセクタ用の設定を指定しています。
ダミーデバイス(ファイル)は、オフラインにしないとデータ移行時に書き込まれてしまうのでオフラインにします。/varに3TBなんてありません。
情報をみるとこんな感じになります。
# zpool offline dtpool /var/tmp/dummy
# zpool list
NAME     SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
dtpool  10.9T   912K  10.9T     0%  1.00x  DEGRADED  -
opool   2.72T  2.32T   412G    85%  1.00x  DEGRADED  -
# zpool status
  pool: dtpool
 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: none requested
config:

        NAME                                          STATE     READ WRITE CKSUM
        dtpool                                        DEGRADED     0     0     0
          raidz1-0                                    DEGRADED     0     0     0
            /var/tmp/dummy                            OFFLINE      0     0     0
            scsi-SATA_ST3000DM001-9YN_Z1F0BBBB-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-9YN_Z1F0CCCC-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-9YN_Z1F0DDDD-part1  ONLINE       0     0     0

errors: No known data errors

  pool: opool
 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 39K in 0h0m with 0 errors on Fri Jun 29 22:41:17 2012
config:

        NAME                                       STATE     READ WRITE CKSUM
        opool                                      DEGRADED     0     0     0
          mirror-0                                 DEGRADED     0     0     0
            ata-ST3000DM001-9YN166_Z1F0AAAA-part1  ONLINE       0     0     0
            9459549258261188968                    UNAVAIL      0     0     0  was /dev/sdb1

errors: No known data errors
次のようにして移行元のマウントを変更します。
# zfs set mountpoint=/old/ts opool/ts
# zfs set mountpoint=/old/backup opool/backup
# zfs mount -a
# df -h
Filesystem            Size  Used Avail Use% Mounted on
 :
/dev/sde3              20G  1.2G   18G   7% /var
dtpool                7.8T  256K  7.8T   1% /dtpool
opool                 369G  128K  369G   1% /opool
opool/ts              2.7T  2.4T  369G  87% /old/ts
opool/backup          372G  2.7G  369G   1% /old/backup
#
移行先の領域をつくります。
# zfs create dtpool/ts
# zfs create dtpool/backup
# zfs set mountpoint=/data/ts dtpool/ts
# zfs set mountpoint=/data/backup dtpool/backup
# zfs mount -a
# df -h
Filesystem            Size  Used Avail Use% Mounted on
 :
dtpool                7.8T  128K  7.8T   1% /dtpool
opool                 369G  128K  369G   1% /opool
opool/ts              2.7T  2.4T  369G  87% /old/ts
opool/backup          372G  2.7G  369G   1% /old/backup
dtpool/ts             7.8T  128K  7.8T   1% /data/ts
dtpool/backup         7.8T  128K  7.8T   1% /data/backup
#
領域が出来たのでデータ移行します。
zfsのsend,receiveでも良かったんですが、今回は進捗を見たかったのでrsyncを使いました。
TSデータ以外は、バックアップして整理したら意外と少なくなりました。

データ移行が完了したら、mirrorプールを削除して、raidzプールのダミーデバイスをリプレースします。
# zpool destroy opool
# zpool list
AME     SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
dtpool  10.9T  3.27T  7.61T    30%  1.00x  DEGRADED  -
# zpool status
  pool: dtpool
 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: none requested
config:

        NAME                                          STATE     READ WRITE CKSUM
        dtpool                                        DEGRADED     0     0     0
          raidz1-0                                    DEGRADED     0     0     0
            /var/tmp/dummy                            OFFLINE      0     0     0
            scsi-SATA_ST3000DM001-9YN_Z1F0BBBB-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-9YN_Z1F0CCCC-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-9YN_Z1F0DDDD-part1  ONLINE       0     0     0

errors: No known data errors
# zpool replace dtpool /var/tmp/dummy scsi-SATA_ST3000DM001-9YN_Z1F0AAAA-part1
リプレース中は、次のような状態になります。
リプレース開始から暫くすると転送レートが安定して、それなりの終了時間がわかるようになります。
# zpool status
  pool: dtpool
 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  1 19:01:13 2012
    35.4G scanned out of 3.27T at 232M/s, 4h3m to go
    8.84G resilvered, 1.06% done
config:

        NAME                                            STATE     READ WRITE CKSUM
        dtpool                                          DEGRADED     0     0     0
          raidz1-0                                      DEGRADED     0     0     0
            replacing-0                                 OFFLINE      0     0     0
              /var/tmp/dummy                            OFFLINE      0     0     0
              scsi-SATA_ST3000DM001-9YN_Z1F0AAAA-part1  ONLINE       0     0     0  (resilvering)
            scsi-SATA_ST3000DM001-9YN_Z1F0BBBB-part1    ONLINE       0     0     0
            scsi-SATA_ST3000DM001-9YN_Z1F0CCCC-part1    ONLINE       0     0     0
            scsi-SATA_ST3000DM001-9YN_Z1F0DDDD-part1    ONLINE       0     0     0

errors: No known data errors
で、大体4時間後に完了しました。
# zpool status
  pool: dtpool
 state: ONLINE
 scan: resilvered 836G in 3h51m with 0 errors on Sun Jul  1 22:53:02 2012
config:

        NAME                                          STATE     READ WRITE CKSUM
        dtpool                                        ONLINE       0     0     0
          raidz1-0                                    ONLINE       0     0     0
            scsi-SATA_ST3000DM001-9YN_Z1F0AAAA-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-9YN_Z1F0BBBB-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-9YN_Z1F0CCCC-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-9YN_Z1F0DDDD-part1  ONLINE       0     0     0

errors: No known data errors
# zpool list
NAME     SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
dtpool  10.9T  3.28T  7.60T    30%  1.00x  ONLINE  -
時間はかかりましたが、特に問題なく移行完了できました。

0 件のコメント:

コメントを投稿