디스크를 결합하여 단일 zfs 미러를 만들 수 있습니까?
mypool
mirror1
disk1 (2TB)
disk2 (2TB)
combined
disk3 (1TB)
disk4 (1TB)
즉, disk3과 disk4에는 disk3+disk4를 합친 것과 동일한 데이터가 포함되어야 합니다.
이것이 가능한가? 아니면 비슷한 것이 가능합니까? 그렇다면 현재 구성에서 나를 가져오는 명령은 무엇입니까?
mypool
mirror1
disk1 (2TB)
disk2 (2TB)
위 구성에?
답변1
미안하지만 아니, 그럴 수 없을 것 같아.
하지만 실험에 관심이 있다면 먼저
수영장을 백업하세요!
이 게시물은 귀하에게 아이디어를 제공하기 위해 고안된 학문적 연습이며 실제 세계에서 작동할 것이라고 보장하지 않으며 이러한 제안에 따라 취하는 조치로 인해 발생하는 데이터 손실에 대해 명시적으로 주의를 받습니다.
zpool
나는 그것이 미러링과 raidz vdev를 혼합하는 것에 대해 경고할 것이라는 것을 확실히 알고 있습니다 . 예를 들어 -f
깃발을 참조하십시오 zpool add
. 귀하가 제안한 vdev는 combined
본질적으로 " raidz-0
" 또는 연결된 vdev이며, mirror1
분명히 미러입니다.
그 모든 말과 함께,풀을 백업한 후매뉴얼 페이지를 자세히 연구하고 -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 드라이브의 두 배 크기입니다. 두 개의 1TB 드라이브를 연결할 때 약간의 공간 손실 combined
로 인해 드라이브는 두 개의 기본 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