중복성을 위해 여러 개의 서로 다른 하드 드라이브로 단일 볼륨을 생성하는 옵션은 무엇입니까(예: 이기종 RAID)

중복성을 위해 여러 개의 서로 다른 하드 드라이브로 단일 볼륨을 생성하는 옵션은 무엇입니까(예: 이기종 RAID)

나는 약 8개의 하드 드라이브를 가지고 있고 내 메인 PC(openSUSE Tumbleweed 실행)에는 모두 연결하기에 충분한 SATA 포트가 있습니다. 일부 드라이브는 5년이 넘었으며 크기는 384GB에서 2TB까지 다양합니다.

저장공간을 다 유휴상태로 두는 것은 아쉬울 것 같아서 마운트해서 사용하고 싶지만 당연히 별도의 볼륨으로 사용하지는 않을 것 같습니다. 과거에 오래된 디스크를 사용하여 mdadm RAID5 및 RAID6 어레이를 실행했지만 이 경우에는 지루해졌습니다(디스크당 384GB의 8 드라이브 어레이, 7 드라이브 어레이, 다음과 더 큰 차이...). 그리고 빨리). 그래서 대안을 찾아봤습니다.

나는 또한 한동안 4개의 동일한 드라이브에서 BTRFS RAID5 어레이를 실행해 왔으며 내 경험에 따르면(일부 파일이 손실되는 전체 복원에는 1년에 한 번 정도 소요됩니다...) 사실은 다음과 같습니다.개발자들조차도 사용자가 지나치게 주의를 기울이지 않고도 안정적으로 작동하도록 만들 수 있다는 희망을 갖고 있지 않은 것 같습니다.이러한 이기종 배열에 BTRFS가 현명한 선택인지 궁금합니다.

ZFS와 RAIDZ 기능, 3개의 패리티 블록으로 다양한 크기의 드라이브를 수용할 수 있는 능력에 대해 좋은 소식을 들었습니다. 하지만 지금까지 제가 찾을 수 있는 대부분의 조언은 동일한 드라이브에만 관련되거나 적어도 동일한 RAID 파티션에 관한 것입니다. 크기.

내 우선 순위는 속도나 액세스 시간이 아닙니다. 컴퓨터는 나만 사용하는 것이고 하드 드라이브 처리량은 거의 문제가 되지 않습니다. 내 의도는 가끔 발생하는 드라이브 오류로 인해 데이터가 손실되거나 상당한 시간이 걸리는 것에 대해 걱정할 필요 없이 남은 생애 동안 상대적으로 편안하게 이 하드 드라이브의 공간을 사용하는 것입니다. 드라이브 중 하나에 오류가 발생하면 드라이브 중 하나에 오류가 발생하면 이를 제거하고 계속할 수 있습니다(또는 공간이 필요한 경우 새 드라이브를 추가할 수 있습니다).

드라이브가 손상되지 않는 한 개인적으로 주의를 기울일 필요가 없으며 드라이브가 손상된 경우 나에게 알려준다는 점을 확신할 수 있는 한 추가적인 사전 구성을 수행해도 괜찮습니다. 2~3개의 드라이브 오류를 처리하는 것이 좋겠지만 용량의 절반(예: RAID10 등)을 사용할 수 있다면 모든 드라이브와 드라이브에 있는 대부분의 공간을 사용할 수 있는 한 그렇게 할 수도 있습니다.

  1. 그런 것이 존재하나요?
  2. 옵션은 무엇입니까?
  3. 설정 방법을 설명하는 방법이 있나요?

답변1

원하는 목표를 달성하기 위한 핵심은 드라이브를 총 스토리지 양이 동일하거나 거의 동일한 그룹으로 그룹화한 다음 각 물리적 드라이브 그룹을 스토리지 합계를 나타내는 가상 드라이브에 연결하는 것입니다. 이 그룹의 드라이브에 사용할 수 있는 저장 공간입니다.

저는 FreeBSD에서 이 작업을 수행할 예정이지만 Linux에도 비슷한 도구가 있다고 생각합니다. 여기에 있는 주요 도구는 다음과 같습니다.gconcat(8).

시나리오를 고려해 봅시다:

  • 384G 드라이브 5개(예 /dev/md0-md4: )
  • 2T 드라이브 4개(예 /dev/md5-md8: )
  • 1T 드라이브 2개(예 /dev/md9-md10: )

이를 사용하면 gconcat이러한 드라이브를 5개의 그룹으로 연결할 수 있습니다.

  • 4개 그룹 2T+384G
  • 1T+1T+384G 세트

그런 다음 풀을 구축할 수 있는 비슷한 크기의 가상 연결 디스크 5개를 갖게 됩니다. 공간을 절약하기 위해 실제로 크기를 2^10배로 줄이겠지만 개념은 동일하게 유지됩니다. 따라서 384M 드라이브 5개, 2G 드라이브 4개, 1G 드라이브 2개를 사용하겠습니다.

먼저 /dev/md*위에 설명된 장치(Linux의 물리적 디스크와 유사할 수 있음 )를 고려하여 이러한 물리적 디스크를 5개의 가상 디스크에 연결할 수 있습니다 . /dev/sd*이름은 다음과 같습니다 .vdisk0-vdisk4

# gconcat create -v vdisk0 md0 md5
# gconcat create -v vdisk1 md1 md6
# gconcat create -v vdisk2 md2 md7
# gconcat create -v vdisk3 md3 md8
# gconcat create -v vdisk4 md4 md9 md10

