web-dev-qa-db-ja.com

ディスクの1つを少し小さいディスクに置き換えることができるzfsプールを作成します

これは、Linux(CentOS 7)上のzfsに関する質問です。 2つの8 TBディスク、一方のディスクがもう一方のディスクをミラーリングしている、非常に単純なセットアップがあります。

zpool create -f -o ashift = 12 $ zpoolNameミラー$ disksById

Zpoolのマニュアルページによると、ディスクの1つを交換する必要がある場合、交換用ディスクは構成内の2つのディスクのうち最小のものと同じかそれ以上のサイズである必要があります。そして、私が理解したことから、正確なサイズは、それらがすべて8 TBとラベル付けされている場合でも、通常、異なるメーカーとモデル(およびモデルリビジョン)のドライブ間で少し異なることが一般的です。ただし、他の8 TB diskに置き換えることができるようにしたいのですが、必ずしも同じメーカーとモデルである必要はありません。

これを達成するにはどうすればよいですか?

ディスク全体がプールに使用されるのではなく、多少の余裕を残して、zpool createコマンドのオプションを期待していましたが、そのようなオプションは見つかりませんでした。私が見た唯一の提案は、プールを作成する前にディスクをパーティション分割し、1つの「プール」パーティションと1つの「スラック」パーティションを作成することですが、ディスクキャッシュを適切に使用できないため、これはディスクのパフォーマンスに影響します。 zfsなので、これは避けたいと思います。

3
joaerl

私が見た唯一の提案は、プールを作成する前にディスクをパーティション分割し、1つの「プール」パーティションと1つの「スラック」パーティションを作成することです。

これが正解です。

しかし、ディスクキャッシュはzfsで適切に使用できないため、これはディスクのパフォーマンスに影響することを読みました。

これは誤解です。フルディスクではなくパーティションを使用すると、パーティションの位置がずれている場合にのみパフォーマンスに影響します。これは、漠然と最新のパーティションエディタを使用している場合、通常、ユーザー側で実際に判断する必要があります。 LinuxとBSDのfdisk、sfdisk、およびgpartedはすべて、パーティションの境界を理解し、完全に強制されない限り、パーティションの境界内で機能します。

さらに、全体がzfsに供給されているディスクをよく見ると、zfsが実際にディスク自体をパーティション分割していることがわかります。例:

root@banshee:~# zpool status data
  pool: data
 state: ONLINE
  scan: scrub repaired 0 in 27h54m with 0 errors on Mon Mar 13 05:18:20 2017
config:

    NAME                                           STATE     READ WRITE CKSUM
    data                                           ONLINE       0     0     0
      mirror-0                                     ONLINE       0     0     0
        wwn-0x50014ee206fd9549  ONLINE       0     0     0
        wwn-0x50014ee2afb368a9    ONLINE       0     0     0
      mirror-1                                     ONLINE       0     0     0
        wwn-0x50014ee25d2510d4  ONLINE       0     0     0
        wwn-0x5001517bb29d5333  ONLINE       0     0     0

errors: No known data errors

root@banshee:~# ls -l /dev/disk/by-id | grep 510d4
lrwxrwxrwx 1 root root  9 Mar 22 15:57 wwn-0x50014ee25d2510d4 -> ../../sdd
lrwxrwxrwx 1 root root 10 Mar 22 15:57 wwn-0x50014ee25d2510d4-part1 -> ../../sdd1
lrwxrwxrwx 1 root root 10 Mar 22 15:57 wwn-0x50014ee25d2510d4-part9 -> ../../sdd9

ご覧のとおり、ZFSはすでにプール内のrawディスクをパーティション分割しています。プールはパーティション1を使用します。パーティション9はたるんでいます。

root@banshee:~# sfdisk -d /dev/sdd
label: gpt
label-id: B2DED677-DB67-974C-80A6-070B72EB8CFB
device: /dev/sdd
unit: sectors
first-lba: 34
last-lba: 3907029134

/dev/sdd1 : start=        2048, size=  3907010560, type=6A898CC3-1DD2-11B2-99A6-080020736631, uuid=A570D0A4-EA32-F64F-80D8-7479D918924B, name="zfs"
/dev/sdd9 : start=  3907012608, size=       16384, type=6A945A3B-1DD2-11B2-99A6-080020736631, uuid=85D0957B-65AF-6B4A-9F1B-F902FE539170

sdd9は16384セクターの長さです。これは4Kディスクであるため、64Mになります。既存のディスクよりも63M程度小さいディスクは、障害が発生した場合の代わりとして問題ありません。

3
Jim Salter

私が見た唯一の提案は、プールを作成する前にディスクをパーティション分割することです

これは確かにそれを処理する唯一の解決策です。 2つ目の小さなパーティションを作成する必要はありません。そのスペースは、パーティション化されていないままにすることができます。通常、ディスク間の差異は非常に小さいため、失われるのは数メガバイトのみであり、8TBディスクでは問題ありません。

別の方法は、まったく同じモデルのディスクを購入することです(製造時のシリアル障害が1つのモデルにのみ影響するため、多くの場合、推奨されません)。または、最小のディスクから始めて、より大きなディスクと交換するだけですが、これは失われたスペースではるかに多くの費用がかかり、しばらくすると不可能になる可能性があります。

2
user121391