ZFS : zpool의 모든 디스크에 zvol을 재배포 하시겠습니까?


12

ZFS가 zpool의 모든 디스크에 지정된 파일 시스템을 재배포하라는 메시지를 표시 할 수있는 방법이 있습니까?

FC를 통해 LUN으로 내 보내진 고정 크기 ZFS 볼륨이있는 시나리오를 생각하고 있습니다. 현재 zpool은 작고 2 개의 1TB 미러링 디스크이며 zvol은 총 750GB입니다. zpool의 크기를 갑자기 12TB의 1TB 디스크로 확장해야한다면 zvol은 여전히 ​​처음 두 스핀들에만 효과적으로 저장 될 것이라고 생각합니다.

스핀들 수가 많을수록 IOPS가 더 높으면 12 개의 스핀들 모두에 zvol을 '재분배'하여 활용하는 방법은 무엇입니까?

답변:


8

재조정하려면 확장 zpool에 데이터를 다시 써야합니다. 그렇지 않으면 시간이 지남에 따라 쓰기가 전체 풀에 분산됩니다.


빠르고 쉬운 방법이 있다고 생각하지 않습니다 ...?
10

7
zfs send | zfs recv
the-wabbit

나는 그것을 시험하러 갈 것이다-그렇게 간단한 것이 그것을 믿을 수 없다. :)
초에 자라다

3
다시보고, 나는 이것을 한 적이 없으며 호기심이 있습니다.
StrangeWill

3

zvol을 초기 장치에만 저장할 이유는 없습니다. 풀을 확장하면 ZFS는 사용 가능한 모든 기본 장치에서 업데이트 된 데이터를 스팬합니다. ZFS를 사용한 고정 파티션은 없습니다.


4
내 경험상 이것은 사실이 아닙니다. '고정 된 분류 (paritioning)'는 없지만 ZFS는 클라이언트 IO 요청 외부에서 자체 자유 의지로 데이터를 이동하지 않습니다. 앞에서 설명한 시나리오를 작성하고 디스크를 추가 한 다음 원래 LUN에서 많은 IO를 수행하는 경우 데이터가있는 어레이의 처음 두 디스크에 대한 활동 만 표시됩니다. ewwhite는 시간이 지남에 따라 균형이 잡힌다는 것을 지적하지만 더 빠른 방법이 있는지 궁금합니다.
10

1
확실하지 않으면 죄송합니다. 물론 기존 데이터는 마술처럼 움직이지 않습니다. 업데이트 된 데이터 만 균등하게 재배치됩니다. 이것이 바로 "새로운 IO"의 의미입니다. 기존의 정적 데이터에 관한 한, 캐싱은 블록을 두 번 이상 읽는 한 성능을 향상시킵니다.
jlliagre

0

이것은 ewwhite의 답변의 "계속"입니다.

재조정하려면 확장 zpool에 데이터를 다시 써야합니다.

우분투 14.04 호스트에서 이것을 자동화하기 위해 PHP 스크립트 ( github에서 사용 가능 )를 작성했습니다 .

하나는 PHP CLI 도구를 설치하고 sudo apt-get install php5-cli스크립트를 실행하여 풀 데이터의 경로를 첫 번째 인수로 전달하면됩니다. 예 :

php main.php /path/to/my/files

이상적으로 풀의 모든 데이터에서 스크립트를 두 번 실행해야합니다. 첫 번째 실행은 드라이브 사용률의 균형을 유지하지만 개별 파일은 마지막에 추가 된 드라이브에 과도하게 할당됩니다. 두 번째 실행은 각 파일이 드라이브에 "공정하게"분산되어 있는지 확인합니다. 나는 다른 크기 쌍 (4tb 미러 + 3TB 미러 + 3TB 미러)의 레이드 10과 함께 드라이브 용량을 혼합하지 않으면 균등하게 분배되기 때문에 균등하게 대신 말합니다.

스크립트를 사용하는 이유

  • "제자리에서"문제를 해결해야합니다. 예를 들어 다른 시스템에 데이터를 쓸 수 없으며 여기서 삭제 한 후 다시 모두 쓸 수 있습니다.
  • 풀을 50 % 이상 채우므로 원본을 삭제하기 전에 전체 파일 시스템을 한 번에 복사 할 수 없었습니다.
  • 제대로 수행해야하는 특정 파일 만있는 경우 해당 파일에 대해 스크립트를 두 번 실행할 수 있습니다. 그러나 두 번째 실행은 첫 번째 실행이 드라이브 활용도 균형을 유지하는 데 성공한 경우 에만 유효 합니다.
  • 데이터가 많으며 진행 상황을 확인할 수 있기를 원합니다.

심지어 드라이브 사용률이 달성되었는지 어떻게 알 수 있습니까?

iostat 도구를 일정 기간 (예 :) 동안 사용하고 iostat -m 5쓰기를 확인하십시오. 그것들이 동일하다면, 당신은 균일 한 확산을 달성 한 것입니다. RAID 10에서 2TB의 3TB 드라이브로 4TB 쌍을 실행하고 있기 때문에 아래 스크린 샷에도 완벽하게 표시되지 않으므로 두 개의 4가 약간 더 쓰여집니다. 여기에 이미지 설명을 입력하십시오

드라이브 사용률이 "균형 불균형"인 경우 iostat는 새 드라이브가 불균형 적으로 쓰여지는 아래 스크린 샷과 같은 것을 보여줍니다. 또한 데이터가 없기 때문에 읽기가 0에 있기 때문에 새 드라이브임을 알 수 있습니다. 여기에 이미지 설명을 입력하십시오

이 스크립트는 완벽하지는 않지만 해결 방법 일뿐입니다. 그러나 ZFS가 BTRFS와 같은 재조정 기능을 구현할 때까지 (fingers crossed) 그 동안 저에게 효과적입니다.


오 마이 ... 와우 ...
ewwhite

0

글쎄 이것은 약간의 해킹이지만 zvol을 사용하여 시스템을 중지하면 zfs는 파일 시스템을 bar.zvol라는 localhost의 로컬 파일로 보낸 다음 다시 파일 시스템을 수신 할 수 있습니다. 그것은 당신을 위해 데이터를 재조정해야합니다.

zfs send tank/bar > bar.zvol

zfs receive tank/bar < bar.zvol

-1

내가 찾은 가장 좋은 해결책은 확장 된 풀에서 데이터의 절반을 복제 한 다음 원래 복제 된 데이터를 삭제하는 것입니다.


3
정교하게 할 수 있습니까?
ewwhite

@reco : zvols는 파일 시스템이 아니므로 데이터를 삭제하거나 복제 할 수 없습니다. 데이터를 덮어 쓸 수 있지만 기본 볼륨의 데이터를 효과적으로 확장 할 수있는 동일한 내용으로 데이터를 작성하지 않으면 데이터가 손상 될 수 있지만 이는 1 년 전에 이미 ewwhite가 제안한 것입니다.
jlliagre 2018

그래 당신 말이 맞아요. 나는 똑같은 주제를 둘러보고 연구했습니다. 내가 깨달은 것은 zfs를 사용하여 vdev에 데이터를 재배포 할 필요가 없다는 것입니다. 그러나 어떤 이유로 든 데이터를 복제하고 원본을 삭제하면 zfs가 시간이 지남에 따라 수행하는 작업이 가속화됩니다.
reco

1
vdev를 통한 데이터 재배포는 합법적 인 요청입니다. 파일 시스템이 아닌 zvols에 대한 질문이 여전히 누락되어 걱정됩니다. 볼륨에서 데이터를 복제하거나 삭제할 수 없습니다.
jlliagre

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