FreeBSD에서는 이렇게 연결된 디스크가 devices 로 나타납니다 /dev/concat/vdisk0-vdisk4. 디스크 장치 작업을 중심으로 구축된 많은 FreeBSD 명령과 마찬가지로 /dev/에서도 이해하고 사용할 수 있습니다 gconcat status. 마찬가지로 GEOM항목을 참조하는 --based 명령은 편의를 위해 /dev/선행을 생략할 수 있습니다 /dev/.

# gconcat status
         Name  Status  Components
concat/vdisk0      UP  md0
                       md5
concat/vdisk1      UP  md1
                       md6
concat/vdisk2      UP  md2
                       md7
concat/vdisk3      UP  md3
                       md8
concat/vdisk4      UP  md4
                       md9
                       md10

또한 연결된 각 디스크의 미디어 크기가 유사한지(또는 이 경우 동일한지) 확인할 수 있습니다.

# gconcat list | grep -A2 ^Prov
Providers:
1. Name: concat/vdisk0
   Mediasize: 2550136832 (2.4G)
--
Providers:
1. Name: concat/vdisk1
   Mediasize: 2550136832 (2.4G)
--
Providers:
1. Name: concat/vdisk2
   Mediasize: 2550136832 (2.4G)
--
Providers:
1. Name: concat/vdisk3
   Mediasize: 2550136832 (2.4G)
--
Providers:
1. Name: concat/vdisk4
   Mediasize: 2550136832 (2.4G)

그래서! 이제 ZFS 풀을 만들 수 있는 5개의 2.4G 장치가 생겼습니다. 이중 패리티 RAIDZ2 풀을 생성하고 마운트 지점을 다음으로 설정해 보겠습니다 none.

# zpool create -m none tank raidz2 concat/vdisk{0..4}
# zpool status tank
  pool: tank
 state: ONLINE
config:

    NAME               STATE     READ WRITE CKSUM
    tank               ONLINE       0     0     0
      raidz2-0         ONLINE       0     0     0
        concat/vdisk0  ONLINE       0     0     0
        concat/vdisk1  ONLINE       0     0     0
        concat/vdisk2  ONLINE       0     0     0
        concat/vdisk3  ONLINE       0     0     0
        concat/vdisk4  ONLINE       0     0     0

errors: No known data errors
# zfs list tank
NAME   USED  AVAIL     REFER  MOUNTPOINT
tank   179K  6.64G     39.3K  none

퀀텀ED.

요약하자면, 가장 작은 드라이브 그룹이 풀의 VDEV 크기를 제한하므로 핵심 개념은 드라이브를 가능한 한 동일한 총 스토리지 용량에 가까운 그룹으로 그룹화하는 것입니다. 물리적 드라이브를 최적으로 그룹화한 후 각 드라이브 그룹을 그룹의 결합된 스토리지를 나타내는 가상 디스크에 연결합니다. 마지막으로 가상 직렬 드라이브에서 ZPOOL을 구축합니다.

드라이브에 장애가 발생하면 어떻게 되나요?

드라이브 오류가 발생한 경우( /dev/concat/vdisk2이를 예로 사용) 오류가 발생한 물리적 드라이브와 연결된 가상 디스크를 제거하고 오류가 발생한 드라이브를 교체하고 가상 디스크를 다시 만든 다음 풀을 가상 디스크에 다시 동기화하면 됩니다. 연결된 디스크.

# zpool status tank
  pool: tank
 state: DEGRADED
status: One or more devices has been removed by the administrator.
    Sufficient replicas exist for the pool to continue functioning in a
    degraded state.
action: Online the device using zpool online' or replace the device with
    'zpool replace'.
config:

    NAME               STATE     READ WRITE CKSUM
    tank               DEGRADED     0     0     0
      raidz2-0         DEGRADED     0     0     0
        concat/vdisk0  ONLINE       0     0     0
        concat/vdisk1  ONLINE       0     0     0
        concat/vdisk2  REMOVED      0     0     0
        concat/vdisk3  ONLINE       0     0     0
        concat/vdisk4  ONLINE       0     0     0

errors: No known data errors

vdisk2실패했으므로 우리는 그것을 파괴합니다 :

# gconcat destroy vdisk2

다음으로, 포함된 고장난 드라이브를 교체합니다 concat/vdisk2. 대체 드라이브 크기를 사용해야 하는 경우 새 드라이브가 vdisk2풀에서 가장 작은 가상 디스크보다 작지 않은지 확인하십시오. 그렇지 않으면 ZFS에서는 풀에서 디스크를 사용할 수 없습니다.

고장난 드라이브를 적절한 교체 드라이브로 교체한 후 물리적 드라이브를 다시 연결하여 새 드라이브를 만듭니다 vdisk2.

# gconcat create vdisk2 md2 md7
# zpool online tank concat/vdisk2
# zpool status tank
  pool: tank
 state: ONLINE
  scan: resilvered 7.50K in 00:00:01 with 0 errors on Wed Sep 22 11:26:55 2021
config:

    NAME               STATE     READ WRITE CKSUM
    tank               ONLINE       0     0     0
      raidz2-0         ONLINE       0     0     0
        concat/vdisk0  ONLINE       0     0     0
        concat/vdisk1  ONLINE       0     0     0
        concat/vdisk2  ONLINE       0     0     0
        concat/vdisk3  ONLINE       0     0     0
        concat/vdisk4  ONLINE       0     0     0

errors: No known data errors

관련 정보