zfs 미러에 결합된 디스크가 포함될 수 있습니까?

zfs 미러에 결합된 디스크가 포함될 수 있습니까?

디스크를 결합하여 단일 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)것을 확인합니다 .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

관련 정보