그래서 저는 빠른 SSD와 대용량 HDD를 갖춘 데스크탑을 가지고 있습니다. 저는 크고 잘 구성된 빠른 zpool을 얻으려고 노력하고 있습니다.
ZIL 및 L2ARC용 SSD에 별도의 파티션을 가질 수 있다는 내용을 읽었는데, 이는 내가 원하는 대로 작동하는 것 같지만 각 파티션의 크기를 수동으로 구성해야 합니다. 마음에 들지 않는 점은 파티션을 변경해야 할 경우 약간 복잡하고 재구성하기 어려울 수 있다는 것입니다. 그리고 목적은 모든 것을 ZIL하는 것이므로 최대 파일 시스템 크기는 HDD에 의해서만 제한되는 것처럼 들립니다. 그리고 L2ARC도 적어도 결국에는 이를 디스크에 써야 합니다. 또한 L2ARC가 시스템 재부팅 후에도 지속되는지, 아니면 다시 채워야 하는지도 확실하지 않습니다. 데이터가 모두 동일한 SSD에 있는 경우 데이터를 ZIL에서 L2ARC로 복사해야 하며, 현재 SSD에 필요한 핫 데이터 양에 대한 압박이 없다면 HDD에 복사하는 것조차 비효율적으로 보입니다.
또는 SSD에 파티션 1개, HDD에 파티션 1개를 두고 중복 없이 zpool에 직접 추가할 수도 있는 것 같습니다. 나는 이것을 시도했고 지속적인 읽기/쓰기 속도가 별도의 HDD가 달성할 수 있는 것보다 더 높다는 것을 알았습니다. 그런데 지금은 SSD로 다 옮겨졌는지는 잘 모르겠고, SSD가 꽉 차면 HDD로 다 옮겨지겠죠. 이상적으로는 ZFS가 L2ARC와 유사하게 SSD에 항상 핫 데이터를 유지하고 새 쓰기를 위해 SSD에 충분한 여유 공간을 남겨두기 위해 뒤에서 데이터를 투명하게 섞기를 바랍니다. ZIL은 자동으로 올바른 크기로 관리되어야 하며 가능하면 SSD에 이상적으로 배치되어야 합니다. 수동으로 구성된 ZIL + L2ARC 경로로 이동하면 ZIL이 약 (10초 * HDD 쓰기 속도) 정도만 크면 되는 것 같습니다. 이렇게 하면 L2ARC의 크기가 최대화됩니다. 이는 좋은 일입니다. 하지만 HDD의 속도(및 용량)를 효과적으로 두 배로 늘리기 위해 스트라이프 디스크를 추가하면 어떻게 될까요?
ZIL + L2ARC와 함께 SSD를 사용하는 경우 문제 요약:
- ZIL + L2ARC용 SSD를 설정하는 경우 다른 파티션 크기로 다시 설정하는 것이 얼마나 어렵나요?
- L2ARC가 포함된 SSD를 사용하는 경우 해당 용량은 사용 가능한 총 풀 용량에 포함됩니까, 아니면 풀 용량이 HDD에 의해서만 제한됩니까?
- L2ARC는 시스템 재부팅 후에도 남아 있습니까, 아니면 다시 채워야 합니까?
- 데이터가 동일한 물리적 SSD에 있더라도 ZIL에서 L2ARC로 데이터를 복사해야 합니까?
- ZIL이 SSD에 있고 더 많은 인텐트를 기록할 수 있는 충분한 공간이 있는 경우에도 ZIL이 SSD에 자동으로 플러시됩니까? 그렇다면 언제/어떤 상황에서?
단일 zpool에서 SSD + HDD를 사용할 때의 문제 요약:
- ZFS는 분명히 SSD와 HDD 파티션의 크기 차이를 인식하지만 ZFS는 SSD와 HDD 파티션의 상대적 성능을 자동으로 인식합니까? 특히,
- SSD와 HDD가 모두 상대적으로 비어 있는 경우 쓰기는 어떻게 분산됩니까?
- zpool의 SSD 부분이 가득 차면 ZFS는 데이터를 지능적으로 처리하려고 시도합니까? 특히,
- zpool의 SSD 부분이 가득 차면 ZFS는 곧 더 많은 쓰기 작업이 있을 것으로 예상하고 백그라운드에서 SSD에서 HDD로 데이터를 이동하려고 시도합니까?
- zpool의 SSD 부분이 가득 차고 SSD의 많은 데이터 대신 HDD의 많은 데이터에 액세스하기 시작하면 ZFS는 핫 데이터를 SSD로 교환하려고 시도합니까?
마지막으로 가장 중요한 질문은 다음과 같습니다.
- 동일한 풀에 SSD + HDD를 설정하는 것이 좋은 생각입니까, 아니면 드라이브 쌍의 속도와 용량을 최적화하는 더 좋은 방법이 있습니까?
답변1
Marco의 답변은 모든 세부 사항을 올바르게 설명하지만 마지막 질문/요약에만 집중하고 싶습니다.
동일한 풀에 SSD + HDD를 설정하는 것이 좋은 생각입니까, 아니면 드라이브 쌍의 속도와 용량을 최적화하는 더 좋은 방법이 있습니까?
ZFS는 더 작은 디스크가 많은 대규모 어레이용으로 설계된 파일 시스템입니다. 매우 유연하기는 하지만 다음과 같은 이유로 현재 상황과 목표에 최적이라고 생각하지 않습니다.
- ZFS는 기록된 데이터를 재구성하지 않습니다. 당신이 찾고 있는 것은하이브리드 드라이브예를 들어, Apple의 Fusion Drive를 사용하면 여러 디스크를 함께 융합할 수 있으며 액세스 기록을 기반으로 각 블록이 자동으로 선택됩니다(데이터 이동은 시스템이 로드되지 않거나 덮어쓰지 않을 때 수행됨). ZFS를 사용하면 자동으로든 수동으로든 데이터가 원래 기록된 위치(또는 삭제 표시된 위치)에 그대로 유지됩니다.
- 디스크가 하나만 있으면 중복성과 자가 복구 기능이 포기됩니다. 여전히 오류를 감지할 수 있지만 시스템의 전체 기능을 사용할 수는 없습니다.
- 동일한 풀에 두 개의 디스크가 있다는 것은 데이터 손실(결국 RAID0) 또는 손상 가능성이 더 높다는 것을 의미하며, 드라이브 크기와 드라이브 속도가 다르기 때문에 성능이 수준 이하로 떨어지게 됩니다.
- HDD+SLOG+L2ARC가 조금 더 낫지만 정말 좋은 SSD가 필요하고(Marco가 말한 것처럼 두 개의 서로 다른 SSD가 바람직하지만 NVMe SSD는 훌륭하고 값비싼 절충안입니다) 대부분의 공간이 모두 낭비됩니다(2~4GB). ZIL에는 충분하지만 대형 L2ARC는 RAM이 가득 찬 경우에만 도움이 되지만 그 자체에는 더 많은 RAM이 필요합니다. 이로 인해 일종의 문제가 발생합니다. L2ARC를 사용하려면 더 많은 RAM이 필요하지만 충분하므로 RAM 자체를 사용해도 됩니다. 블록만 저장되므로 순수 파일을 볼 때처럼 많은 가정을 할 필요가 없다는 점을 기억하세요.
이제 대안은 무엇입니까?
- 두 개의 풀을 가짐으로써 분할할 수 있습니다. 하나는 시스템용이고 다른 하나는 데이터용입니다. 이렇게 하면 자동 재조정 및 중복성이 없지만 쉽게 확장되고 RAID0 문제가 없는 깔끔한 시스템이 됩니다.
- 두 번째 대용량 하드 드라이브를 구입하여 미러링하고 설명된 대로 SSD를 사용하십시오. 다양한 크기의 디스크 및 디스크 속도 문제를 제거하고 중복성을 제공하며 SSD의 유연성을 유지합니다.
- 구입NSSD를 사용하고 RAIDZ1/2/3을 수행합니다. 요즘에는 더 작은 SSD가 꽤 저렴하고 재구축 시간도 그다지 느리지 않아 RAIDZ1이 다시 흥미로워집니다.
- 필요한 경우 ZFS를 포함하여 혼합 기능을 갖춘 다른 파일 시스템이나 볼륨 관리자를 사용하십시오. 이것이 최선의 선택은 아니지만 풀에 두 개의 단일 디스크 vdev를 사용하는 것도 아닙니다. 적어도 ZFS의 일부 기능(스냅샷 등)은 물론 원하는 것을 얻을 수 있지만 이겼습니다. 뛰어난 성능에 의존하지 마세요.
답변2
- ZIL + L2ARC용 SSD를 설정하는 경우 다른 파티션 크기로 다시 설정하는 것이 얼마나 어렵나요?
ZIL과 L2ARC를 동일한 디스크에 배치하는 것은 권장되지 않습니다. ZIL과 L2ARC는 리소스를 놓고 경쟁하므로 성능이 저하될 수 있습니다. 따라서 최상의 성능을 위해서는 두 개의 별도 디스크를 사용하고 ZIL 및 L2ARC 중 하나의 이점을 실제로 활용해야 합니다. ZIL은 동기 쓰기에 사용됩니다. 워크플로의 동기 쓰기 비율이 낮다면 ZIL이 필요하지 않을 것입니다.
또한 ZIL과 L2ARC의 SSD 요구 사항은 정확히 동일하지 않습니다. ZIL은 대기 시간이 낮고 IOPS가 높으며(예: ZeusRAM) 일반적으로 용량이 낮습니다. 반면에 L2ARC는 RAM 용량에 따라 더 높은 용량을 가져야 합니다.
ZIL 및 L2ARC는 풀에서 분리할 수 있으므로 디스크를 다시 분할하는 것은 그리 어렵지 않습니다. 이것은 FreeBSD에서 미러링된 ZIL/L2ARC 쌍을 설명하는 블로그입니다. Linux에서는 약간 다를 수 있지만 자신의 판단에 따라 다음과 같이 표시됩니다.딱딱한.
FreeNAS에서 ZIL 및 L2ARC용 SSD 쌍 사용
- L2ARC가 포함된 SSD를 사용하는 경우 해당 용량은 사용 가능한 총 풀 용량에 포함됩니까, 아니면 풀 용량이 HDD에 의해서만 제한됩니까?
풀 용량은 HDD에 의해서만 제한됩니다.
- L2ARC는 시스템 재부팅 후에도 남아 있습니까, 아니면 다시 채워야 합니까?
현재 구현에서는 재부팅 시 L2ARC가 유지되지 않습니다. 하지만 하나 있어요기능 요구 사항향후 어느 시점에 구현될 수도 있습니다.
- 데이터가 동일한 물리적 SSD에 있더라도 ZIL에서 L2ARC로 데이터를 복사해야 합니까?
그런 일은 일어나지 않았습니다. ZIL과 L2ARC는 서로 다른 용도로 사용되며 데이터는 ZIL에서 L2ARC로 직접 이동되지 않습니다.
- ZFS는 분명히 SSD와 HDD 파티션의 크기 차이를 인식하지만 ZFS는 SSD와 HDD 파티션의 상대적 성능을 자동으로 인식합니까? 특히,
제가 아는 한, 분산 쓰기에서는 드라이브 성능이 고려되지 않습니다.
- SSD와 HDD가 모두 상대적으로 비어 있는 경우 쓰기는 어떻게 분산됩니까?
이는 풀 레이아웃(미러, RAIDZ) 및 상대적 드라이브 크기에 따라 다릅니다. RAIDZ에서는 더 큰 드라이브가 선호됩니다.
- zpool의 SSD 부분이 가득 차면 ZFS는 데이터를 지능적으로 처리하려고 시도합니까? 특히,
예, 하지만 SSD를 L2ARC의 용도인 L2ARC로 사용하는 경우에만 해당됩니다.
- zpool의 SSD 부분이 가득 차면 ZFS는 곧 더 많은 쓰기 작업이 있을 것으로 예상하고 백그라운드에서 SSD에서 HDD로 데이터를 이동하려고 시도합니까?
- zpool의 SSD 부분이 가득 차고 SSD의 많은 데이터 대신 HDD의 많은 데이터에 액세스하기 시작하면 ZFS는 핫 데이터를 SSD로 교환하려고 시도합니까?
위에서 언급했듯이 SSD를 L2ARC로 사용합니다.
L2ARC에 의존하지 않고 L2ARC 없이도 충분한 ARC(= 더 많은 RAM)를 제공하는 것이 좋습니다.