Это «продолжение» ответа Ewwhite:
Вам нужно будет переписать ваши данные в расширенный zpool, чтобы сбалансировать их
Я написал PHP-скрипт ( доступный на github ) для автоматизации этого на моем хосте Ubuntu 14.04.
Нужно просто установить PHP CLI sudo apt-get install php5-cli
и запустить скрипт, передавая путь к данным ваших пулов в качестве первого аргумента. Например
php main.php /path/to/my/files
В идеале вы должны запустить скрипт дважды для всех данных в пуле. При первом запуске будет сбалансировано использование дисков, но отдельные файлы будут чрезмерно выделены дискам, которые были добавлены последними. Второй запуск гарантирует, что каждый файл «справедливо» распределен по дискам. Я говорю честно, а не равномерно, потому что он будет распределен равномерно, только если вы не смешиваете емкость дисков, как я с моим рейдом 10 пар разных размеров (зеркало 4 ТБ + зеркало 3 ТБ + зеркало 3 ТБ).
Причины использования скрипта
- Я должен решить проблему "на месте". Например, я не могу записать данные в другую систему, удалить их здесь и записать все обратно.
- Я заполнил свой пул более чем на 50%, поэтому я не мог просто скопировать всю файловую систему сразу перед удалением оригинала.
- Если есть только определенные файлы, которые должны работать хорошо, тогда можно просто запустить скрипт дважды над этими файлами. Однако второй запуск эффективен только в том случае, если при первом запуске удалось сбалансировать использование дисков.
- У меня много данных, и я хочу видеть информацию о достигнутом прогрессе.
Как я могу узнать, достигнуто ли даже использование диска?
Используйте инструмент iostat в течение определенного периода времени (например, iostat -m 5
) и проверьте записи. Если они одинаковы, то вы добились равномерного распространения. Они не совсем даже на скриншоте ниже, потому что я использую пару 4 ТБ с 2 парами 3 ТБ дисков в RAID 10, поэтому две 4 будут записаны немного больше.
Если загрузка вашего диска «несбалансированная», то iostat покажет нечто похожее на скриншот ниже, где новые диски записываются непропорционально. Вы также можете сказать, что они являются новыми дисками, потому что чтения равны 0, поскольку у них нет данных на них.
Сценарий не идеален, только обходной путь, но он работает для меня тем временем, пока однажды в ZFS не будет реализована функция балансировки, как в BTRFS (пальцы скрещены).