ZFS 또는 LVM 또는 MD 중복 이기종 스토리지 제안


10

대부분의 사람들이 겪는 것과 같은 문제가 있습니다. 신뢰할 수있는 개인용 스토리지 솔루션을 만드는 방법 :

  1. 하드 드라이브는 규칙적인 경고로 실패합니다. 파일 손실은 허용되지 않습니다.
  2. 나는 때때로 새로운 HDD를 구입할 것입니다. 불가피하게 GB 당 가격은 마지막 HDD 구매와 다른 크기입니다.
  3. 2는 시간이 지남에 따라 이기종 디스크 모음이 있음을 의미합니다. 모두 사용하고 싶습니다. 실패한 디스크는 일반적으로 더 큰 디스크로 교체됩니다.

  4. 데이터 무결성과 신뢰성은 속도보다 중요합니다.

그래서이 문제에 대해 며칠 동안 (그리고 몇 년 동안 머리 뒤로) 머리를 두드리고 나서 다음 해결책을 제안합니다. Ubuntu PPA에서 사용할 수있는 기본 Linux ZFS를 기반으로 테스트 한 솔루션에 대해 설명 하지만 LVM, MD 및 btrfs를 사용하여 동일한 결과를 얻을 수 있습니다. 이를 위해 RAID1 (ZFS 미러 vdev)을 사용합니다.

  1. 드라이브 세트가 주어지면 각 세트의 용량이 가능한 한 서로 가깝도록 두 개의 디스크 세트로 그룹화하십시오.
  2. 다른 그룹의 작은 디스크 중 하나와 정확히 같은 크기의 파티션이 있도록 큰 디스크를 분할하십시오.
  3. 각 디스크가 다른 디스크에 미러를 갖도록 미러 vdev를 작성하십시오.

예를 들어, 새로운 2TB 드라이브, 구형 750GB 드라이브, 구형 400GB 드라이브 2 개 및 구형 500GB 드라이브 1 개의 디스크 세트를 생각해보십시오. 최적의 미러링 된 파티셔닝은 2TB의 사용 가능한 공간을 가지며 ':'은 파티션과 '|'을 구분하는 다음 다이어그램에 설명되어 있습니다. 디스크를 분리합니다 :

+------------------------------------------------------------------+
| 2TB (sda1)        : (sda2)       : (sda3)       : (sda4)         |
+------------------------------------------------------------------+--+
| 750 GB (sdb)      | 400 GB (sdc) | 400 GB (sdd) | 500 GB (sde1)  :XX|
+---------------------------------------------------------------------+

zpool을 다음과 같이 생성하십시오.

zpool create archive mirror /dev/sda1 /dev/sdb mirror /dev/sda2 /dev/sdc mirror /dev/sda3 /dev/sdd mirror /dev/sda4 /dev/sde1

4 개의 미러링 된 vdev가 생성됩니다. 디스크 중 하나에 오류가 발생하면 크기에 관계없이 디스크를 교체하고 분할하여 누락 된 파티션을 다시 만들 수 있습니다. ZFS vdev를 풀에 추가 할 수는 있지만 제거 할 수없는 것이 중요합니다 . 따라서 가능하면 새 드라이브를 구입할 때 기존 vdev를 재정렬하려고합니다. 다음 구매가 3TB 드라이브라고 가정 해 봅시다. 다음 다이어그램에 설명 된대로 최적의 구성을 3.5TB 사용할 수 있습니다. 이제 5 개의 vdev 쌍입니다. 이는 적절한 파티셔닝과 드라이브의 연속 실패 및 재 파티션을 통해 달성 할 수 있습니다.

+--------------------------------------------------------------+-------------+
| 3 TB (sdf1)       : (sdf2)      : (sdf3)      : (sdf4)       | 500GB (sde) |
+--------------------------------------------------------------+-------------+-+
| 2TB (sda1)        | 400GB (sdb) | 400GB (sdc) | 750GB (sdd1) : (sdd2)      :X| 
+------------------------------------------------------------------------------+

