zfs ミラーに結合ディスクを含めることができますか?

zfs ミラーに結合ディスクを含めることができますか?

ディスクを組み合わせて単一の zfs ミラーを作成できますか?

mypool
    mirror1
        disk1 (2TB)
        disk2 (2TB)
        combined
            disk3 (1TB)
            disk4 (1TB)

つまり、ディスク 3 とディスク 4 には、ディスク 3 とディスク 4 を合わせたデータと同じデータが含まれている必要があります。

これは可能ですか? または、似たようなことは可能ですか? もし可能であれば、現在の構成から取得するコマンドは何ですか:

mypool
    mirror1
        disk1 (2TB)
        disk2 (2TB)

上記の構成に?

答え1

申し訳ありませんが、それはできないと思います。

しかし、実験に興味があるなら、まず

プールをバックアップしましょう!

この投稿は、アイデアを提供することを目的とした学術的な演習であり、現実世界で機能することを保証するものではありません。また、これらの提案に基づいて実行したアクションによってデータが失われないように明示的に警告されています。

zpoolミラー化された vdev と raidz vdev を混在させないように警告することは確かです。たとえば-f、のフラグを参照してくださいzpool add。提案された vdev はcombined本質的には " " または連結された vdev ですraidz-0が、 はmirror1明らかにミラーです。

そうは言っても、プールをバックアップした後、man ページをよく読み、-nいくつかのコマンドのフラグに注意してください。そうすることで、実際にプールに何もせずに、コマンドの効果を確認することができます。

あなたの解決策に反するさらなる証拠提案通りマニュアルページに記載されていますzpool:

仮想デバイスはネストできないため、ミラーまたは raidz 仮想デバイスにはファイルまたはディスクのみを含めることができます。ミラーのミラー (またはその他の組み合わせ) は許可されません。

しかしFreeBSD を使用している場合は、 を使用してgstripeデバイスを連結しdisk3、 をdisk4使用してデバイスを作成できますcombined。その後、そのデバイスをミラーに追加できます。ZFS はそれを単なる別のディスクとして認識するからです。

FreeBSD で ZFS を実行していることを前提として、これを実験する方法の提案を示します。TB ではなく 2GB のシミュレートされたドライブを使用しますが、それ以外は...

# mkdir zfs-test; cd zfs-test
# truncate -s 2G drive1; truncate -s 2G drive2
# truncate -s 1G drive3; truncate -s 1G drive4

ドライブ[1-4]ファイルに対応する疑似デバイスmd1からmd4を作成します。

# for N in $(jot 4); do mdconfig -u $N -t vnode -f drive$N; done
# mdconfig -lv
md1     vnode    2048M  /home/jim/zfs-test/drive1
md2     vnode    2048M  /home/jim/zfs-test/drive2
md3     vnode    1024M  /home/jim/zfs-test/drive3
md4     vnode    1024M  /home/jim/zfs-test/drive4

既存のミラーは簡単に作成できます。

# zpool create mypool mirror md1 md2
# zpool status mypool
  pool: mypool
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        mypool      ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            md1     ONLINE       0     0     0
            md2     ONLINE       0     0     0

errors: No known data errors

ここで、現在行き詰まっています。このサンドボックスでは、zpool-nフラグを使用してさまざまなコマンドを試すことができますが、これ以外は何も機能しないと思います。

# gstripe label -h combined md3 md4
# gstripe status
           Name  Status  Components
stripe/combined      UP  md3
                         md4
# zpool attach mypool md2 stripe/combined
cannot attach stripe/combined to md2: device is too small

2TBのドライブがその通り1TB ドライブの 2 倍のサイズです。2 つの 1TB ドライブを連結するとスペースがわずかに失われるため、combined2 つのネイティブ 2TB ドライブのどちらよりもわずかに小さいドライブになります。 と はそれぞれ 4194304 セクターありますが、は 256 セクター小さい 4194048 セクターのみであるdiskinfo(8)ことを確認します。md1md2stripe/combined

# diskinfo -v md1 md2 stripe/combined
md1
        512             # sectorsize
        2147483648      # mediasize in bytes (2.0G)
        4194304         # mediasize in sectors
        0               # stripesize
        0               # stripeoffset
        MD-DEV5473951480393710199-INO24 # Disk ident.
        Yes             # TRIM/UNMAP support
        Unknown         # Rotation rate in RPM

md2
        512             # sectorsize
        2147483648      # mediasize in bytes (2.0G)
        4194304         # mediasize in sectors
        0               # stripesize
        0               # stripeoffset
        MD-DEV5473951480393710199-INO24 # Disk ident.
        Yes             # TRIM/UNMAP support
        Unknown         # Rotation rate in RPM

stripe/combined
        512             # sectorsize
        2147352576      # mediasize in bytes (2.0G)
        4194048         # mediasize in sectors
        65536           # stripesize
        0               # stripeoffset
        No              # TRIM/UNMAP support
        Unknown         # Rotation rate in RPM

しかし、私のプレイサンドボックスでは、その問題を修正できます。

combinedまず、ストライプとそのコンポーネント疑似デバイス /dev/md3 および /dev/md4を削除します。

# gstripe destroy combined
# mdconfig -d -u3; mdconfig -d -u4
# mdconfig -lv
md1     vnode    2048M  /home/jim/zfs-test/drive1
md2     vnode    2048M  /home/jim/zfs-test/drive2

これで、disk3 と disk4 を再作成してそれぞれ 1GB よりわずかに大きくし、/dev/md3 および md4 デバイスを再作成し、それらを一緒にストライプ化して /dev/stripe/combined デバイスを作成し、そのデバイスをミラーに接続できます。

# truncate -s 1025M drive3
# truncate -s 1025M drive4
# mdconfig -u3 -t vnode -f drive3
# mdconfig -u4 -t vnode -f drive4
# gstripe label -h combined md3 md4
# zpool attach mypool md2 stripe/combined
# zpool status mypool
  pool: mypool
 state: ONLINE
  scan: resilvered 81.5K in 0 days 00:00:04 with 0 errors on Thu May 23 15:27:26 2019
config:

        NAME                 STATE     READ WRITE CKSUM
        mypool               ONLINE       0     0     0
          mirror-0           ONLINE       0     0     0
            md1              ONLINE       0     0     0
            md2              ONLINE       0     0     0
            stripe/combined  ONLINE       0     0     0

errors: No known data errors

関連情報