ディスクを組み合わせて単一の 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 ドライブを連結するとスペースがわずかに失われるため、combined
2 つのネイティブ 2TB ドライブのどちらよりもわずかに小さいドライブになります。 と はそれぞれ 4194304 セクターありますが、は 256 セクター小さい 4194048 セクターのみであるdiskinfo(8)
ことを確認します。md1
md2
stripe/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