이것은 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) 그 동안 저에게 효과적입니다.