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