LVM 또는 MD RAID를 사용하여이 미러 드라이브 쌍을 유지 관리 할 수도 있습니다. 각 드라이브에 항상 미러 드라이브 또는 파티션이 있는지 확인하는 것이 좋습니다. 모든 것이 미러링되므로 드라이브를 추가하거나 제거 할 때 드라이브가 고장 나고 파티션을 다시 정렬 할 수 있습니다. LVM 또는 MD를 사용하면 원하는 경우 BTRFS에 비해 ZFS의 덜 복잡한 복구 도구를 사용하여 드라이브를 제거하고 어레이를 축소 할 수 있습니다.

이 절차에 대한 의견이 있으십니까? 좋은 스크립트는 무손실 할당 및 드라이브 재 배열을 처리 할 수 ​​있습니다. LVM 대 MD 대 ZFS에 대한 의견이 있으십니까? 결과적으로 이상하게 분할 된 어레이의 성능에 대한 의견이 있습니까? 동일한 드라이브의 여러 파티션에 걸쳐 데이터를 배열하면 과도한 헤드 탐색 및 조기 장애가 발생합니까?

BTRFS 개발자 : 모두 가 이것을 원하고 LVM 또는 MD는 기술적으로 필요하지 않습니다 (제 생각에는 차선책). 중복 이기종 어레이를 쉽게 유지 관리하는 것은 btrfs의 주요 기능입니다. 그것은 그대로 LVM / MD / ZFS에 대한 해킹입니다. resliver / resync를 최소화하는 것이 매우 바람직합니다.

예, 이것은 분명히 가난한 사람의 Drobo입니다. 이를 위해 전용 하드웨어가 필요하지 않아야합니다 ...

답변:


4

ZFS로 이것을 테스트했으며 ZFS가 모든 vdev에 대한 읽기 및 쓰기를 분산하므로 I / O를 동일한 디스크의 여러 위치로 나누기 때문에 쓰기 성능은 절반 정도입니다. 따라서 속도는 파티션이 가장 많은 디스크의 속도에 의해 제한됩니다. 읽기 속도는 디스크 대역폭과 같습니다. 두 디스크의 한 쌍의 ZFS 파티션은 디스크에서 병렬로 읽을 수 있기 때문에 단일 디스크의 읽기 속도가 대략 두 배입니다.

MD LINEAR 배열 또는 LVM을 사용하여 두 개의 반쪽을 만들면 위의 ZFS 제안에 비해 쓰기 성능이 두 배가되지만 LVM과 MD는 데이터가 저장된 위치를 알 수 없다는 단점이 있습니다. 디스크 장애 나 업그레이드가 발생할 경우 어레이의 한쪽을 완전히 파괴하고 다시 동기화 / 재 활성화 한 다음 다른 쪽을 따라야합니다. (예 : 재 동기화 / 리바이 버는 2 * (배열 크기)를 복사해야합니다)

따라서 최적의 솔루션은 디스크를 동일한 크기의 "반쪽"으로 결합하는 두 개의 LVM 또는 MD LINEAR 장치에서 단일 ZFS 미러 vdev를 만드는 것 같습니다. 이것은 하나의 디스크보다 약 두 배의 읽기 대역폭을 가지며 쓰기 대역폭은 개별 디스크 대역폭과 같습니다.

ZFS 대신 BTRFS raid1을 사용하는 것도 효과가 있지만 ZFS는 읽기를 대역폭의 두 배로 분배하기 때문에 읽기 대역폭의 절반을 갖습니다 (BTRFS는 내 테스트에 따르면). BTRFS는 ZFS로는 파티션을 축소 할 수있는 장점이 있지만, 실패 후 빈 공간이 많으면 BTRFS로 파일 시스템을 축소 한 다음 디스크를 재 배열하여 더 작은 중복 어레이를 재 구축 할 수 있습니다.

이것은 수작업으로 지루하지만 좋은 스크립트로 쉽게 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.