1GB 파일을 생성할 때 ZFS RAIDZ2가 2GB의 데이터만 사용하는 이유는 무엇입니까?

1GB 파일을 생성할 때 ZFS RAIDZ2가 2GB의 데이터만 사용하는 이유는 무엇입니까?

저는 ZFS RAIDZ2/Raid 6 파일 시스템을 만들었습니다. 이 파일 시스템은 2개의 디스크에 패리티를 저장할 것이라고 믿습니다.

root@zfs-demo:/data# zpool status
  pool: data
 state: ONLINE
config:

        NAME        STATE     READ WRITE CKSUM
        data        ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sde     ONLINE       0     0     0

errors: No known data errors

1GB 파일이 있어요

root@zfs-demo:/data# ls -alh
total 1023M
drwxr-xr-x  2 root root    3 Dec 17 18:22 .
drwxr-xr-x 19 root root 4.0K Dec 17 18:10 ..
-rw-r--r--  1 root root 1.0G Dec 17 18:22 1GB.bin

두 개의 패리티 디스크는 1GB 파일에 대해 파일 자체 + 2개의 패리티 = 총 3GB의 저장 공간을 저장한다는 의미라고 생각했지만 2GB만 할당되었습니다.

root@zfs-demo:/data# zpool list
NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
data  39.5G  2.01G  37.5G        -         -     0%     5%  1.00x    ONLINE  -

답변1

중복을 위한 디스크 4개 중 2개를 사용하면 사용자 데이터를 두 배로 늘릴 수 있습니다. 두 개의 디스크는 원본 데이터를 저장하고 동일한 공간은 다른 두 디스크의 중복 데이터에 사용됩니다. 패리티는 실제로 스트라이핑을 사용하여 모든 디스크에 분산되지만 차지하는 공간은 변경되지 않습니다.

디스크의 양에 따라 동일한 공간 효율성으로 RAID 1/미러링을 사용할 수 있지만 처리량 효율성은 더 좋습니다(그리고 Romeo Ninov가 언급한 것처럼 복원력이 떨어짐). RAID-Z2 또는 RAID 6은 디스크가 많을수록 더욱 효율적입니다. 총 10개의 디스크가 있으면 8개를 데이터용으로 효과적으로 사용할 수 있으며 여전히 2개만 중복용으로 사용할 수 있습니다.

답변2

상황은 다음과 같습니다(아이디어를 이해하기 위해 설명하면 매우 단순화됨).

ZFS가 512MB 블록을 사용한다고 가정해 보겠습니다. 따라서 디스크 1에 512MB(파일의 일부)를 저장하고, 디스크 2에 다음 512MB를 저장하고, 패리티 1에 512MB의 다음 블록을 저장합니다(예를 들어 디스크 1과 패리티 1로만 파일을 복원할 수 있음). 2 디스크 1과 패리티 2를 사용하여 파일을 복원할 수 있도록 추가로 512MB를 저장합니다.

전체 파일을 얻기 위해 실행해야 할 사항은 다음과 같습니다.

  • d1+d2
  • d1+p1
  • d1+p2
  • d2+p1
  • d2+p2
  • p1+p2

예를 들어 5개의 디스크(RAIDZ2)가 있고 블록이 333MB인 경우 디스크 1, 2, 3, 패리티 1 및 2에 해당 블록이 있게 됩니다. 합계 1666MB

관련 정보