非冗長ZFSプールでディスクをどのように交換しますか?

非冗長ZFSプールでディスクをどのように交換しますか?

本を数冊読んだらそんな感じでした。ZFSは、重複していないアレイからディスクを取り外すのが好きではありません。:

このzpool detachコマンドを使用して、ミラー化されたストレージプールからデバイスを分離できます。たとえば、

# zpool detach zeepool c2t1d0

ただし、他の有効なデータのコピーがない場合、操作は拒否されます。たとえば、

# zpool detach newpool c1t2d0
cannot detach c1t2d0: only applicable to mirror and replacing vdevs

基本的な問題は理解できます。配列からデータ(メタデータまたはペイロードデータ)の唯一のコピーを削除すると、そのデータは使用できなくなります。

の例ZFSストレージプールでデバイスを交換するストレージプールでデバイスを交換する方法に関する基本的なステップバイステップのガイドラインを提供します。つまり、ディスクをオフラインにし、ディスクを取り出し、交換用ディスクを挿入し、zpool replaceZFSに変更通知を実行し、ディスクをオンラインに切り替えます。これを行うには、アレイが交換されるディスクに依存しないようにする必要があるため、アレイは冗長でなければなりません。そのドライブに依存している場合、このアプローチは上記と同じ問題を示します。

推奨される方法は何ですか変えるディスクの一つ重複しないZFS配列?

既存のディスクが正常に動作していると仮定し、交換ディスクのサイズが交換中のディスクと少なくとも同じであるとします。 (既存のディスクに障害が発生した場合は、新しいディスクを追加し、ディスク障害の影響を受けたすべてのファイルをバックアップから復元するだけです。)

答え1

zpool attach pool old-disk new-disk

これにより、既存のディスクが既存のディスクと新しいディスクの両方を含むミラーに変換され、再同期が開始された後に既存のディスクを切り離すことができます。

zpool detach pool old-disk

ループデバイスを使用したテスト:

# truncate -s 1G a b
# truncate -s 1200M c
# losetup  /dev/loop0 a
# losetup  /dev/loop1 b
# losetup  /dev/loop2 c
# zpool create test loop{0,1}
# zpool attach test loop1 loop2
# zpool status
      pool: test
 state: ONLINE
  scan: resilvered 62K in 0h0m with 0 errors on Wed Jul 31 13:43:19 2013
config:

        NAME        STATE     READ WRITE CKSUM
        test        ONLINE       0     0     0
          loop0     ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
            loop1   ONLINE       0     0     0
            loop2   ONLINE       0     0     0
# zpool detach test loop1
# zpool status
  pool: test
 state: ONLINE
  scan: resilvered 62K in 0h0m with 0 errors on Wed Jul 31 13:43:19 2013
config:

        NAME        STATE     READ WRITE CKSUM
        test        ONLINE       0     0     0
          loop0     ONLINE       0     0     0
          loop2     ONLINE       0     0     0

答え2

「13」では状況が異なるかどうかはわかりませんが、「zfs 置換」は重複していないプールで動作します。最初に分離せずに1つのコマンドを実行するだけです。

d1は1G、d2は2G、/ tmpはすべて空のファイルです。

/t/test #> zpool create test /tmp/test/d1
/t/test #> zpool set autoexpand=on test
/t/test #> zpool status
  pool: test
 state: ONLINE
  scan: none requested
config:

    NAME            STATE     READ WRITE CKSUM
    test            ONLINE       0     0     0
      /tmp/test/d1  ONLINE       0     0     0

errors: No known data errors
/t/test #> zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
test   1008M   258K  1008M         -     0%     0%  1.00x  ONLINE  -


/t/test #> zpool replace test /tmp/test/d1 /tmp/test/d2


/t/test #> zpool status
  pool: test
 state: ONLINE
  scan: resilvered 61K in 0h0m with 0 errors on Sun Sep 18 18:55:32 2016
config:

    NAME            STATE     READ WRITE CKSUM
    test            ONLINE       0     0     0
      /tmp/test/d2  ONLINE       0     0     0

errors: No known data errors
/t/test #> zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
test   1.98G   408K  1.98G         -     0%     0%  1.00x  ONLINE  -

関連情報