크기가 X인 디스크 2개와 크기가 2X인 디스크 1개가 있습니다.
원하는 것: 2배 크기의 미러형 중복 zpool
ZFS를 사용하면 두 개의 X 드라이브를 연결하는 것이 매우 간단합니다. 그러나 생성된 vdev(크기 2X)를 다른 2X 디스크에 미러링하기 위해 ZFS의 내부 방법을 사용할 수 없다는 것을 발견했습니다.
나는 다음과 같은 (다소 우아하지 않은) 솔루션을 생각해 냈습니다.
- 운영 체제 도구(Linux의 경우 mdadm, FreeBSD의 경우 gstripe)를 사용하여 2X 드라이브로 미러링할 수 있는 물리적 장치에 2개의 X 드라이브를 연결합니다. 그러나 저는 ZFS의 추가적인 복잡성, 플랫폼 종속성 및 베어메탈 이점의 손실이 불편합니다.
- 2X 드라이브를 두 개의 파티션으로 세분화하고
zpool create tank mirror /dev/Xone /dev/2Xpart1 mirror /dev/Xtwo /dev/2Xpart2
물리적으로 인접한 하드웨어에 분산된 스트라이프 파티션을 사용하여 4개의 멤버로 구성된 RAID10을 만듭니다.
답변1
ZFS는 실제로 원하는 작업을 지원하지 않습니다. 원하는 대로 작동하도록 노력할 수 있지만 그렇게 하는 과정에서 의도한 용도와 싸우게 됩니다.
ZFS가기업파일 시스템 및 볼륨 관리자 솔루션. 기업 환경에서는 귀하가 설명하는 것의 추가된 복잡성으로 인해 어느 쪽이든 동일한 크기의 드라이브를 구입하는 데 드는 비용이 작아집니다.
가장 깨끗한 솔루션당신이 가지고 있는 것을 고려하면실제로 더 큰 드라이브를 반으로 분할한 다음 각각 더 작은 디스크와 더 큰 디스크의 절반을 포함하는 두 개의 vdev 풀을 설정하는 것이 가능할 수도 있습니다. 그런 다음 ZFS는 두 vdev 간에 데이터를 스트라이프하여 양방향으로 미러링되는 2폭 스트라이프 세트를 제공합니다. 표준 RAID 용어로 RAID 1의 두 장치는 각 A에 두 개의 장치가 있습니다. RAID 0에서 RAID의 각 장치 1은 실제로 단일 장치의 일부입니다. 다음과 같습니다(물리적 장치가 *로 표시됨).
_ small1*
/
_ raid0left ----< _ largeleft
/ \ /
pool ---< >---- large* ----<
\ / \
` raid0right ---< ` largeright
\
` small2*
얼마나 연약해 보이는지 보시죠? 우선, 어떤 이유로든 큰 드라이브를 잃어버리면 모든 중복성을 잃게 되어 ZFS의 오류 복구 능력이 크게 제한됩니다.
이렇게 하면 더 큰 디스크가 I/O 요청을 충족하기 위해 미친 듯이 검색하게 됩니다. 실제로는 하나의 장치일 때 ZFS가 디스크를 두 개의 별도 장치로 처리하고 ZFS가 더 이상 할 수 없기 때문에 ZFS의 최적화 중 많은 부분이 꺼질 가능성이 높기 때문입니다. 더 큰 드라이브 전체를 제어한다고 가정합니다. 회전식 드라이브라면 검색만으로도 엄청난 스트레스를 받게 될 것입니다.
또한 적어도 마지막으로 확인했을 때 vdev는 풀에 추가만 가능하고 제거할 수 없기 때문에 이 설정에 갇히게 됩니다. vdev의 장치를 교체할 수 있지만 전체 풀을 파괴하고 다시 생성하지 않고는 vdev 자체로는 아무 것도 할 수 없습니다. 또한 DEGRADED
풀이 제대로 작동하려면 풀의 각 vdev가 적어도 실행 중이어야 한다는 점을 명심하세요 . 따라서 최상의 시나리오에서도 단순한 미러링 구성보다 더 많은 안정성을 얻을 수 없습니다. 왜냐하면 하나의 물리적 장치에 오류가 발생하면 다른 오류가 없더라도 스트라이프 양쪽의 성능이 저하되기 때문입니다. 이 경우, 이 두 개의 작은 드라이버가 재실버링의 혹독함을 견딜 수 있기를 바라는 것이 가장 좋습니다.
어쨌든 이 작업을 시도하면 더 큰 디스크가 SSD가 아닌 이상 검색 활동만으로도 풀 성능, 특히 IOPS 측면에서 풀 성능에 절대적으로 치명적인 영향을 미칠 것 같습니다. 처리량 .
저라면 그냥 큰 드라이브와 같은 크기의 드라이브를 하나 더 사서 간단한 양방향 미러를 설치하겠습니다.